xref: /aosp_15_r20/external/libvpx/tools/set_analyzer_env.sh (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
1*fb1b10abSAndroid Build Coastguard Worker##  Copyright (c) 2018 The WebM project authors. All Rights Reserved.
2*fb1b10abSAndroid Build Coastguard Worker##
3*fb1b10abSAndroid Build Coastguard Worker##  Use of this source code is governed by a BSD-style license
4*fb1b10abSAndroid Build Coastguard Worker##  that can be found in the LICENSE file in the root of the source
5*fb1b10abSAndroid Build Coastguard Worker##  tree. An additional intellectual property rights grant can be found
6*fb1b10abSAndroid Build Coastguard Worker##  in the file PATENTS.  All contributing project authors may
7*fb1b10abSAndroid Build Coastguard Worker##  be found in the AUTHORS file in the root of the source tree.
8*fb1b10abSAndroid Build Coastguard Worker##
9*fb1b10abSAndroid Build Coastguard Worker##  Sourcing this file sets environment variables to simplify setting up
10*fb1b10abSAndroid Build Coastguard Worker##  sanitizer builds and testing.
11*fb1b10abSAndroid Build Coastguard Worker
12*fb1b10abSAndroid Build Coastguard Workersanitizer="${1}"
13*fb1b10abSAndroid Build Coastguard Worker
14*fb1b10abSAndroid Build Coastguard Workercase "${sanitizer}" in
15*fb1b10abSAndroid Build Coastguard Worker  address) ;;
16*fb1b10abSAndroid Build Coastguard Worker  cfi) ;;
17*fb1b10abSAndroid Build Coastguard Worker  integer) ;;
18*fb1b10abSAndroid Build Coastguard Worker  memory) ;;
19*fb1b10abSAndroid Build Coastguard Worker  thread) ;;
20*fb1b10abSAndroid Build Coastguard Worker  undefined) ;;
21*fb1b10abSAndroid Build Coastguard Worker  clear)
22*fb1b10abSAndroid Build Coastguard Worker    echo "Clearing environment:"
23*fb1b10abSAndroid Build Coastguard Worker    set -x
24*fb1b10abSAndroid Build Coastguard Worker    unset CC CXX LD AR
25*fb1b10abSAndroid Build Coastguard Worker    unset CFLAGS CXXFLAGS LDFLAGS
26*fb1b10abSAndroid Build Coastguard Worker    unset ASAN_OPTIONS MSAN_OPTIONS TSAN_OPTIONS UBSAN_OPTIONS
27*fb1b10abSAndroid Build Coastguard Worker    set +x
28*fb1b10abSAndroid Build Coastguard Worker    return
29*fb1b10abSAndroid Build Coastguard Worker    ;;
30*fb1b10abSAndroid Build Coastguard Worker  *)
31*fb1b10abSAndroid Build Coastguard Worker    echo "Usage: source set_analyzer_env.sh [<sanitizer>|clear]"
32*fb1b10abSAndroid Build Coastguard Worker    echo "  Supported sanitizers:"
33*fb1b10abSAndroid Build Coastguard Worker    echo "    address cfi integer memory thread undefined"
34*fb1b10abSAndroid Build Coastguard Worker    return 1
35*fb1b10abSAndroid Build Coastguard Worker    ;;
36*fb1b10abSAndroid Build Coastguard Workeresac
37*fb1b10abSAndroid Build Coastguard Worker
38*fb1b10abSAndroid Build Coastguard Workerif [ ! $(which clang) ]; then
39*fb1b10abSAndroid Build Coastguard Worker  # TODO(johannkoenig): Support gcc analyzers.
40*fb1b10abSAndroid Build Coastguard Worker  echo "ERROR: 'clang' must be in your PATH"
41*fb1b10abSAndroid Build Coastguard Worker  return 1
42*fb1b10abSAndroid Build Coastguard Workerfi
43*fb1b10abSAndroid Build Coastguard Worker
44*fb1b10abSAndroid Build Coastguard Worker# Warnings.
45*fb1b10abSAndroid Build Coastguard Workerif [ "${sanitizer}" = "undefined" -o "${sanitizer}" = "integer" ]; then
46*fb1b10abSAndroid Build Coastguard Worker  echo "WARNING: When building the ${sanitizer} sanitizer for 32 bit targets"
47*fb1b10abSAndroid Build Coastguard Worker  echo "you must run:"
48*fb1b10abSAndroid Build Coastguard Worker  echo "export LDFLAGS=\"\${LDFLAGS} --rtlib=compiler-rt -lgcc_s\""
49*fb1b10abSAndroid Build Coastguard Worker  echo "See http://llvm.org/bugs/show_bug.cgi?id=17693 for details."
50*fb1b10abSAndroid Build Coastguard Workerfi
51*fb1b10abSAndroid Build Coastguard Worker
52*fb1b10abSAndroid Build Coastguard Workerif [ "${sanitizer}" = "undefined" ]; then
53*fb1b10abSAndroid Build Coastguard Worker  major_version=$(clang --version | head -n 1 \
54*fb1b10abSAndroid Build Coastguard Worker    | grep -o -E "[[:digit:]]\.[[:digit:]]\.[[:digit:]]" | cut -f1 -d.)
55*fb1b10abSAndroid Build Coastguard Worker  if [ ${major_version} -eq 5 ]; then
56*fb1b10abSAndroid Build Coastguard Worker    echo "WARNING: clang v5 has a problem with vp9 x86_64 high bit depth"
57*fb1b10abSAndroid Build Coastguard Worker    echo "configurations. It can take ~40 minutes to compile"
58*fb1b10abSAndroid Build Coastguard Worker    echo "vpx_dsp/x86/fwd_txfm_sse2.c"
59*fb1b10abSAndroid Build Coastguard Worker    echo "clang v4 did not have this issue."
60*fb1b10abSAndroid Build Coastguard Worker  fi
61*fb1b10abSAndroid Build Coastguard Workerfi
62*fb1b10abSAndroid Build Coastguard Worker
63*fb1b10abSAndroid Build Coastguard Workerecho "It is recommended to configure with '--enable-debug' to improve stack"
64*fb1b10abSAndroid Build Coastguard Workerecho "traces. On mac builds, run 'dysmutil' on the output binaries (vpxenc,"
65*fb1b10abSAndroid Build Coastguard Workerecho "test_libvpx, etc) to link the stack traces to source code lines."
66*fb1b10abSAndroid Build Coastguard Worker
67*fb1b10abSAndroid Build Coastguard Worker# Build configuration.
68*fb1b10abSAndroid Build Coastguard Workercflags="-fsanitize=${sanitizer}"
69*fb1b10abSAndroid Build Coastguard Workerldflags="-fsanitize=${sanitizer}"
70*fb1b10abSAndroid Build Coastguard Worker
71*fb1b10abSAndroid Build Coastguard Worker# Useful backtraces.
72*fb1b10abSAndroid Build Coastguard Workercflags="${cflags} -fno-omit-frame-pointer"
73*fb1b10abSAndroid Build Coastguard Worker# Exact backtraces.
74*fb1b10abSAndroid Build Coastguard Workercflags="${cflags} -fno-optimize-sibling-calls"
75*fb1b10abSAndroid Build Coastguard Worker
76*fb1b10abSAndroid Build Coastguard Workerif [ "${sanitizer}" = "cfi" ]; then
77*fb1b10abSAndroid Build Coastguard Worker  # https://clang.llvm.org/docs/ControlFlowIntegrity.html
78*fb1b10abSAndroid Build Coastguard Worker  cflags="${cflags} -fno-sanitize-trap=cfi -flto -fvisibility=hidden"
79*fb1b10abSAndroid Build Coastguard Worker  ldflags="${ldflags} -fno-sanitize-trap=cfi -flto -fuse-ld=gold"
80*fb1b10abSAndroid Build Coastguard Worker  export AR="llvm-ar"
81*fb1b10abSAndroid Build Coastguard Workerfi
82*fb1b10abSAndroid Build Coastguard Worker
83*fb1b10abSAndroid Build Coastguard Workerset -x
84*fb1b10abSAndroid Build Coastguard Workerexport CC="clang"
85*fb1b10abSAndroid Build Coastguard Workerexport CXX="clang++"
86*fb1b10abSAndroid Build Coastguard Workerexport LD="clang++"
87*fb1b10abSAndroid Build Coastguard Worker
88*fb1b10abSAndroid Build Coastguard Workerexport CFLAGS="${cflags}"
89*fb1b10abSAndroid Build Coastguard Workerexport CXXFLAGS="${cflags}"
90*fb1b10abSAndroid Build Coastguard Workerexport LDFLAGS="${ldflags}"
91*fb1b10abSAndroid Build Coastguard Workerset +x
92*fb1b10abSAndroid Build Coastguard Worker
93*fb1b10abSAndroid Build Coastguard Worker# Execution configuration.
94*fb1b10abSAndroid Build Coastguard Workersanitizer_options=""
95*fb1b10abSAndroid Build Coastguard Workersanitizer_options="${sanitizer_options}:handle_segv=1"
96*fb1b10abSAndroid Build Coastguard Workersanitizer_options="${sanitizer_options}:handle_abort=1"
97*fb1b10abSAndroid Build Coastguard Workersanitizer_options="${sanitizer_options}:handle_sigfpe=1"
98*fb1b10abSAndroid Build Coastguard Workersanitizer_options="${sanitizer_options}:fast_unwind_on_fatal=1"
99*fb1b10abSAndroid Build Coastguard Workersanitizer_options="${sanitizer_options}:allocator_may_return_null=1"
100*fb1b10abSAndroid Build Coastguard Worker
101*fb1b10abSAndroid Build Coastguard Workercase "${sanitizer}" in
102*fb1b10abSAndroid Build Coastguard Worker  address)
103*fb1b10abSAndroid Build Coastguard Worker    sanitizer_options="${sanitizer_options}:detect_stack_use_after_return=1"
104*fb1b10abSAndroid Build Coastguard Worker    sanitizer_options="${sanitizer_options}:max_uar_stack_size_log=17"
105*fb1b10abSAndroid Build Coastguard Worker    set -x
106*fb1b10abSAndroid Build Coastguard Worker    export ASAN_OPTIONS="${sanitizer_options}"
107*fb1b10abSAndroid Build Coastguard Worker    set +x
108*fb1b10abSAndroid Build Coastguard Worker    ;;
109*fb1b10abSAndroid Build Coastguard Worker  cfi)
110*fb1b10abSAndroid Build Coastguard Worker    # No environment settings
111*fb1b10abSAndroid Build Coastguard Worker    ;;
112*fb1b10abSAndroid Build Coastguard Worker  memory)
113*fb1b10abSAndroid Build Coastguard Worker    set -x
114*fb1b10abSAndroid Build Coastguard Worker    export MSAN_OPTIONS="${sanitizer_options}"
115*fb1b10abSAndroid Build Coastguard Worker    set +x
116*fb1b10abSAndroid Build Coastguard Worker    ;;
117*fb1b10abSAndroid Build Coastguard Worker  thread)
118*fb1b10abSAndroid Build Coastguard Worker    # The thread sanitizer uses an entirely independent set of options.
119*fb1b10abSAndroid Build Coastguard Worker    set -x
120*fb1b10abSAndroid Build Coastguard Worker    export TSAN_OPTIONS="halt_on_error=1"
121*fb1b10abSAndroid Build Coastguard Worker    set +x
122*fb1b10abSAndroid Build Coastguard Worker    ;;
123*fb1b10abSAndroid Build Coastguard Worker  undefined|integer)
124*fb1b10abSAndroid Build Coastguard Worker    sanitizer_options="${sanitizer_options}:print_stacktrace=1"
125*fb1b10abSAndroid Build Coastguard Worker    set -x
126*fb1b10abSAndroid Build Coastguard Worker    export UBSAN_OPTIONS="${sanitizer_options}"
127*fb1b10abSAndroid Build Coastguard Worker    set +x
128*fb1b10abSAndroid Build Coastguard Worker    ;;
129*fb1b10abSAndroid Build Coastguard Workeresac
130