#!/usr/bin/env bash

# Copyright 2018 The Fuchsia Authors
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT

function usage {
    echo "usage: $0 [options] [-- <symbolizer args>]"
    echo "-a <arch>           : arm64, or x64"
    echo "-C                  : use Clang build"
    echo "-A                  : use ASan build"
    echo "-P                  : use profile build"
    echo "-L                  : use LTO build"
    echo "-l                  : use ThinLTO build"
    echo "-X                  : use XRay build"
    echo "-o <dir>            : build directory"
    echo "-i <file>           : ids.txt file"
    echo "-h for help"
    echo "all arguments after -- are passed to the symbolizer directly"
    exit 1
}

ARCH=x64
CLANG=0
ASAN=0
BUILDDIR=
IDSTXT=
LTO=0
THINLTO=0
PROFILE=0
XRAY=0
ZIRCON_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
PREBUILT_DIR="${ZIRCON_ROOT}/prebuilt/downloads"

if [[ -z "$LLVM_SYMBOLIZER" ]]; then
  readonly LLVM_SYMBOLIZER="${PREBUILT_DIR}/clang/bin/llvm-symbolizer"
fi

readonly SYMBOLIZE="${PREBUILT_DIR}/symbolize"


while getopts "a:CAPLlXo:i:h" FLAG
do
    case $FLAG in
        a)   ARCH=$OPTARG;;
        C)   CLANG=1;;
        A)   ASAN=1;;
        P)   PROFILE=1;;
        L)   LTO=1;;
        l)   THINLTO=1;;
        X)   XRAY=1;;
        o)   BUILDDIR=$OPTARG;;
        i)   IDSTXT=$OPTARG;;
        h)   usage;;
        [?]) echo unrecognized option
             usage;;
    esac
done
shift $((OPTIND-1))

if [[ -z "$IDSTXT" ]]; then
    if [[ -z "$BUILDDIR" ]]; then
        VARIANT=gcc
        if (( $ASAN )); then
            VARIANT=asan
        elif (( $CLANG )); then
            VARIANT=clang
        elif (( $LTO )); then
            VARIANT=lto
        elif (( $THINLTO )); then
            VARIANT=thinlto
        elif (( $PROFILE )); then
            VARIANT=profile
        elif (( $XRAY )); then
            VARIANT=xray
        fi
        BUILDDIR="${ZIRCON_ROOT}/build-$VARIANT"
    fi
    IDARGS=(-build-id-dir "$BUILDDIR/.build-id")
else
    IDARGS=(-ids "$IDSTXT")
fi

exec "$SYMBOLIZE" -llvm-symbolizer "$LLVM_SYMBOLIZER" "${IDARGS[@]}" "$@"
