[libcxx] [ci] Add a Windows CI configuration for a statically linked libc++
On Windows, static vs DLL linking affects details in quite a few
cases, so it's good to have coverage for both cases.
Testing with static linking also increases coverage for a number of
cases and individual checks that have had to be waived for the DLL
case, and allows testing libc++experimental, increasing the number
of test cases actually executed by 180 (176 new tests from
libc++experimental and 4 ones that are XFAIL windows-dll).
Also drop the "generic-" prefix from these configuration names, as
they're perhaps not what the "generic" prefix intended originally
in the other generic-posix configurations.
Differential Revision: https://reviews.llvm.org/D101565
GitOrigin-RevId: 9b24ff9cd2efe1d8319af023ffb69efdaf4cd5ce
diff --git a/test/libcxx/experimental/memory/memory.resource.adaptor/memory.resource.adaptor.mem/db_deallocate.pass.cpp b/test/libcxx/experimental/memory/memory.resource.adaptor/memory.resource.adaptor.mem/db_deallocate.pass.cpp
index eaf5d0b..109375b 100644
--- a/test/libcxx/experimental/memory/memory.resource.adaptor/memory.resource.adaptor.mem/db_deallocate.pass.cpp
+++ b/test/libcxx/experimental/memory/memory.resource.adaptor/memory.resource.adaptor.mem/db_deallocate.pass.cpp
@@ -14,6 +14,8 @@
// T* polymorphic_allocator<T>::deallocate(T*, size_t size)
+// XFAIL: LIBCXX-WINDOWS-FIXME
+
int AssertCount = 0;
#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : (void)::AssertCount++)
diff --git a/utils/ci/buildkite-pipeline.yml b/utils/ci/buildkite-pipeline.yml
index 2cc95ad..d6c3a13 100644
--- a/utils/ci/buildkite-pipeline.yml
+++ b/utils/ci/buildkite-pipeline.yml
@@ -329,8 +329,19 @@
- exit_status: -1 # Agent was lost
limit: 2
- - label: "Windows"
- command: "bash libcxx/utils/ci/run-buildbot generic-win"
+ - label: "Windows (DLL)"
+ command: "bash libcxx/utils/ci/run-buildbot windows-dll"
+ artifact_paths:
+ - "**/test-results.xml"
+ agents:
+ queue: "windows"
+ retry:
+ automatic:
+ - exit_status: -1 # Agent was lost
+ limit: 2
+
+ - label: "Windows (Static)"
+ command: "bash libcxx/utils/ci/run-buildbot windows-static"
artifact_paths:
- "**/test-results.xml"
agents:
diff --git a/utils/ci/run-buildbot b/utils/ci/run-buildbot
index 14c527e..baf4707 100755
--- a/utils/ci/run-buildbot
+++ b/utils/ci/run-buildbot
@@ -75,19 +75,44 @@
rm -rf "${BUILD_DIR}"
}
-function generate-cmake() {
+function generate-cmake-base() {
echo "--- Generating CMake"
- cmake -S "${MONOREPO_ROOT}/llvm" \
+ cmake \
-B "${BUILD_DIR}" \
-GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
- -DLLVM_ENABLE_PROJECTS="libcxx;libunwind;libcxxabi" \
-DLLVM_LIT_ARGS="-sv --show-unsupported --xunit-xml-output test-results.xml" \
+ "${@}"
+}
+
+function generate-cmake() {
+ generate-cmake-base \
+ -S "${MONOREPO_ROOT}/llvm" \
+ -DLLVM_ENABLE_PROJECTS="libcxx;libunwind;libcxxabi" \
-DLIBCXX_CXX_ABI=libcxxabi \
"${@}"
}
+function generate-cmake-libcxx-win() {
+ # TODO: Clang-cl in MSVC configurations don't have access to compiler_rt
+ # builtins helpers for int128 division. See
+ # https://reviews.llvm.org/D91139#2429595 for a comment about longterm
+ # intent for handling the issue. In the meantime, define
+ # -D_LIBCPP_HAS_NO_INT128 (both when building the library itself and
+ # when building tests) to allow enabling filesystem for running tests,
+ # even if it uses a non-permanent ABI.
+
+ generate-cmake-base \
+ -S "${MONOREPO_ROOT}/libcxx" \
+ -DCMAKE_C_COMPILER=clang-cl \
+ -DCMAKE_CXX_COMPILER=clang-cl \
+ -DLIBCXX_ENABLE_FILESYSTEM=YES \
+ -DCMAKE_CXX_FLAGS="-D_LIBCPP_HAS_NO_INT128" \
+ -DLIBCXX_TEST_COMPILER_FLAGS="-D_LIBCPP_HAS_NO_INT128" \
+ "${@}"
+}
+
function check-cxx-cxxabi() {
echo "--- Installing libc++ and libc++abi to a fake location"
${NINJA} -vC "${BUILD_DIR}" install-cxx install-cxxabi
@@ -485,35 +510,21 @@
generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv7Thumb-noexceptions.cmake"
check-cxx-cxxabi
;;
-generic-win)
+windows-dll)
clean
- # TODO: Clang-cl in MSVC configurations don't have access to compiler_rt
- # builtins helpers for int128 division. See
- # https://reviews.llvm.org/D91139#2429595 for a comment about longterm
- # intent for handling the issue. In the meantime, define
- # -D_LIBCPP_HAS_NO_INT128 (both when building the library itself and
- # when building tests) to allow enabling filesystem for running tests,
- # even if it uses a non-permanent ABI.
-
# TODO: Currently, building with the experimental library breaks running
# tests (the test linking look for the c++experimental library with the
# wrong name, and the statically linked c++experimental can't be linked
# correctly when libc++ visibility attributes indicate dllimport linkage
# anyway), thus just disable the experimental library. Remove this
# setting when cmake and the test driver does the right thing automatically.
-
- echo "--- Generating CMake"
- cmake -S "${MONOREPO_ROOT}/libcxx" \
- -B "${BUILD_DIR}" \
- -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
- -DCMAKE_BUILD_TYPE=RelWithDebInfo \
- -DCMAKE_C_COMPILER=clang-cl \
- -DCMAKE_CXX_COMPILER=clang-cl \
- -DLLVM_LIT_ARGS="-sv --show-unsupported --xunit-xml-output test-results.xml" \
- -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=NO \
- -DLIBCXX_ENABLE_FILESYSTEM=YES \
- -DCMAKE_CXX_FLAGS="-D_LIBCPP_HAS_NO_INT128" \
- -DLIBCXX_TEST_COMPILER_FLAGS="-D_LIBCPP_HAS_NO_INT128"
+ generate-cmake-libcxx-win -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF
+ echo "+++ Running the libc++ tests"
+ ${NINJA} -vC "${BUILD_DIR}" check-cxx
+;;
+windows-static)
+ clean
+ generate-cmake-libcxx-win -DLIBCXX_ENABLE_SHARED=OFF
echo "+++ Running the libc++ tests"
${NINJA} -vC "${BUILD_DIR}" check-cxx
;;