mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-14 16:36:42 +00:00

This enables using tools like https://github.com/nico/ninjatracing for performance introspection. Reviewers: mizvekov, lnihlen, tstellar, Endilll, Keenuts Reviewed By: Keenuts Pull Request: https://github.com/llvm/llvm-project/pull/135539
138 lines
4.6 KiB
Bash
Executable File
138 lines
4.6 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.
|
|
#
|
|
|
|
set -ex
|
|
set -o pipefail
|
|
|
|
MONOREPO_ROOT="${MONOREPO_ROOT:="$(git rev-parse --show-toplevel)"}"
|
|
BUILD_DIR="${BUILD_DIR:=${MONOREPO_ROOT}/build}"
|
|
INSTALL_DIR="${BUILD_DIR}/install"
|
|
rm -rf "${BUILD_DIR}"
|
|
|
|
ccache --zero-stats
|
|
|
|
if [[ -n "${CLEAR_CACHE:-}" ]]; then
|
|
echo "clearing cache"
|
|
ccache --clear
|
|
fi
|
|
|
|
function at-exit {
|
|
retcode=$?
|
|
|
|
mkdir -p artifacts
|
|
ccache --print-stats > artifacts/ccache_stats.txt
|
|
cp "${BUILD_DIR}"/.ninja_log artifacts/.ninja_log
|
|
|
|
# If building fails there will be no results files.
|
|
shopt -s nullglob
|
|
if command -v buildkite-agent 2>&1 >/dev/null
|
|
then
|
|
python3 "${MONOREPO_ROOT}"/.ci/generate_test_report_buildkite.py ":linux: Linux x64 Test Results" \
|
|
"linux-x64-test-results" $retcode "${BUILD_DIR}"/test-results.*.xml
|
|
else
|
|
python3 "${MONOREPO_ROOT}"/.ci/generate_test_report_github.py ":linux: Linux x64 Test Results" \
|
|
$retcode "${BUILD_DIR}"/test-results.*.xml >> $GITHUB_STEP_SUMMARY
|
|
fi
|
|
}
|
|
trap at-exit EXIT
|
|
|
|
projects="${1}"
|
|
targets="${2}"
|
|
|
|
lit_args="-v --xunit-xml-output ${BUILD_DIR}/test-results.xml --use-unique-output-file-name --timeout=1200 --time-tests"
|
|
|
|
echo "--- cmake"
|
|
export PIP_BREAK_SYSTEM_PACKAGES=1
|
|
pip install -q -r "${MONOREPO_ROOT}"/mlir/python/requirements.txt
|
|
pip install -q -r "${MONOREPO_ROOT}"/lldb/test/requirements.txt
|
|
pip install -q -r "${MONOREPO_ROOT}"/.ci/requirements.txt
|
|
cmake -S "${MONOREPO_ROOT}"/llvm -B "${BUILD_DIR}" \
|
|
-D LLVM_ENABLE_PROJECTS="${projects}" \
|
|
-G Ninja \
|
|
-D CMAKE_BUILD_TYPE=Release \
|
|
-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 LLVM_CCACHE_BUILD=ON \
|
|
-D MLIR_ENABLE_BINDINGS_PYTHON=ON \
|
|
-D CMAKE_INSTALL_PREFIX="${INSTALL_DIR}"
|
|
|
|
echo "--- ninja"
|
|
# Targets are not escaped as they are passed as separate arguments.
|
|
ninja -C "${BUILD_DIR}" -k 0 ${targets}
|
|
|
|
runtimes="${3}"
|
|
runtime_targets="${4}"
|
|
|
|
# Compiling runtimes with just-built Clang and running their tests
|
|
# as an additional testing for Clang.
|
|
if [[ "${runtimes}" != "" ]]; then
|
|
if [[ "${runtime_targets}" == "" ]]; then
|
|
echo "Runtimes to build are specified, but targets are not."
|
|
exit 1
|
|
fi
|
|
|
|
echo "--- ninja install-clang"
|
|
|
|
ninja -C ${BUILD_DIR} install-clang install-clang-resource-headers
|
|
|
|
RUNTIMES_BUILD_DIR="${MONOREPO_ROOT}/build-runtimes"
|
|
INSTALL_DIR="${BUILD_DIR}/install"
|
|
mkdir -p ${RUNTIMES_BUILD_DIR}
|
|
|
|
echo "--- cmake runtimes C++26"
|
|
|
|
rm -rf "${RUNTIMES_BUILD_DIR}"
|
|
cmake -S "${MONOREPO_ROOT}/runtimes" -B "${RUNTIMES_BUILD_DIR}" -GNinja \
|
|
-D CMAKE_C_COMPILER="${INSTALL_DIR}/bin/clang" \
|
|
-D CMAKE_CXX_COMPILER="${INSTALL_DIR}/bin/clang++" \
|
|
-D LLVM_ENABLE_RUNTIMES="${runtimes}" \
|
|
-D LIBCXX_CXX_ABI=libcxxabi \
|
|
-D CMAKE_BUILD_TYPE=RelWithDebInfo \
|
|
-D CMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
|
|
-D LIBCXX_TEST_PARAMS="std=c++26" \
|
|
-D LIBCXXABI_TEST_PARAMS="std=c++26" \
|
|
-D LLVM_LIT_ARGS="${lit_args}"
|
|
|
|
echo "--- ninja runtimes C++26"
|
|
|
|
ninja -vC "${RUNTIMES_BUILD_DIR}" ${runtime_targets}
|
|
|
|
echo "--- cmake runtimes clang modules"
|
|
|
|
# We don't need to do a clean build of runtimes, because LIBCXX_TEST_PARAMS
|
|
# and LIBCXXABI_TEST_PARAMS only affect lit configuration, which successfully
|
|
# propagates without a clean build. Other that those two variables, builds
|
|
# are supposed to be the same.
|
|
|
|
cmake -S "${MONOREPO_ROOT}/runtimes" -B "${RUNTIMES_BUILD_DIR}" -GNinja \
|
|
-D CMAKE_C_COMPILER="${INSTALL_DIR}/bin/clang" \
|
|
-D CMAKE_CXX_COMPILER="${INSTALL_DIR}/bin/clang++" \
|
|
-D LLVM_ENABLE_RUNTIMES="${runtimes}" \
|
|
-D LIBCXX_CXX_ABI=libcxxabi \
|
|
-D CMAKE_BUILD_TYPE=RelWithDebInfo \
|
|
-D CMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
|
|
-D LIBCXX_TEST_PARAMS="enable_modules=clang" \
|
|
-D LIBCXXABI_TEST_PARAMS="enable_modules=clang" \
|
|
-D LLVM_LIT_ARGS="${lit_args}"
|
|
|
|
echo "--- ninja runtimes clang modules"
|
|
|
|
ninja -vC "${RUNTIMES_BUILD_DIR}" ${runtime_targets}
|
|
fi
|