xref: /aosp_15_r20/external/libcxx/utils/ci/macos-trunk.sh (revision 58b9f456b02922dfdb1fad8a988d5fd8765ecb80)
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