
We do not gain any additional security from having PIE on the test binaries, and this does have an impact on test times. It is about 10% from my measurements. Not as much as previous reports (https://reviews.llvm.org/D140880), but still significant. This is a similar gain to finish enabling the lit internal shell, which will take significantly more effort. I also do not think this is a meaningful enough difference from the "default" configuration to keep it the default, especially given the option is mostly set by distros.
104 lines
3.3 KiB
Bash
Executable File
104 lines
3.3 KiB
Bash
Executable File
#!/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
|
|
#
|
|
#===----------------------------------------------------------------------===##
|
|
|
|
#
|
|
# This script performs a monolithic build of the monorepo and runs the tests of
|
|
# most projects on Linux. This should be replaced by per-project scripts that
|
|
# run only the relevant tests.
|
|
#
|
|
|
|
source .ci/utils.sh
|
|
|
|
INSTALL_DIR="${BUILD_DIR}/install"
|
|
|
|
mkdir -p artifacts/reproducers
|
|
|
|
# Make sure any clang reproducers will end up as artifacts
|
|
export CLANG_CRASH_DIAGNOSTICS_DIR=`realpath artifacts/reproducers`
|
|
|
|
projects="${1}"
|
|
targets="${2}"
|
|
runtimes="${3}"
|
|
runtime_targets="${4}"
|
|
runtime_targets_needs_reconfig="${5}"
|
|
enable_cir="${6}"
|
|
|
|
lit_args="-v --xunit-xml-output ${BUILD_DIR}/test-results.xml --use-unique-output-file-name --timeout=1200 --time-tests --succinct"
|
|
|
|
start-group "CMake"
|
|
export PIP_BREAK_SYSTEM_PACKAGES=1
|
|
pip install -q -r "${MONOREPO_ROOT}"/.ci/all_requirements.txt
|
|
|
|
# Set the system llvm-symbolizer as preferred.
|
|
export LLVM_SYMBOLIZER_PATH=`which llvm-symbolizer`
|
|
[[ ! -f "${LLVM_SYMBOLIZER_PATH}" ]] && echo "llvm-symbolizer not found!"
|
|
|
|
# Set up all runtimes either way. libcxx is a dependency of LLDB.
|
|
# It will not be built unless it is used.
|
|
cmake -S "${MONOREPO_ROOT}"/llvm -B "${BUILD_DIR}" \
|
|
-D LLVM_ENABLE_PROJECTS="${projects}" \
|
|
-D LLVM_ENABLE_RUNTIMES="${runtimes}" \
|
|
-G Ninja \
|
|
-D CMAKE_PREFIX_PATH="${HOME}/.local" \
|
|
-D CMAKE_BUILD_TYPE=Release \
|
|
-D CLANG_ENABLE_CIR=${enable_cir} \
|
|
-D LLVM_ENABLE_ASSERTIONS=ON \
|
|
-D LLVM_BUILD_EXAMPLES=ON \
|
|
-D COMPILER_RT_BUILD_LIBFUZZER=OFF \
|
|
-D LLVM_LIT_ARGS="${lit_args}" \
|
|
-D LLVM_ENABLE_LLD=ON \
|
|
-D CMAKE_CXX_FLAGS=-gmlt \
|
|
-D CMAKE_C_COMPILER_LAUNCHER=sccache \
|
|
-D CMAKE_CXX_COMPILER_LAUNCHER=sccache \
|
|
-D LIBCXX_CXX_ABI=libcxxabi \
|
|
-D MLIR_ENABLE_BINDINGS_PYTHON=ON \
|
|
-D LLDB_ENABLE_PYTHON=ON \
|
|
-D LLDB_ENFORCE_STRICT_TEST_REQUIREMENTS=ON \
|
|
-D CMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
|
|
-D CMAKE_EXE_LINKER_FLAGS="-no-pie"
|
|
|
|
start-group "ninja"
|
|
|
|
# Targets are not escaped as they are passed as separate arguments.
|
|
ninja -C "${BUILD_DIR}" -k 0 ${targets} |& tee ninja.log
|
|
|
|
if [[ "${runtime_targets}" != "" ]]; then
|
|
start-group "ninja Runtimes"
|
|
|
|
ninja -C "${BUILD_DIR}" ${runtime_targets} |& tee ninja_runtimes.log
|
|
fi
|
|
|
|
# Compiling runtimes with just-built Clang and running their tests
|
|
# as an additional testing for Clang.
|
|
if [[ "${runtime_targets_needs_reconfig}" != "" ]]; then
|
|
start-group "CMake Runtimes C++26"
|
|
|
|
cmake \
|
|
-D LIBCXX_TEST_PARAMS="std=c++26" \
|
|
-D LIBCXXABI_TEST_PARAMS="std=c++26" \
|
|
"${BUILD_DIR}"
|
|
|
|
start-group "ninja Runtimes C++26"
|
|
|
|
ninja -C "${BUILD_DIR}" ${runtime_targets_needs_reconfig} \
|
|
|& tee ninja_runtimes_needs_reconfig1.log
|
|
|
|
start-group "CMake Runtimes Clang Modules"
|
|
|
|
cmake \
|
|
-D LIBCXX_TEST_PARAMS="enable_modules=clang" \
|
|
-D LIBCXXABI_TEST_PARAMS="enable_modules=clang" \
|
|
"${BUILD_DIR}"
|
|
|
|
start-group "ninja Runtimes Clang Modules"
|
|
|
|
ninja -C "${BUILD_DIR}" ${runtime_targets_needs_reconfig} \
|
|
|& tee ninja_runtimes_needs_reconfig2.log
|
|
fi
|