blob: 3bfc279cc771472abec140a40d1410cc5d699ab8 [file] [log] [blame]
#!/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[@]}" "$@"