xref: /aosp_15_r20/external/angle/build/android/generate_wrap_sh.py (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker#! /usr/bin/env python3
2*8975f5c5SAndroid Build Coastguard Worker# Copyright 2024 The Chromium Authors
3*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker
6*8975f5c5SAndroid Build Coastguard Workerimport argparse
7*8975f5c5SAndroid Build Coastguard Workerimport pathlib
8*8975f5c5SAndroid Build Coastguard Worker
9*8975f5c5SAndroid Build Coastguard Worker
10*8975f5c5SAndroid Build Coastguard Workerdef _generate(arch):
11*8975f5c5SAndroid Build Coastguard Worker  return f"""\
12*8975f5c5SAndroid Build Coastguard Worker#!/system/bin/sh
13*8975f5c5SAndroid Build Coastguard Worker# See: https://github.com/google/sanitizers/wiki/AddressSanitizerOnAndroid/\
14*8975f5c5SAndroid Build Coastguard Worker01f8df1ac1a447a8475cdfcb03e8b13140042dbd#running-with-wrapsh-recommended
15*8975f5c5SAndroid Build Coastguard WorkerHERE="$(cd "$(dirname "$0")" && pwd)"
16*8975f5c5SAndroid Build Coastguard Worker# Options suggested by wiki docs:
17*8975f5c5SAndroid Build Coastguard Worker_ASAN_OPTIONS="log_to_syslog=false,allow_user_segv_handler=1"
18*8975f5c5SAndroid Build Coastguard Worker# Chromium-specific option (supposedly for graphics drivers):
19*8975f5c5SAndroid Build Coastguard Worker_ASAN_OPTIONS="$_ASAN_OPTIONS,strict_memcmp=0,use_sigaltstack=1"
20*8975f5c5SAndroid Build Coastguard Worker_LD_PRELOAD="$HERE/libclang_rt.asan-{arch}-android.so"
21*8975f5c5SAndroid Build Coastguard Workerlog -t cr_wrap.sh -- "Launching with ASAN enabled."
22*8975f5c5SAndroid Build Coastguard Workerlog -t cr_wrap.sh -- "LD_PRELOAD=$_LD_PRELOAD"
23*8975f5c5SAndroid Build Coastguard Workerlog -t cr_wrap.sh -- "ASAN_OPTIONS=$_ASAN_OPTIONS"
24*8975f5c5SAndroid Build Coastguard Workerlog -t cr_wrap.sh -- "Command: $0 $@"
25*8975f5c5SAndroid Build Coastguard Worker# Export LD_PRELOAD after running "log" commands to not risk it affecting
26*8975f5c5SAndroid Build Coastguard Worker# them.
27*8975f5c5SAndroid Build Coastguard Workerexport LD_PRELOAD=$_LD_PRELOAD
28*8975f5c5SAndroid Build Coastguard Workerexport ASAN_OPTIONS=$_ASAN_OPTIONS
29*8975f5c5SAndroid Build Coastguard Workerexec "$@"
30*8975f5c5SAndroid Build Coastguard Worker"""
31*8975f5c5SAndroid Build Coastguard Worker
32*8975f5c5SAndroid Build Coastguard Worker
33*8975f5c5SAndroid Build Coastguard Workerdef main():
34*8975f5c5SAndroid Build Coastguard Worker  parser = argparse.ArgumentParser()
35*8975f5c5SAndroid Build Coastguard Worker  parser.add_argument('--arch', required=True)
36*8975f5c5SAndroid Build Coastguard Worker  parser.add_argument('--output', required=True)
37*8975f5c5SAndroid Build Coastguard Worker  args = parser.parse_args()
38*8975f5c5SAndroid Build Coastguard Worker
39*8975f5c5SAndroid Build Coastguard Worker  pathlib.Path(args.output).write_text(_generate(args.arch))
40*8975f5c5SAndroid Build Coastguard Worker
41*8975f5c5SAndroid Build Coastguard Worker
42*8975f5c5SAndroid Build Coastguard Workerif __name__ == '__main__':
43*8975f5c5SAndroid Build Coastguard Worker  main()
44