1*58b9f456SAndroid Build Coastguard Worker#!/usr/bin/env bash 2*58b9f456SAndroid Build Coastguard Worker 3*58b9f456SAndroid Build Coastguard Workerset -ue 4*58b9f456SAndroid Build Coastguard Worker 5*58b9f456SAndroid Build Coastguard Workerfunction usage() { 6*58b9f456SAndroid Build Coastguard Worker cat <<EOM 7*58b9f456SAndroid Build Coastguard Worker$(basename ${0}) [-h|--help] --libcxx-root <LIBCXX-ROOT> --libcxxabi-root <LIBCXXABI-ROOT> --std <STD> --arch <ARCHITECTURE> [--lit-args <ARGS...>] 8*58b9f456SAndroid Build Coastguard Worker 9*58b9f456SAndroid Build Coastguard WorkerThis script is used to continually test libc++ and libc++abi trunk on MacOS. 10*58b9f456SAndroid Build Coastguard Worker 11*58b9f456SAndroid Build Coastguard Worker --libcxx-root Full path to the root of the libc++ repository to test. 12*58b9f456SAndroid Build Coastguard Worker --libcxxabi-root Full path to the root of the libc++abi repository to test. 13*58b9f456SAndroid Build Coastguard Worker --std Version of the C++ Standard to run the tests under (c++03, c++11, etc..). 14*58b9f456SAndroid Build Coastguard Worker --arch Architecture to build the tests for (32, 64). 15*58b9f456SAndroid Build Coastguard Worker [--lit-args] Additional arguments to pass to lit (optional). If there are multiple arguments, quote them to pass them as a single argument to this script. 16*58b9f456SAndroid Build Coastguard Worker [--no-cleanup] Do not cleanup the temporary directory that was used for testing at the end. This can be useful to debug failures. Make sure to clean up manually after. 17*58b9f456SAndroid Build Coastguard Worker [-h, --help] Print this help. 18*58b9f456SAndroid Build Coastguard WorkerEOM 19*58b9f456SAndroid Build Coastguard Worker} 20*58b9f456SAndroid Build Coastguard Worker 21*58b9f456SAndroid Build Coastguard Workerwhile [[ $# -gt 0 ]]; do 22*58b9f456SAndroid Build Coastguard Worker case "$1" in 23*58b9f456SAndroid Build Coastguard Worker --libcxx-root) 24*58b9f456SAndroid Build Coastguard Worker LIBCXX_ROOT="${2}" 25*58b9f456SAndroid Build Coastguard Worker if [[ ! -e "${LIBCXX_ROOT}" ]]; then 26*58b9f456SAndroid Build Coastguard Worker echo "--libcxx-root '${LIBCXX_ROOT}' is not a valid directory" 27*58b9f456SAndroid Build Coastguard Worker usage 28*58b9f456SAndroid Build Coastguard Worker exit 1 29*58b9f456SAndroid Build Coastguard Worker fi 30*58b9f456SAndroid Build Coastguard Worker shift; shift 31*58b9f456SAndroid Build Coastguard Worker ;; 32*58b9f456SAndroid Build Coastguard Worker --libcxxabi-root) 33*58b9f456SAndroid Build Coastguard Worker LIBCXXABI_ROOT="${2}" 34*58b9f456SAndroid Build Coastguard Worker if [[ ! -e "${LIBCXXABI_ROOT}" ]]; then 35*58b9f456SAndroid Build Coastguard Worker echo "--libcxxabi-root '${LIBCXXABI_ROOT}' is not a valid directory" 36*58b9f456SAndroid Build Coastguard Worker usage 37*58b9f456SAndroid Build Coastguard Worker exit 1 38*58b9f456SAndroid Build Coastguard Worker fi 39*58b9f456SAndroid Build Coastguard Worker shift; shift 40*58b9f456SAndroid Build Coastguard Worker ;; 41*58b9f456SAndroid Build Coastguard Worker --std) 42*58b9f456SAndroid Build Coastguard Worker STD="${2}" 43*58b9f456SAndroid Build Coastguard Worker shift; shift 44*58b9f456SAndroid Build Coastguard Worker ;; 45*58b9f456SAndroid Build Coastguard Worker --arch) 46*58b9f456SAndroid Build Coastguard Worker ARCH="${2}" 47*58b9f456SAndroid Build Coastguard Worker shift; shift 48*58b9f456SAndroid Build Coastguard Worker ;; 49*58b9f456SAndroid Build Coastguard Worker --lit-args) 50*58b9f456SAndroid Build Coastguard Worker ADDITIONAL_LIT_ARGS="${2}" 51*58b9f456SAndroid Build Coastguard Worker shift; shift 52*58b9f456SAndroid Build Coastguard Worker ;; 53*58b9f456SAndroid Build Coastguard Worker --no-cleanup) 54*58b9f456SAndroid Build Coastguard Worker NO_CLEANUP="" 55*58b9f456SAndroid Build Coastguard Worker shift 56*58b9f456SAndroid Build Coastguard Worker ;; 57*58b9f456SAndroid Build Coastguard Worker -h|--help) 58*58b9f456SAndroid Build Coastguard Worker usage 59*58b9f456SAndroid Build Coastguard Worker exit 0 60*58b9f456SAndroid Build Coastguard Worker ;; 61*58b9f456SAndroid Build Coastguard Worker *) 62*58b9f456SAndroid Build Coastguard Worker echo "${1} is not a supported argument" 63*58b9f456SAndroid Build Coastguard Worker usage 64*58b9f456SAndroid Build Coastguard Worker exit 1 65*58b9f456SAndroid Build Coastguard Worker ;; 66*58b9f456SAndroid Build Coastguard Worker esac 67*58b9f456SAndroid Build Coastguard Workerdone 68*58b9f456SAndroid Build Coastguard Worker 69*58b9f456SAndroid Build Coastguard Workerif [[ -z ${LIBCXX_ROOT+x} ]]; then echo "--libcxx-root is a required parameter"; usage; exit 1; fi 70*58b9f456SAndroid Build Coastguard Workerif [[ -z ${LIBCXXABI_ROOT+x} ]]; then echo "--libcxxabi-root is a required parameter"; usage; exit 1; fi 71*58b9f456SAndroid Build Coastguard Workerif [[ -z ${STD+x} ]]; then echo "--std is a required parameter"; usage; exit 1; fi 72*58b9f456SAndroid Build Coastguard Workerif [[ -z ${ARCH+x} ]]; then echo "--arch is a required parameter"; usage; exit 1; fi 73*58b9f456SAndroid Build Coastguard Workerif [[ -z ${ADDITIONAL_LIT_ARGS+x} ]]; then ADDITIONAL_LIT_ARGS=""; fi 74*58b9f456SAndroid Build Coastguard Worker 75*58b9f456SAndroid Build Coastguard Worker 76*58b9f456SAndroid Build Coastguard WorkerTEMP_DIR="$(mktemp -d)" 77*58b9f456SAndroid Build Coastguard Workerecho "Created temporary directory ${TEMP_DIR}" 78*58b9f456SAndroid Build Coastguard Workerfunction cleanup { 79*58b9f456SAndroid Build Coastguard Worker if [[ -z ${NO_CLEANUP+x} ]]; then 80*58b9f456SAndroid Build Coastguard Worker echo "Removing temporary directory ${TEMP_DIR}" 81*58b9f456SAndroid Build Coastguard Worker rm -rf "${TEMP_DIR}" 82*58b9f456SAndroid Build Coastguard Worker else 83*58b9f456SAndroid Build Coastguard Worker echo "Temporary directory is at '${TEMP_DIR}', make sure to clean it up yourself" 84*58b9f456SAndroid Build Coastguard Worker fi 85*58b9f456SAndroid Build Coastguard Worker} 86*58b9f456SAndroid Build Coastguard Workertrap cleanup EXIT 87*58b9f456SAndroid Build Coastguard Worker 88*58b9f456SAndroid Build Coastguard Worker 89*58b9f456SAndroid Build Coastguard WorkerLLVM_ROOT="${TEMP_DIR}/llvm" 90*58b9f456SAndroid Build Coastguard WorkerLIBCXX_BUILD_DIR="${TEMP_DIR}/libcxx-build" 91*58b9f456SAndroid Build Coastguard WorkerLIBCXX_INSTALL_DIR="${TEMP_DIR}/libcxx-install" 92*58b9f456SAndroid Build Coastguard WorkerLIBCXXABI_BUILD_DIR="${TEMP_DIR}/libcxxabi-build" 93*58b9f456SAndroid Build Coastguard WorkerLIBCXXABI_INSTALL_DIR="${TEMP_DIR}/libcxxabi-install" 94*58b9f456SAndroid Build Coastguard Worker 95*58b9f456SAndroid Build Coastguard WorkerLLVM_TARBALL_URL="https://github.com/llvm-mirror/llvm/archive/master.tar.gz" 96*58b9f456SAndroid Build Coastguard Workerexport CC="$(xcrun --find clang)" 97*58b9f456SAndroid Build Coastguard Workerexport CXX="$(xcrun --find clang++)" 98*58b9f456SAndroid Build Coastguard Worker 99*58b9f456SAndroid Build Coastguard Worker 100*58b9f456SAndroid Build Coastguard Workerecho "@@@ Downloading LLVM tarball of master (only used for CMake configuration) @@@" 101*58b9f456SAndroid Build Coastguard Workermkdir "${LLVM_ROOT}" 102*58b9f456SAndroid Build Coastguard Workercurl -L "${LLVM_TARBALL_URL}" | tar -xz --strip-components=1 -C "${LLVM_ROOT}" 103*58b9f456SAndroid Build Coastguard Workerecho "@@@@@@" 104*58b9f456SAndroid Build Coastguard Worker 105*58b9f456SAndroid Build Coastguard Worker 106*58b9f456SAndroid Build Coastguard Workerecho "@@@ Setting up LIT flags @@@" 107*58b9f456SAndroid Build Coastguard WorkerLIT_FLAGS="-sv --param=std=${STD} ${ADDITIONAL_LIT_ARGS}" 108*58b9f456SAndroid Build Coastguard Workerif [[ "${ARCH}" == "32" ]]; then 109*58b9f456SAndroid Build Coastguard Worker LIT_FLAGS+=" --param=enable_32bit=true" 110*58b9f456SAndroid Build Coastguard Workerfi 111*58b9f456SAndroid Build Coastguard Workerecho "@@@@@@" 112*58b9f456SAndroid Build Coastguard Worker 113*58b9f456SAndroid Build Coastguard Worker 114*58b9f456SAndroid Build Coastguard Workerecho "@@@ Configuring CMake for libc++ @@@" 115*58b9f456SAndroid Build Coastguard Workermkdir -p "${LIBCXX_BUILD_DIR}" 116*58b9f456SAndroid Build Coastguard Worker(cd "${LIBCXX_BUILD_DIR}" && 117*58b9f456SAndroid Build Coastguard Worker xcrun cmake "${LIBCXX_ROOT}" -GNinja \ 118*58b9f456SAndroid Build Coastguard Worker -DLLVM_PATH="${LLVM_ROOT}" \ 119*58b9f456SAndroid Build Coastguard Worker -DCMAKE_INSTALL_PREFIX="${LIBCXX_INSTALL_DIR}" \ 120*58b9f456SAndroid Build Coastguard Worker -DLLVM_LIT_ARGS="${LIT_FLAGS}" \ 121*58b9f456SAndroid Build Coastguard Worker -DCMAKE_OSX_ARCHITECTURES="i386;x86_64" # Build a universal dylib 122*58b9f456SAndroid Build Coastguard Worker) 123*58b9f456SAndroid Build Coastguard Workerecho "@@@@@@" 124*58b9f456SAndroid Build Coastguard Worker 125*58b9f456SAndroid Build Coastguard Worker 126*58b9f456SAndroid Build Coastguard Workerecho "@@@ Configuring CMake for libc++abi @@@" 127*58b9f456SAndroid Build Coastguard Workermkdir -p "${LIBCXXABI_BUILD_DIR}" 128*58b9f456SAndroid Build Coastguard Worker(cd "${LIBCXXABI_BUILD_DIR}" && 129*58b9f456SAndroid Build Coastguard Worker xcrun cmake "${LIBCXXABI_ROOT}" -GNinja \ 130*58b9f456SAndroid Build Coastguard Worker -DLIBCXXABI_LIBCXX_PATH="${LIBCXX_ROOT}" \ 131*58b9f456SAndroid Build Coastguard Worker -DLLVM_PATH="${LLVM_ROOT}" \ 132*58b9f456SAndroid Build Coastguard Worker -DCMAKE_INSTALL_PREFIX="${LIBCXXABI_INSTALL_DIR}" \ 133*58b9f456SAndroid Build Coastguard Worker -DLLVM_LIT_ARGS="${LIT_FLAGS}" \ 134*58b9f456SAndroid Build Coastguard Worker -DCMAKE_OSX_ARCHITECTURES="i386;x86_64" # Build a universal dylib 135*58b9f456SAndroid Build Coastguard Worker) 136*58b9f456SAndroid Build Coastguard Workerecho "@@@@@@" 137*58b9f456SAndroid Build Coastguard Worker 138*58b9f456SAndroid Build Coastguard Worker 139*58b9f456SAndroid Build Coastguard Workerecho "@@@ Building libc++.dylib and libc++abi.dylib from sources (just to make sure it works) @@@" 140*58b9f456SAndroid Build Coastguard Workerninja -C "${LIBCXX_BUILD_DIR}" install-cxx 141*58b9f456SAndroid Build Coastguard Workerninja -C "${LIBCXXABI_BUILD_DIR}" install-cxxabi 142*58b9f456SAndroid Build Coastguard Workerecho "@@@@@@" 143*58b9f456SAndroid Build Coastguard Worker 144*58b9f456SAndroid Build Coastguard Worker 145*58b9f456SAndroid Build Coastguard Workerecho "@@@ Running tests for libc++ @@@" 146*58b9f456SAndroid Build Coastguard Worker# TODO: We should run check-cxx-abilist too 147*58b9f456SAndroid Build Coastguard Workerninja -C "${LIBCXX_BUILD_DIR}" check-cxx 148*58b9f456SAndroid Build Coastguard Workerecho "@@@@@@" 149*58b9f456SAndroid Build Coastguard Worker 150*58b9f456SAndroid Build Coastguard Worker 151*58b9f456SAndroid Build Coastguard Workerecho "@@@ Running tests for libc++abi @@@" 152*58b9f456SAndroid Build Coastguard Workerninja -C "${LIBCXXABI_BUILD_DIR}" check-cxxabi 153*58b9f456SAndroid Build Coastguard Workerecho "@@@@@@" 154