1#!/usr/bin/env bash
2
3# Copyright 2018 The Fuchsia Authors
4#
5# Use of this source code is governed by a MIT-style
6# license that can be found in the LICENSE file or at
7# https://opensource.org/licenses/MIT
8
9function usage {
10    echo "usage: $0 [options] [-- <symbolizer args>]"
11    echo "-a <arch>           : arm64, or x64"
12    echo "-C                  : use Clang build"
13    echo "-A                  : use ASan build"
14    echo "-P                  : use profile build"
15    echo "-L                  : use LTO build"
16    echo "-l                  : use ThinLTO build"
17    echo "-o <dir>            : build directory"
18    echo "-i <file>           : ids.txt file"
19    echo "-h for help"
20    echo "all arguments after -- are passed to the symbolizer directly"
21    exit 1
22}
23
24ARCH=x64
25CLANG=0
26ASAN=0
27BUILDDIR=
28IDSTXT=
29LTO=0
30THINLTO=0
31PROFILE=0
32ZIRCON_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
33PREBUILT_DIR="${ZIRCON_ROOT}/prebuilt/downloads"
34
35if [[ -z "$LLVM_SYMBOLIZER" ]]; then
36  readonly LLVM_SYMBOLIZER="${PREBUILT_DIR}/clang/bin/llvm-symbolizer"
37fi
38
39readonly SYMBOLIZE="${PREBUILT_DIR}/symbolize"
40
41
42while getopts "a:CAPLlo:i:h" FLAG
43do
44    case $FLAG in
45        a)   ARCH=$OPTARG;;
46        C)   CLANG=1;;
47        A)   ASAN=1;;
48        P)   PROFILE=1;;
49        L)   LTO=1;;
50        l)   THINLTO=1;;
51        o)   BUILDDIR=$OPTARG;;
52        i)   IDSTXT=$OPTARG;;
53        h)   usage;;
54        [?]) echo unrecognized option
55             usage;;
56    esac
57done
58shift $((OPTIND-1))
59
60if [[ -z "$IDSTXT" ]]; then
61    if [[ -n "$BUILDDIR" ]]; then
62        IDSTXT="${BUILDDIR}/ids.txt"
63    else
64        BUILD_SUFFIX=
65        if (( $ASAN )); then
66            BUILD_SUFFIX=-asan
67        elif (( $CLANG )); then
68            BUILD_SUFFIX=-clang
69        elif (( $LTO )); then
70            BUILD_SUFFIX=-lto
71        elif (( $THINLTO )); then
72            BUILD_SUFFIX=-thinlto
73        elif (( $PROFILE )); then
74            BUILD_SUFFIX=-profile
75        fi
76        IDSTXT="${ZIRCON_ROOT}/build-${ARCH}${BUILD_SUFFIX}/ids.txt"
77    fi
78fi
79
80exec "$SYMBOLIZE" -llvm-symbolizer "$LLVM_SYMBOLIZER" -ids "$IDSTXT" "$@"
81