Skip to content

Commit 456d2fd

Browse files
committed
[CI] monolithic-linux improvements
Some improvements to monolithic-linux CI: 1) Add correct configuration and dependencies for LLDB testing which is actually relevant for clang changes. 2) Skip clang installation and separate configuration for runtimes. They will be build with just built clang either way. This helps in avoiding building the runtimes twice in case LLDB is tested. 3) Make sure any generated clang reproducers end up as artifacts. 4) Set up llvm-symbolizer environment variable so that its preferred over any symbolizer just built, as even if it probably works correctly, it can be much slower when built for debugging. 5) Add all projects as dependencies of `.ci`, to make sure everything is tested when it changes.
1 parent c41ef75 commit 456d2fd

File tree

4 files changed

+53
-44
lines changed

4 files changed

+53
-44
lines changed

.ci/compute_projects.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@
5252
"clang": {"clang-tools-extra", "compiler-rt", "cross-project-tests"},
5353
"clang-tools-extra": {"libc"},
5454
"mlir": {"flang"},
55+
# Test everything if ci scripts are changed.
56+
# FIXME: Figure out what is missing and add here.
57+
".ci": {"llvm", "clang", "lld", "lldb"},
5558
}
5659

5760
DEPENDENT_RUNTIMES_TO_TEST = {"clang": {"libcxx", "libcxxabi", "libunwind"}}
@@ -130,12 +133,11 @@ def _add_dependencies(projects: Set[str]) -> Set[str]:
130133
def _compute_projects_to_test(modified_projects: Set[str], platform: str) -> Set[str]:
131134
projects_to_test = set()
132135
for modified_project in modified_projects:
133-
# Skip all projects where we cannot run tests.
134-
if modified_project not in PROJECT_CHECK_TARGETS:
135-
continue
136136
if modified_project in RUNTIMES:
137137
continue
138-
projects_to_test.add(modified_project)
138+
# Skip all projects where we cannot run tests.
139+
if modified_project in PROJECT_CHECK_TARGETS:
140+
projects_to_test.add(modified_project)
139141
if modified_project not in DEPENDENTS_TO_TEST:
140142
continue
141143
for dependent_project in DEPENDENTS_TO_TEST[modified_project]:

.ci/compute_projects_test.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,19 @@ def test_exclude_gn(self):
188188
self.assertEqual(env_variables["runtimes_to_build"], "")
189189
self.assertEqual(env_variables["runtimes_check_targets"], "")
190190

