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