#!/usr/bin/env bash #===----------------------------------------------------------------------===## # # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception # #===----------------------------------------------------------------------===## set -ex set -o pipefail unset LANG unset LC_ALL unset LC_COLLATE PROGNAME="$(basename "${0}")" function usage() { cat < [-h|--help] Display this help and exit. --llvm-root Path to the root of the LLVM monorepo. By default, we try to figure it out based on the current working directory. --build-dir The directory to use for building the library. By default, this is '/build/'. EOF } if [[ $# == 0 ]]; then usage exit 0 fi while [[ $# -gt 0 ]]; do case ${1} in -h|--help) usage exit 0 ;; --llvm-root) MONOREPO_ROOT="${2}" shift; shift ;; --build-dir) BUILD_DIR="${2}" shift; shift ;; *) BUILDER="${1}" shift ;; esac done MONOREPO_ROOT="${MONOREPO_ROOT:="$(git rev-parse --show-toplevel)"}" BUILD_DIR="${BUILD_DIR:=${MONOREPO_ROOT}/build/${BUILDER}}" INSTALL_DIR="${BUILD_DIR}/install" function clean() { rm -rf "${BUILD_DIR}" } # Print the version of a few tools to aid diagnostics in some cases cmake --version ninja --version case "${BUILDER}" in check-format) echo "*** Checking for trailing whitespace left in Clang source files ***" if grep -rnI '[[:blank:]]$' clang/lib clang/include clang/docs; then echo "*** Trailing whitespace has been found in Clang source files as described above ***" exit 1 fi ;; build-clang) mkdir install # We use Release here to avoid including debug information. Otherwise, the # clang binary is very large, which is problematic because we need to upload # the artifacts for other jobs to use. This may seem like nothing, but with # the number of jobs we run daily, this can result in thousands of GB of # network I/O. cmake \ -S llvm \ -B ${BUILD_DIR} \ -G Ninja \ -DCMAKE_CXX_COMPILER_LAUNCHER="ccache" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=install \ -DLLVM_ENABLE_PROJECTS="clang;compiler-rt" \ ninja -C ${BUILD_DIR} install-clang install-clang-resource-headers ccache -s tar -cJvf install.tar.xz install/ buildkite-agent artifact upload --debug install.tar.xz ninja -C ${BUILD_DIR} check-clang ;; build-clang-windows) cmake -S llvm -B ${BUILD_DIR} -G Ninja \ -D CMAKE_C_COMPILER_LAUNCHER=sccache \ -D CMAKE_CXX_COMPILER_LAUNCHER=sccache \ -D CMAKE_BUILD_TYPE=Release \ -D CMAKE_INSTALL_PREFIX=install-windows \ -D LLVM_ENABLE_PROJECTS="clang;compiler-rt" \ -D LLVM_ENABLE_ASSERTIONS=ON \ -D LLVM_BUILD_EXAMPLES=ON \ -D COMPILER_RT_BUILD_LIBFUZZER=OFF \ -D COMPILER_RT_BUILD_ORC=OFF ninja -C ${BUILD_DIR} install-clang install-clang-resource-headers ninja -C ${BUILD_DIR} check-clang ;; generic-cxx03) buildkite-agent artifact download install.tar.xz . tar -xvf install.tar.xz export CC=$(pwd)/install/bin/clang export CXX=$(pwd)/install/bin/clang++ chmod +x install/bin/clang install/bin/clang++ clean cmake -S "${MONOREPO_ROOT}/runtimes" -B "${BUILD_DIR}" -GNinja \ -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \ -DLIBCXX_CXX_ABI=libcxxabi \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \ -DLIBCXX_TEST_PARAMS="std=c++03" \ -DLIBCXXABI_TEST_PARAMS="std=c++03" ninja -vC "${BUILD_DIR}" check-runtimes ;; generic-cxx26) buildkite-agent artifact download install.tar.xz . tar -xvf install.tar.xz export CC=$(pwd)/install/bin/clang export CXX=$(pwd)/install/bin/clang++ chmod +x install/bin/clang install/bin/clang++ clean cmake -S "${MONOREPO_ROOT}/runtimes" -B "${BUILD_DIR}" -GNinja \ -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \ -DLIBCXX_CXX_ABI=libcxxabi \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \ -DLIBCXX_TEST_PARAMS="std=c++26" \ -DLIBCXXABI_TEST_PARAMS="std=c++26" ninja -vC "${BUILD_DIR}" check-runtimes ;; generic-modules) buildkite-agent artifact download install.tar.xz . tar -xvf install.tar.xz export CC=$(pwd)/install/bin/clang export CXX=$(pwd)/install/bin/clang++ chmod +x install/bin/clang install/bin/clang++ clean cmake -S "${MONOREPO_ROOT}/runtimes" -B "${BUILD_DIR}" -GNinja \ -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \ -DLIBCXX_CXX_ABI=libcxxabi \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \ -DLIBCXX_TEST_PARAMS="enable_modules=clang" \ -DLIBCXXABI_TEST_PARAMS="enable_modules=clang" ninja -vC "${BUILD_DIR}" check-runtimes ;; ################################################################# # Insert vendor-specific internal configurations below. # # This allows vendors to extend this file with their own internal # configurations without running into merge conflicts with upstream. ################################################################# ################################################################# *) echo "${BUILDER} is not a known configuration" exit 1 ;; esac