191+
def test_ci(self):
192+
env_variables = compute_projects.get_env_variables(
193+
[".ci/compute_projects.py"], "Linux"
194+
)
195+
self.assertEqual(env_variables["projects_to_build"],
196+
"clang;lld;llvm;lldb")
197+
self.assertEqual(env_variables["project_check_targets"], "check-clang
198+
check-lld check-llvm check-lldb")
199+
self.assertEqual(env_variables["runtimes_to_build"],
200+
"libcxx;libcxxabi;libunwind")
201+
self.assertEqual(env_variables["runtimes_check_targets"], "check-cxx
202+
check-cxxabi check-unwind")
203+
191204

192205
if __name__ == "__main__":
193206
unittest.main()

.ci/monolithic-linux.sh

Lines changed: 32 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ set -o pipefail
1818

1919
MONOREPO_ROOT="${MONOREPO_ROOT:="$(git rev-parse --show-toplevel)"}"
2020
BUILD_DIR="${BUILD_DIR:=${MONOREPO_ROOT}/build}"
21-
INSTALL_DIR="${BUILD_DIR}/install"
2221
rm -rf "${BUILD_DIR}"
2322

2423
ccache --zero-stats
@@ -28,10 +27,14 @@ if [[ -n "${CLEAR_CACHE:-}" ]]; then
2827
ccache --clear
2928
fi
3029

30+
mkdir -p artifacts/reproducers
31+
32+
# Make sure any clang reproducers will end up as artifacts.
33+
export CLANG_CRASH_DIAGNOSTICS_DIR=`realpath artifacts/reproducers`
34+
3135
function at-exit {
3236
retcode=$?
3337

34-
mkdir -p artifacts
3538
ccache --print-stats > artifacts/ccache_stats.txt
3639

3740
# If building fails there will be no results files.
@@ -49,17 +52,28 @@ trap at-exit EXIT
4952

5053
projects="${1}"
5154
targets="${2}"
55+
runtimes="${3}"
5256

5357
lit_args="-v --xunit-xml-output ${BUILD_DIR}/test-results.xml --use-unique-output-file-name --timeout=1200 --time-tests"
5458

5559
echo "--- cmake"
60+
5661
export PIP_BREAK_SYSTEM_PACKAGES=1
5762
pip install -q -r "${MONOREPO_ROOT}"/mlir/python/requirements.txt
5863
pip install -q -r "${MONOREPO_ROOT}"/lldb/test/requirements.txt
5964
pip install -q -r "${MONOREPO_ROOT}"/.ci/requirements.txt
65+
66+
# Set the system llvm-symbolizer as preferred.
67+
export LLVM_SYMBOLIZER_PATH=`which llvm-symbolizer`
68+
[[ ! -f "${LLVM_SYMBOLIZER_PATH}" ]] && echo "llvm-symbolizer not found!"
69+
70+
# Set up all runtimes either way. libcxx is a dependency of LLDB.
71+
# If it ends up being unused, not much harm.
6072
cmake -S "${MONOREPO_ROOT}"/llvm -B "${BUILD_DIR}" \
6173
-D LLVM_ENABLE_PROJECTS="${projects}" \
74+
-D LLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
6275
-G Ninja \
76+
-D CMAKE_PREFIX_PATH="${HOME}/.local" \
6377
-D CMAKE_BUILD_TYPE=Release \
6478
-D LLVM_ENABLE_ASSERTIONS=ON \
6579
-D LLVM_BUILD_EXAMPLES=ON \
@@ -68,69 +82,47 @@ cmake -S "${MONOREPO_ROOT}"/llvm -B "${BUILD_DIR}" \
6882
-D LLVM_ENABLE_LLD=ON \
6983
-D CMAKE_CXX_FLAGS=-gmlt \
7084
-D LLVM_CCACHE_BUILD=ON \
85+
-D LIBCXX_CXX_ABI=libcxxabi \
7186
-D MLIR_ENABLE_BINDINGS_PYTHON=ON \
72-
-D CMAKE_INSTALL_PREFIX="${INSTALL_DIR}"
87+
-D LLDB_ENABLE_PYTHON=ON \
88+
-D LLDB_ENFORCE_STRICT_TEST_REQUIREMENTS=ON
7389

7490
echo "--- ninja"
91+
7592
# Targets are not escaped as they are passed as separate arguments.
7693
ninja -C "${BUILD_DIR}" -k 0 ${targets}
7794

78-
runtimes="${3}"
7995
runtime_targets="${4}"
8096

81-
# Compiling runtimes with just-built Clang and running their tests
82-
# as an additional testing for Clang.
97+
# Run runtimes tests.
98+
# We don't need to do a clean separate build of runtimes, because runtimes
99+
# will be built against just built clang, and because LIBCXX_TEST_PARAMS
100+
# and LIBCXXABI_TEST_PARAMS only affect lit configuration, which successfully
101+
# propagates without a clean build. Other that those two variables, builds
102+
# are supposed to be the same.
83103
if [[ "${runtimes}" != "" ]]; then
84104
if [[ "${runtime_targets}" == "" ]]; then
85105
echo "Runtimes to build are specified, but targets are not."
86106
exit 1
87107
fi
88108

89-
echo "--- ninja install-clang"
90-
91-
ninja -C ${BUILD_DIR} install-clang install-clang-resource-headers
92-
93-
RUNTIMES_BUILD_DIR="${MONOREPO_ROOT}/build-runtimes"
94-
INSTALL_DIR="${BUILD_DIR}/install"
95-
mkdir -p ${RUNTIMES_BUILD_DIR}
96-
97109
echo "--- cmake runtimes C++26"
98110

99-
rm -rf "${RUNTIMES_BUILD_DIR}"
100-
cmake -S "${MONOREPO_ROOT}/runtimes" -B "${RUNTIMES_BUILD_DIR}" -GNinja \
101-
-D CMAKE_C_COMPILER="${INSTALL_DIR}/bin/clang" \
102-
-D CMAKE_CXX_COMPILER="${INSTALL_DIR}/bin/clang++" \
103-
-D LLVM_ENABLE_RUNTIMES="${runtimes}" \
104-
-D LIBCXX_CXX_ABI=libcxxabi \
105-
-D CMAKE_BUILD_TYPE=RelWithDebInfo \
106-
-D CMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
111+
cmake -S "${MONOREPO_ROOT}"/llvm -B "${BUILD_DIR}" \
107112
-D LIBCXX_TEST_PARAMS="std=c++26" \
108-
-D LIBCXXABI_TEST_PARAMS="std=c++26" \
109-
-D LLVM_LIT_ARGS="${lit_args}"
113+
-D LIBCXXABI_TEST_PARAMS="std=c++26"
110114

111115
echo "--- ninja runtimes C++26"
112116

113-
ninja -vC "${RUNTIMES_BUILD_DIR}" ${runtime_targets}
117+
ninja -vC "${BUILD_DIR}" ${runtime_targets}
114118

115119
echo "--- cmake runtimes clang modules"
116120

117-
# We don't need to do a clean build of runtimes, because LIBCXX_TEST_PARAMS
118-
# and LIBCXXABI_TEST_PARAMS only affect lit configuration, which successfully
119-
# propagates without a clean build. Other that those two variables, builds
120-
# are supposed to be the same.
121-
122-
cmake -S "${MONOREPO_ROOT}/runtimes" -B "${RUNTIMES_BUILD_DIR}" -GNinja \
123-
-D CMAKE_C_COMPILER="${INSTALL_DIR}/bin/clang" \
124-
-D CMAKE_CXX_COMPILER="${INSTALL_DIR}/bin/clang++" \
125-
-D LLVM_ENABLE_RUNTIMES="${runtimes}" \
126-
-D LIBCXX_CXX_ABI=libcxxabi \
127-
-D CMAKE_BUILD_TYPE=RelWithDebInfo \
128-
-D CMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
121+
cmake -S "${MONOREPO_ROOT}"/llvm -B "${BUILD_DIR}" \
129122
-D LIBCXX_TEST_PARAMS="enable_modules=clang" \
130-
-D LIBCXXABI_TEST_PARAMS="enable_modules=clang" \
131-
-D LLVM_LIT_ARGS="${lit_args}"
123+
-D LIBCXXABI_TEST_PARAMS="enable_modules=clang"
132124

133125
echo "--- ninja runtimes clang modules"
134126

135-
ninja -vC "${RUNTIMES_BUILD_DIR}" ${runtime_targets}
127+
ninja -vC "${BUILD_DIR}" ${runtime_targets}
136128
fi

lldb/test/requirements.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ psutil>=5.9.4
55
# See llvm.org/pr22274.
66
pexpect>=4.9.0; sys_platform != 'win32'
77
packaging
8+
# Required for python tests
9+
swig

0 commit comments

Comments
 (0)