xref: /aosp_15_r20/external/toybox/scripts/portability.sh (revision cf5a6c84e2b8763fc1a7db14496fd4742913b199)
1*cf5a6c84SAndroid Build Coastguard Worker# sourced to find alternate names for things
2*cf5a6c84SAndroid Build Coastguard Worker
3*cf5a6c84SAndroid Build Coastguard Workersource ./configure
4*cf5a6c84SAndroid Build Coastguard Worker
5*cf5a6c84SAndroid Build Coastguard Workerif [ -z "$(command -v "$CROSS_COMPILE$CC")" ]
6*cf5a6c84SAndroid Build Coastguard Workerthen
7*cf5a6c84SAndroid Build Coastguard Worker  echo "No $CROSS_COMPILE$CC found" >&2
8*cf5a6c84SAndroid Build Coastguard Worker  exit 1
9*cf5a6c84SAndroid Build Coastguard Workerfi
10*cf5a6c84SAndroid Build Coastguard Worker
11*cf5a6c84SAndroid Build Coastguard Workerif [ -z "$SED" ]
12*cf5a6c84SAndroid Build Coastguard Workerthen
13*cf5a6c84SAndroid Build Coastguard Worker  [ ! -z "$(command -v gsed 2>/dev/null)" ] && SED=gsed || SED=sed
14*cf5a6c84SAndroid Build Coastguard Workerfi
15*cf5a6c84SAndroid Build Coastguard Worker
16*cf5a6c84SAndroid Build Coastguard Worker# Tell linker to do dead code elimination at function level
17*cf5a6c84SAndroid Build Coastguard Workerif [ "$(uname)" == "Darwin" ]
18*cf5a6c84SAndroid Build Coastguard Workerthen
19*cf5a6c84SAndroid Build Coastguard Worker  CFLAGS+=" -Wno-deprecated-declarations"
20*cf5a6c84SAndroid Build Coastguard Worker  : ${LDOPTIMIZE:=-Wl,-dead_strip} ${STRIP:=strip}
21*cf5a6c84SAndroid Build Coastguard Workerelse
22*cf5a6c84SAndroid Build Coastguard Worker  : ${LDOPTIMIZE:=-Wl,--gc-sections -Wl,--as-needed} ${STRIP:=strip -s -R .note* -R .comment}
23*cf5a6c84SAndroid Build Coastguard Workerfi
24*cf5a6c84SAndroid Build Coastguard Worker
25*cf5a6c84SAndroid Build Coastguard Worker# Disable pointless warnings only clang produces
26*cf5a6c84SAndroid Build Coastguard Worker[ -n "$("$CROSS_COMPILE$CC" --version | grep -w clang)" ] &&
27*cf5a6c84SAndroid Build Coastguard Worker  CFLAGS+=" -Wno-string-plus-int -Wno-invalid-source-encoding" ||
28*cf5a6c84SAndroid Build Coastguard Worker# And ones only gcc produces
29*cf5a6c84SAndroid Build Coastguard Worker  CFLAGS+=" -Wno-restrict -Wno-format-overflow"
30*cf5a6c84SAndroid Build Coastguard Worker
31*cf5a6c84SAndroid Build Coastguard Worker# Address Sanitizer
32*cf5a6c84SAndroid Build Coastguard Workerif [ -n "$ASAN" ]; then
33*cf5a6c84SAndroid Build Coastguard Worker  # Turn ASan on and disable most optimization to get more readable backtraces.
34*cf5a6c84SAndroid Build Coastguard Worker  # (Technically ASAN is just "-fsanitize=address" and the rest is optional.)
35*cf5a6c84SAndroid Build Coastguard Worker  export CFLAGS="$CFLAGS -fsanitize=address -O1 -g -fno-omit-frame-pointer -fno-optimize-sibling-calls -static-libasan"
36*cf5a6c84SAndroid Build Coastguard Worker  export NOSTRIP=1
37*cf5a6c84SAndroid Build Coastguard Worker  # Ignore leaks on exit. TODO
38*cf5a6c84SAndroid Build Coastguard Worker  export ASAN_OPTIONS="detect_leaks=0"
39*cf5a6c84SAndroid Build Coastguard Worker  # only do this once
40*cf5a6c84SAndroid Build Coastguard Worker  unset ASAN
41*cf5a6c84SAndroid Build Coastguard Workerfi
42*cf5a6c84SAndroid Build Coastguard Worker
43*cf5a6c84SAndroid Build Coastguard Worker# Probe number of available processors, and add one.
44*cf5a6c84SAndroid Build Coastguard Worker: ${CPUS:=$(($(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null)+1))}
45*cf5a6c84SAndroid Build Coastguard Worker
46*cf5a6c84SAndroid Build Coastguard Worker# If the build is using gnu tools, make them behave less randomly.
47*cf5a6c84SAndroid Build Coastguard Workerexport LANG=c
48*cf5a6c84SAndroid Build Coastguard Workerexport LC_ALL=C
49