Skip to content

Commit a399c69

Browse files
authored
[CI] monolithic-linux improvements (#135499)
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 built with the just built clang either way. This avoids building the runtimes twice when LLDB is also 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 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 7b5a459 commit a399c69

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
cp "${BUILD_DIR}"/.ninja_log artifacts/.ninja_log
3740

@@ -50,17 +53,28 @@ trap at-exit EXIT
5053

5154
projects="${1}"
5255
targets="${2}"
56+
runtimes="${3}"
5357

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

5660
echo "--- cmake"
61+
5762
export PIP_BREAK_SYSTEM_PACKAGES=1
5863
pip install -q -r "${MONOREPO_ROOT}"/mlir/python/requirements.txt
5964
pip install -q -r "${MONOREPO_ROOT}"/lldb/test/requirements.txt
6065
pip install -q -r "${MONOREPO_ROOT}"/.ci/requirements.txt
66+
67+
# Set the system llvm-symbolizer as preferred.
68+
export LLVM_SYMBOLIZER_PATH=`which llvm-symbolizer`
69+
[[ ! -f "${LLVM_SYMBOLIZER_PATH}" ]] && echo "llvm-symbolizer not found!"
70+
71+
# Set up all runtimes either way. libcxx is a dependency of LLDB.
72+
# If it ends up being unused, not much harm.
6173
cmake -S "${MONOREPO_ROOT}"/llvm -B "${BUILD_DIR}" \
6274
-D LLVM_ENABLE_PROJECTS="${projects}" \
75+
-D LLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
6376
-G Ninja \
77+
-D CMAKE_PREFIX_PATH="${HOME}/.local" \
6478
-D CMAKE_BUILD_TYPE=Release \
6579
-D LLVM_ENABLE_ASSERTIONS=ON \
6680
-D LLVM_BUILD_EXAMPLES=ON \
@@ -69,69 +83,47 @@ cmake -S "${MONOREPO_ROOT}"/llvm -B "${BUILD_DIR}" \
6983
-D LLVM_ENABLE_LLD=ON \
7084
-D CMAKE_CXX_FLAGS=-gmlt \
7185
-D LLVM_CCACHE_BUILD=ON \
86+
-D LIBCXX_CXX_ABI=libcxxabi \
7287
-D MLIR_ENABLE_BINDINGS_PYTHON=ON \
73-
-D CMAKE_INSTALL_PREFIX="${INSTALL_DIR}"
88+
-D LLDB_ENABLE_PYTHON=ON \
89+
-D LLDB_ENFORCE_STRICT_TEST_REQUIREMENTS=ON
7490

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

79-
runtimes="${3}"
8096
runtime_targets="${4}"
8197

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

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

100-
rm -rf "${RUNTIMES_BUILD_DIR}"
101-
cmake -S "${MONOREPO_ROOT}/runtimes" -B "${RUNTIMES_BUILD_DIR}" -GNinja \
102-
-D CMAKE_C_COMPILER="${INSTALL_DIR}/bin/clang" \
103-
-D CMAKE_CXX_COMPILER="${INSTALL_DIR}/bin/clang++" \
104-
-D LLVM_ENABLE_RUNTIMES="${runtimes}" \
105-
-D LIBCXX_CXX_ABI=libcxxabi \
106-
-D CMAKE_BUILD_TYPE=RelWithDebInfo \
107-
-D CMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
112+
cmake -S "${MONOREPO_ROOT}"/llvm -B "${BUILD_DIR}" \
108113
-D LIBCXX_TEST_PARAMS="std=c++26" \
109-
-D LIBCXXABI_TEST_PARAMS="std=c++26" \
110-
-D LLVM_LIT_ARGS="${lit_args}"
114+
-D LIBCXXABI_TEST_PARAMS="std=c++26"
111115

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

114-
ninja -vC "${RUNTIMES_BUILD_DIR}" ${runtime_targets}
118+
ninja -vC "${BUILD_DIR}" ${runtime_targets}
115119

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

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

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

136-
ninja -vC "${RUNTIMES_BUILD_DIR}" ${runtime_targets}
128+
ninja -vC "${BUILD_DIR}" ${runtime_targets}
137129
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)