| 1 | # Usage:
 | 
| 2 | #   source build/common.sh
 | 
| 3 | 
 | 
| 4 | # Include guard.
 | 
| 5 | test -n "${__BUILD_COMMON_SH:-}" && return
 | 
| 6 | readonly __BUILD_COMMON_SH=1
 | 
| 7 | 
 | 
| 8 | if test -z "${REPO_ROOT:-}"; then
 | 
| 9 |   echo 'build/common.sh: $REPO_ROOT should be set before sourcing'
 | 
| 10 |   exit 1
 | 
| 11 | fi
 | 
| 12 | 
 | 
| 13 | set -o nounset
 | 
| 14 | set -o errexit
 | 
| 15 | #eval 'set -o pipefail'
 | 
| 16 | 
 | 
| 17 | # New version is slightly slower -- 13 seconds vs. 11.6 seconds on oils-for-unix
 | 
| 18 | readonly CLANG_DIR_RELATIVE='../oil_DEPS/clang+llvm-14.0.0-x86_64-linux-gnu-ubuntu-18.04'
 | 
| 19 | 
 | 
| 20 | CLANG_DIR_1=$REPO_ROOT/$CLANG_DIR_RELATIVE
 | 
| 21 | CLANG_DIR_FALLBACK=~/git/oilshell/oil/$CLANG_DIR_RELATIVE
 | 
| 22 | if test -d $CLANG_DIR_1; then
 | 
| 23 |   CLANG_DIR=$CLANG_DIR_1
 | 
| 24 |   CLANG_IS_MISSING=''
 | 
| 25 | else
 | 
| 26 |   # BUG FIX: What if we're building _deps/ovm-build or ../benchmark-data/src?
 | 
| 27 |   # Just hard-code an absolute path.  (We used to use $PWD, but I think that
 | 
| 28 |   # was too fragile.)
 | 
| 29 |   CLANG_DIR=$CLANG_DIR_FALLBACK
 | 
| 30 |   CLANG_IS_MISSING='T'
 | 
| 31 | fi
 | 
| 32 | readonly CLANG_DIR
 | 
| 33 | 
 | 
| 34 | readonly CLANG=$CLANG_DIR/bin/clang  # used by benchmarks/{id,ovm-build}.sh
 | 
| 35 | readonly CLANGXX=$CLANG_DIR/bin/clang++
 | 
| 36 | 
 | 
| 37 | # I'm not sure if there's a GCC version of this?
 | 
| 38 | export ASAN_SYMBOLIZER_PATH=$CLANG_DIR_RELATIVE/bin/llvm-symbolizer
 | 
| 39 | 
 | 
| 40 | # ThreadSanitizer doesn't always give us all locations, but this doesn't help
 | 
| 41 | # export TSAN_SYMBOLIZER_PATH=$ASAN_SYMBOLIZER_PATH
 | 
| 42 | 
 | 
| 43 | # equivalent of 'cc' for C++ language
 | 
| 44 | # https://stackoverflow.com/questions/172587/what-is-the-difference-between-g-and-gcc
 | 
| 45 | CXX=${CXX:-'c++'}
 | 
| 46 | 
 | 
| 47 | # Compiler flags we want everywhere.
 | 
| 48 | # - -Weverything is more than -Wall, but too many errors now.
 | 
| 49 | # - -fno-omit-frame-pointer is what Brendan Gregg says should always be on.
 | 
| 50 | #   Omitting the frame pointer might be neglibly faster, but reduces
 | 
| 51 | #   observability.  It's required for the 'perf' tool and other kinds of tracing.
 | 
| 52 | #   Anecdotally the speed difference was in the noise on parsing
 | 
| 53 | #   configure-coreutils.  
 | 
| 54 | # - TODO(6/22): Disabled invalid-offsetof for now, but we should enable it after
 | 
| 55 | #   progress on the garbage collector.  It could catch bugs.
 | 
| 56 | 
 | 
| 57 | # Allow user to override both BASE_CXXFLAGS and CXXFLAGS
 | 
| 58 | # There doesn't seem to be a well-known convention for this.  Similar to this
 | 
| 59 | # question:
 | 
| 60 | # - https://stackoverflow.com/questions/51606653/allowing-users-to-override-cflags-cxxflags-and-friends
 | 
| 61 | 
 | 
| 62 | default_cxx_flags='-std=c++11 -Wall -Wno-invalid-offsetof -fno-omit-frame-pointer'
 | 
| 63 | 
 | 
| 64 | # note: Use - and not :- so that BASE_CXXFLAGS= works
 | 
| 65 | BASE_CXXFLAGS=${BASE_CXXFLAGS-$default_cxx_flags}
 | 
| 66 | 
 | 
| 67 | readonly PY27=Python-2.7.13
 | 
| 68 | 
 | 
| 69 | readonly PREPARE_DIR=$REPO_ROOT/../oil_DEPS/cpython-full
 | 
| 70 | 
 | 
| 71 | log() {
 | 
| 72 |   echo "$@" >&2
 | 
| 73 | }
 | 
| 74 | 
 | 
| 75 | die() {
 | 
| 76 |   log "$0: fatal: $@"
 | 
| 77 |   exit 1
 | 
| 78 | }
 |