[libcxx] [libcxxabi] [libunwind] [llvm] [runtimes] Run backdeployment CI on Github hosted runners (PR #109984)

Louis Dionne via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 26 06:51:10 PDT 2024


https://github.com/ldionne updated https://github.com/llvm/llvm-project/pull/109984

>From 6567a45fca93b81da2ccb0d596aa0be84666eab1 Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Wed, 25 Sep 2024 09:55:53 -0400
Subject: [PATCH 1/3] [runtimes] Run backdeployment CI on Github hosted runners

This removes the need for macOS nodes in Buildkite. It also moves to
the proper way of testing backdeployment, which is to actually run on
the target OS itself, instead of using packaged dylibs from previous OS
versions and trying to emulate backdeployment with DYLD_LIBRARY_PATH.
---
 .github/workflows/libcxx-build-and-test.yaml  | 23 ++++--
 .../apple-libc++-backdeployment.cfg.in        | 65 ----------------
 .../test/configs/apple-libc++-system.cfg.in   | 33 ++++++++
 .../filebuf.members/open_pointer.pass.cpp     |  3 +
 .../fstreams/filebuf.virtuals/setbuf.pass.cpp |  3 +
 .../fstreams/fstream.cons/pointer.pass.cpp    |  3 +
 .../fstream.members/open_pointer.pass.cpp     |  3 +
 .../fstreams/ofstream.cons/pointer.pass.cpp   |  3 +
 .../ofstream.members/open_pointer.pass.cpp    |  3 +
 .../stringstream.members/gcount.pass.cpp      |  3 +
 libcxx/utils/ci/buildkite-pipeline.yml        | 42 ----------
 libcxx/utils/ci/run-buildbot                  | 76 +++----------------
 libcxx/utils/libcxx/test/features.py          | 18 ++---
 .../apple-libc++abi-backdeployment.cfg.in     | 66 ----------------
 .../configs/apple-libc++abi-system.cfg.in     | 34 +++++++++
 .../apple-libunwind-backdeployment.cfg.in     | 67 ----------------
 .../configs/apple-libunwind-system.cfg.in     | 35 +++++++++
 17 files changed, 158 insertions(+), 322 deletions(-)
 delete mode 100644 libcxx/test/configs/apple-libc++-backdeployment.cfg.in
 create mode 100644 libcxx/test/configs/apple-libc++-system.cfg.in
 delete mode 100644 libcxxabi/test/configs/apple-libc++abi-backdeployment.cfg.in
 create mode 100644 libcxxabi/test/configs/apple-libc++abi-system.cfg.in
 delete mode 100644 libunwind/test/configs/apple-libunwind-backdeployment.cfg.in
 create mode 100644 libunwind/test/configs/apple-libunwind-system.cfg.in

diff --git a/.github/workflows/libcxx-build-and-test.yaml b/.github/workflows/libcxx-build-and-test.yaml
index b5e60781e00064..184fed2268e818 100644
--- a/.github/workflows/libcxx-build-and-test.yaml
+++ b/.github/workflows/libcxx-build-and-test.yaml
@@ -193,17 +193,24 @@ jobs:
             **/crash_diagnostics/*
 
   macos:
-    runs-on: macos-14
     needs: [ stage1 ]
     strategy:
-      fail-fast: true
+      fail-fast: false
       matrix:
-        config: [
-          generic-cxx03,
-          generic-cxx23,
-          generic-modules,
-          apple-configuration
-        ]
+        include:
+        - config: generic-cxx03
+          os: macos-latest
+        - config: generic-cxx23
+          os: macos-latest
+        - config: generic-modules
+          os: macos-latest
+        - config: apple-configuration
+          os: macos-latest
+        - config: apple-system
+          os: macos-13
+        - config: apple-system-hardened
+          os: macos-13
+    runs-on: ${{ matrix.os }}
     steps:
       - uses: actions/checkout at v4
       - uses: maxim-lobanov/setup-xcode at v1
diff --git a/libcxx/test/configs/apple-libc++-backdeployment.cfg.in b/libcxx/test/configs/apple-libc++-backdeployment.cfg.in
deleted file mode 100644
index 9843c4a9ad70da..00000000000000
--- a/libcxx/test/configs/apple-libc++-backdeployment.cfg.in
+++ /dev/null
@@ -1,65 +0,0 @@
-# Testing configuration for back-deployment against older Apple system libc++.
-#
-# Under this configuration, we compile and link all the test suite against the latest libc++,
-# however we run against the libc++ on a different platform. This emulates the workflow of
-# a developer building their application using recent tools but with the goal of deploying
-# on existing devices running an older OS (and hence an older dylib).
-
-import os, site
-site.addsitedir(os.path.join('@LIBCXX_SOURCE_DIR@', 'utils'))
-import libcxx.test.params, libcxx.test.config, libcxx.test.dsl
-
-lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg')
-
-BACKDEPLOYMENT_PARAMETERS = [
-    libcxx.test.dsl.Parameter(name='cxx_runtime_root', type=str,
-        actions=lambda root: [libcxx.test.dsl.AddSubstitution('%{cxx-runtime-root}', root)],
-        help="""
-        The simulated root of the system (for libc++) when running tests.
-
-        This should be a directory hierarchy under which the libc++ dylib can be found.
-        The dylib in that hierarchy is the one that will be used at runtime when running
-        the tests.
-        """),
-    libcxx.test.dsl.Parameter(name='abi_runtime_root', type=str,
-        actions=lambda root: [libcxx.test.dsl.AddSubstitution('%{abi-runtime-root}', root)],
-        help="""
-        The simulated root of the system (for libc++abi) when running tests.
-
-        This should be a directory hierarchy under which the libc++abi dylib can be found.
-        The dylib in that hierarchy is the one that will be used at runtime when running
-        the tests.
-        """),
-    libcxx.test.dsl.Parameter(name='unwind_runtime_root', type=str,
-        actions=lambda root: [libcxx.test.dsl.AddSubstitution('%{unwind-runtime-root}', root)],
-        help="""
-        The simulated root of the system (for libunwind) when running tests.
-
-        This should be a directory hierarchy under which the libunwind dylib can be found.
-        The dylib in that hierarchy is the one that will be used at runtime when running
-        the tests.
-        """),
-]
-
-config.substitutions.append(('%{flags}',
-    '-isysroot {}'.format('@CMAKE_OSX_SYSROOT@') if '@CMAKE_OSX_SYSROOT@' else ''
-))
-config.substitutions.append(('%{compile_flags}',
-    '-nostdinc++ -I %{include-dir} -I %{libcxx-dir}/test/support'
-))
-config.substitutions.append(('%{link_flags}',
-    '-nostdlib++ -L %{lib-dir} -lc++'
-))
-config.substitutions.append(('%{exec}',
-    '%{executor} --execdir %T --env DYLD_LIBRARY_PATH="%{cxx-runtime-root}:%{abi-runtime-root}:%{unwind-runtime-root}" -- '
-))
-
-config.stdlib = 'apple-libc++'
-config.using_system_stdlib = True
-
-libcxx.test.config.configure(
-    libcxx.test.params.DEFAULT_PARAMETERS + BACKDEPLOYMENT_PARAMETERS,
-    libcxx.test.features.DEFAULT_FEATURES,
-    config,
-    lit_config
-)
diff --git a/libcxx/test/configs/apple-libc++-system.cfg.in b/libcxx/test/configs/apple-libc++-system.cfg.in
new file mode 100644
index 00000000000000..b59506f375c4a6
--- /dev/null
+++ b/libcxx/test/configs/apple-libc++-system.cfg.in
@@ -0,0 +1,33 @@
+# Testing configuration for back-deployment against the system-provided libc++.
+#
+# Under this configuration, we compile and link all the test suite against the just-built
+# libc++, but we run against the system libc++.
+
+import os, site
+site.addsitedir(os.path.join('@LIBCXX_SOURCE_DIR@', 'utils'))
+import libcxx.test.params, libcxx.test.config, libcxx.test.dsl
+
+lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg')
+
+config.substitutions.append(('%{flags}',
+    '-isysroot {}'.format('@CMAKE_OSX_SYSROOT@') if '@CMAKE_OSX_SYSROOT@' else ''
+))
+config.substitutions.append(('%{compile_flags}',
+    '-nostdinc++ -I %{include-dir} -I %{libcxx-dir}/test/support'
+))
+config.substitutions.append(('%{link_flags}',
+    '-nostdlib++ -L %{lib-dir} -lc++'
+))
+config.substitutions.append(('%{exec}',
+    '%{executor} --execdir %T -- '
+))
+
+config.stdlib = 'apple-libc++'
+config.using_system_stdlib = True
+
+libcxx.test.config.configure(
+    libcxx.test.params.DEFAULT_PARAMETERS,
+    libcxx.test.features.DEFAULT_FEATURES,
+    config,
+    lit_config
+)
diff --git a/libcxx/test/std/input.output/file.streams/fstreams/filebuf.members/open_pointer.pass.cpp b/libcxx/test/std/input.output/file.streams/fstreams/filebuf.members/open_pointer.pass.cpp
index f070762b3b94d5..9f617dc1e5a896 100644
--- a/libcxx/test/std/input.output/file.streams/fstreams/filebuf.members/open_pointer.pass.cpp
+++ b/libcxx/test/std/input.output/file.streams/fstreams/filebuf.members/open_pointer.pass.cpp
@@ -10,6 +10,9 @@
 
 // basic_filebuf<charT,traits>* open(const char* s, ios_base::openmode mode);
 
+// In C++23 and later, this test requires support for P2467R1 in the dylib (a3f17ba3febbd546f2342ffc780ac93b694fdc8d)
+// XFAIL: (!c++03 && !c++11 && !c++14 && !c++17 && !c++20) && using-built-library-before-llvm-18
+
 // XFAIL: LIBCXX-AIX-FIXME
 
 #include <fstream>
diff --git a/libcxx/test/std/input.output/file.streams/fstreams/filebuf.virtuals/setbuf.pass.cpp b/libcxx/test/std/input.output/file.streams/fstreams/filebuf.virtuals/setbuf.pass.cpp
index 8bcce281620332..10435dc4823675 100644
--- a/libcxx/test/std/input.output/file.streams/fstreams/filebuf.virtuals/setbuf.pass.cpp
+++ b/libcxx/test/std/input.output/file.streams/fstreams/filebuf.virtuals/setbuf.pass.cpp
@@ -10,6 +10,9 @@
 
 // basic_streambuf<charT, traits>* setbuf(char_type* s, streamsize n) override;
 
+// In C++23 and later, this test requires support for P2467R1 in the dylib (a3f17ba3febbd546f2342ffc780ac93b694fdc8d)
+// XFAIL: (!c++03 && !c++11 && !c++14 && !c++17 && !c++20) && using-built-library-before-llvm-18
+
 #include <fstream>
 #include <cstddef>
 #include <cassert>
diff --git a/libcxx/test/std/input.output/file.streams/fstreams/fstream.cons/pointer.pass.cpp b/libcxx/test/std/input.output/file.streams/fstreams/fstream.cons/pointer.pass.cpp
index df7d3b948e3277..2e0ebcd684d798 100644
--- a/libcxx/test/std/input.output/file.streams/fstreams/fstream.cons/pointer.pass.cpp
+++ b/libcxx/test/std/input.output/file.streams/fstreams/fstream.cons/pointer.pass.cpp
@@ -13,6 +13,9 @@
 
 // explicit basic_fstream(const char* s, ios_base::openmode mode = ios_base::in | ios_base::out);
 
+// In C++23 and later, this test requires support for P2467R1 in the dylib (a3f17ba3febbd546f2342ffc780ac93b694fdc8d)
+// XFAIL: (!c++03 && !c++11 && !c++14 && !c++17 && !c++20) && using-built-library-before-llvm-18
+
 // XFAIL: LIBCXX-AIX-FIXME
 
 #include <fstream>
diff --git a/libcxx/test/std/input.output/file.streams/fstreams/fstream.members/open_pointer.pass.cpp b/libcxx/test/std/input.output/file.streams/fstreams/fstream.members/open_pointer.pass.cpp
index 790b9ef02f9025..0d83d681b1dfc4 100644
--- a/libcxx/test/std/input.output/file.streams/fstreams/fstream.members/open_pointer.pass.cpp
+++ b/libcxx/test/std/input.output/file.streams/fstreams/fstream.members/open_pointer.pass.cpp
@@ -13,6 +13,9 @@
 
 // void open(const char* s, ios_base::openmode mode = ios_base::in|ios_base::out);
 
+// In C++23 and later, this test requires support for P2467R1 in the dylib (a3f17ba3febbd546f2342ffc780ac93b694fdc8d)
+// XFAIL: (!c++03 && !c++11 && !c++14 && !c++17 && !c++20) && using-built-library-before-llvm-18
+
 // XFAIL: LIBCXX-AIX-FIXME
 
 #include <fstream>
diff --git a/libcxx/test/std/input.output/file.streams/fstreams/ofstream.cons/pointer.pass.cpp b/libcxx/test/std/input.output/file.streams/fstreams/ofstream.cons/pointer.pass.cpp
index af43ffdbf8006e..fbb03f1e858411 100644
--- a/libcxx/test/std/input.output/file.streams/fstreams/ofstream.cons/pointer.pass.cpp
+++ b/libcxx/test/std/input.output/file.streams/fstreams/ofstream.cons/pointer.pass.cpp
@@ -13,6 +13,9 @@
 
 // explicit basic_ofstream(const char* s, ios_base::openmode mode = ios_base::out);
 
+// In C++23 and later, this test requires support for P2467R1 in the dylib (a3f17ba3febbd546f2342ffc780ac93b694fdc8d)
+// XFAIL: (!c++03 && !c++11 && !c++14 && !c++17 && !c++20) && using-built-library-before-llvm-18
+
 // XFAIL: LIBCXX-AIX-FIXME
 
 #include <fstream>
diff --git a/libcxx/test/std/input.output/file.streams/fstreams/ofstream.members/open_pointer.pass.cpp b/libcxx/test/std/input.output/file.streams/fstreams/ofstream.members/open_pointer.pass.cpp
index b0a68fd4340b75..73a474277a9331 100644
--- a/libcxx/test/std/input.output/file.streams/fstreams/ofstream.members/open_pointer.pass.cpp
+++ b/libcxx/test/std/input.output/file.streams/fstreams/ofstream.members/open_pointer.pass.cpp
@@ -13,6 +13,9 @@
 
 // void open(const char* s, ios_base::openmode mode = ios_base::out);
 
+// In C++23 and later, this test requires support for P2467R1 in the dylib (a3f17ba3febbd546f2342ffc780ac93b694fdc8d)
+// XFAIL: (!c++03 && !c++11 && !c++14 && !c++17 && !c++20) && using-built-library-before-llvm-18
+
 // XFAIL: LIBCXX-AIX-FIXME
 
 #include <fstream>
diff --git a/libcxx/test/std/input.output/string.streams/stringstream/stringstream.members/gcount.pass.cpp b/libcxx/test/std/input.output/string.streams/stringstream/stringstream.members/gcount.pass.cpp
index a9079dc63b6b56..84004dc12f11ac 100644
--- a/libcxx/test/std/input.output/string.streams/stringstream/stringstream.members/gcount.pass.cpp
+++ b/libcxx/test/std/input.output/string.streams/stringstream/stringstream.members/gcount.pass.cpp
@@ -9,6 +9,9 @@
 // UNSUPPORTED: 32-bit-pointer
 // REQUIRES: large_tests
 
+// This bug was fixed in the dylib by 53aed4759b33e33614e0f4e321bc1ef764b6d5b6.
+// XFAIL: using-built-library-before-llvm-17
+
 // Android devices frequently don't have enough memory to run this test. Rather
 // than throw std::bad_alloc, exhausting memory triggers the OOM Killer.
 // UNSUPPORTED: LIBCXX-ANDROID-FIXME
diff --git a/libcxx/utils/ci/buildkite-pipeline.yml b/libcxx/utils/ci/buildkite-pipeline.yml
index 906df734bc42b5..d1465721cf1648 100644
--- a/libcxx/utils/ci/buildkite-pipeline.yml
+++ b/libcxx/utils/ci/buildkite-pipeline.yml
@@ -37,48 +37,6 @@ definitions:
       - "**/crash_diagnostics/*"
 
 steps:
-- group: ':mac: Apple'
-  steps:
-  - label: Apple back-deployment macosx10.13
-    command: libcxx/utils/ci/run-buildbot apple-system-backdeployment-10.13
-    agents:
-      queue: libcxx-builders
-      os: macos
-      arch: x86_64 # We need to use x86_64 for back-deployment CI on this target since macOS didn't support arm64 back then
-    <<: *common
-
-  - label: Apple back-deployment macosx10.15
-    command: libcxx/utils/ci/run-buildbot apple-system-backdeployment-10.15
-    agents:
-      queue: libcxx-builders
-      os: macos
-      arch: x86_64 # We need to use x86_64 for back-deployment CI on this target since macOS didn't support arm64 back then
-    <<: *common
-
-  - label: Apple back-deployment with hardening enabled
-    command: libcxx/utils/ci/run-buildbot apple-system-backdeployment-hardened-11.0
-    agents:
-      queue: libcxx-builders
-      os: macos
-      arch: x86_64 # TODO: Remove this once we are able to run back-deployment on arm64 again, since this isn't x86_64 specific
-    <<: *common
-
-    # TODO: Re-enable this once we've figured out how to run back-deployment testing on arm64 on recent OSes
-    # - label: "Apple back-deployment macosx11.0 arm64"
-    #   command: "libcxx/utils/ci/run-buildbot apple-system-backdeployment-11.0"
-    #   artifact_paths:
-    #     - "**/test-results.xml"
-    #     - "**/*.abilist"
-    #   agents:
-    #     queue: "libcxx-builders"
-    #     os: "macos"
-    #     arch: "arm64"
-    #   retry:
-    #     automatic:
-    #       - exit_status: -1  # Agent was lost
-    #         limit: 2
-    #   timeout_in_minutes: 120
-
 - group: ARM
   steps:
   - label: AArch64
diff --git a/libcxx/utils/ci/run-buildbot b/libcxx/utils/ci/run-buildbot
index b0533cb9a49c93..7b4bdc6325e7bb 100755
--- a/libcxx/utils/ci/run-buildbot
+++ b/libcxx/utils/ci/run-buildbot
@@ -522,78 +522,24 @@ apple-configuration)
     # TODO: It would be better to run the tests against the fake-installed version of libc++ instead
     xcrun --sdk macosx ninja -vC "${BUILD_DIR}/${arch}" check-cxx check-cxxabi check-cxx-abilist
 ;;
-apple-system-backdeployment-hardened-*)
+apple-system-hardened)
     clean
-
-    if [[ "${OSX_ROOTS}" == "" ]]; then
-        echo "--- Downloading previous macOS dylibs"
-        PREVIOUS_DYLIBS_URL="https://dl.dropboxusercontent.com/s/gmcfxwgl9f9n6pu/libcxx-roots.tar.gz"
-        OSX_ROOTS="${BUILD_DIR}/macos-roots"
-        mkdir -p "${OSX_ROOTS}"
-        curl "${PREVIOUS_DYLIBS_URL}" | tar -xz --strip-components=1 -C "${OSX_ROOTS}"
-    fi
-
-    DEPLOYMENT_TARGET="${BUILDER#apple-system-backdeployment-hardened-}"
-
-    # TODO: On Apple platforms, we never produce libc++abi.1.dylib or libunwind.1.dylib,
-    #       only libc++abi.dylib and libunwind.dylib. Fix that in the build so that the
-    #       tests stop searching for @rpath/libc++abi.1.dylib and @rpath/libunwind.1.dylib.
-    cp "${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}/libc++abi.dylib" \
-       "${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}/libc++abi.1.dylib"
-    cp "${OSX_ROOTS}/macOS/libunwind/${DEPLOYMENT_TARGET}/libunwind.dylib" \
-       "${OSX_ROOTS}/macOS/libunwind/${DEPLOYMENT_TARGET}/libunwind.1.dylib"
-
-    arch="$(uname -m)"
-    PARAMS="target_triple=${arch}-apple-macosx${DEPLOYMENT_TARGET}"
-    PARAMS+=";cxx_runtime_root=${OSX_ROOTS}/macOS/libc++/${DEPLOYMENT_TARGET}"
-    PARAMS+=";abi_runtime_root=${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}"
-    PARAMS+=";unwind_runtime_root=${OSX_ROOTS}/macOS/libunwind/${DEPLOYMENT_TARGET}"
-    PARAMS+=";hardening_mode=fast"
-
     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake" \
-                   -DLIBCXX_TEST_CONFIG="apple-libc++-backdeployment.cfg.in" \
-                   -DLIBCXXABI_TEST_CONFIG="apple-libc++abi-backdeployment.cfg.in" \
-                   -DLIBUNWIND_TEST_CONFIG="apple-libunwind-backdeployment.cfg.in" \
-                   -DLIBCXX_TEST_PARAMS="${PARAMS}" \
-                   -DLIBCXXABI_TEST_PARAMS="${PARAMS}" \
-                   -DLIBUNWIND_TEST_PARAMS="${PARAMS}"
+                   -DLIBCXX_TEST_CONFIG="apple-libc++-system.cfg.in" \
+                   -DLIBCXXABI_TEST_CONFIG="apple-libc++abi-system.cfg.in" \
+                   -DLIBUNWIND_TEST_CONFIG="apple-libunwind-system.cfg.in" \
+                   -DLIBCXX_TEST_PARAMS="hardening_mode=fast" \
+                   -DLIBCXXABI_TEST_PARAMS="hardening_mode=fast" \
+                   -DLIBUNWIND_TEST_PARAMS="hardening_mode=fast"
 
     check-runtimes
 ;;
-apple-system-backdeployment-*)
+apple-system)
     clean
-
-    if [[ "${OSX_ROOTS}" == "" ]]; then
-        echo "--- Downloading previous macOS dylibs"
-        PREVIOUS_DYLIBS_URL="https://dl.dropboxusercontent.com/s/gmcfxwgl9f9n6pu/libcxx-roots.tar.gz"
-        OSX_ROOTS="${BUILD_DIR}/macos-roots"
-        mkdir -p "${OSX_ROOTS}"
-        curl "${PREVIOUS_DYLIBS_URL}" | tar -xz --strip-components=1 -C "${OSX_ROOTS}"
-    fi
-
-    DEPLOYMENT_TARGET="${BUILDER#apple-system-backdeployment-}"
-
-    # TODO: On Apple platforms, we never produce libc++abi.1.dylib or libunwind.1.dylib,
-    #       only libc++abi.dylib and libunwind.dylib. Fix that in the build so that the
-    #       tests stop searching for @rpath/libc++abi.1.dylib and @rpath/libunwind.1.dylib.
-    cp "${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}/libc++abi.dylib" \
-       "${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}/libc++abi.1.dylib"
-    cp "${OSX_ROOTS}/macOS/libunwind/${DEPLOYMENT_TARGET}/libunwind.dylib" \
-       "${OSX_ROOTS}/macOS/libunwind/${DEPLOYMENT_TARGET}/libunwind.1.dylib"
-
-    arch="$(uname -m)"
-    PARAMS="target_triple=${arch}-apple-macosx${DEPLOYMENT_TARGET}"
-    PARAMS+=";cxx_runtime_root=${OSX_ROOTS}/macOS/libc++/${DEPLOYMENT_TARGET}"
-    PARAMS+=";abi_runtime_root=${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}"
-    PARAMS+=";unwind_runtime_root=${OSX_ROOTS}/macOS/libunwind/${DEPLOYMENT_TARGET}"
-
     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake" \
-                   -DLIBCXX_TEST_CONFIG="apple-libc++-backdeployment.cfg.in" \
-                   -DLIBCXXABI_TEST_CONFIG="apple-libc++abi-backdeployment.cfg.in" \
-                   -DLIBUNWIND_TEST_CONFIG="apple-libunwind-backdeployment.cfg.in" \
-                   -DLIBCXX_TEST_PARAMS="${PARAMS}" \
-                   -DLIBCXXABI_TEST_PARAMS="${PARAMS}" \
-                   -DLIBUNWIND_TEST_PARAMS="${PARAMS}"
+                   -DLIBCXX_TEST_CONFIG="apple-libc++-system.cfg.in" \
+                   -DLIBCXXABI_TEST_CONFIG="apple-libc++abi-system.cfg.in" \
+                   -DLIBUNWIND_TEST_CONFIG="apple-libunwind-system.cfg.in"
 
     check-runtimes
 ;;
diff --git a/libcxx/utils/libcxx/test/features.py b/libcxx/utils/libcxx/test/features.py
index 15456171b54837..847ada91eaa4e7 100644
--- a/libcxx/utils/libcxx/test/features.py
+++ b/libcxx/utils/libcxx/test/features.py
@@ -747,27 +747,27 @@ def check_gdb(cfg):
             cfg.available_features,
         ),
     ),
-    # Tests that require __libcpp_verbose_abort support in the built library
+    # Tests that require std::to_chars(floating-point) in the built library
     Feature(
-        name="availability-verbose_abort-missing",
+        name="availability-fp_to_chars-missing",
         when=lambda cfg: BooleanExpression.evaluate(
-            "!libcpp-has-no-availability-markup && (stdlib=apple-libc++ && !_target-has-llvm-13)",
+            "!libcpp-has-no-availability-markup && (stdlib=apple-libc++ && !_target-has-llvm-14)",
             cfg.available_features,
         ),
     ),
-    # Tests that require std::pmr support in the built library
+    # Tests that require __libcpp_verbose_abort support in the built library
     Feature(
-        name="availability-pmr-missing",
+        name="availability-verbose_abort-missing",
         when=lambda cfg: BooleanExpression.evaluate(
-            "!libcpp-has-no-availability-markup && (stdlib=apple-libc++ && !_target-has-llvm-13)",
+            "!libcpp-has-no-availability-markup && (stdlib=apple-libc++ && !_target-has-llvm-15)",
             cfg.available_features,
         ),
     ),
-    # Tests that require std::to_chars(floating-point) in the built library
+    # Tests that require std::pmr support in the built library
     Feature(
-        name="availability-fp_to_chars-missing",
+        name="availability-pmr-missing",
         when=lambda cfg: BooleanExpression.evaluate(
-            "!libcpp-has-no-availability-markup && (stdlib=apple-libc++ && !_target-has-llvm-14)",
+            "!libcpp-has-no-availability-markup && (stdlib=apple-libc++ && !_target-has-llvm-16)",
             cfg.available_features,
         ),
     ),
diff --git a/libcxxabi/test/configs/apple-libc++abi-backdeployment.cfg.in b/libcxxabi/test/configs/apple-libc++abi-backdeployment.cfg.in
deleted file mode 100644
index 9e725c523f29bf..00000000000000
--- a/libcxxabi/test/configs/apple-libc++abi-backdeployment.cfg.in
+++ /dev/null
@@ -1,66 +0,0 @@
-# Testing configuration for back-deployment against older Apple system libc++abi.
-#
-# Under this configuration, we compile and link all the test suite against the latest libc++abi,
-# however we run against the libc++abi on a different platform. This emulates the workflow of
-# a developer building their application using recent tools but with the goal of deploying
-# on existing devices running an older OS (and hence an older dylib).
-
-import os, site
-site.addsitedir(os.path.join('@LIBCXXABI_LIBCXX_PATH@', 'utils'))
-import libcxx.test.params, libcxx.test.config, libcxx.test.dsl
-
-lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg')
-
-BACKDEPLOYMENT_PARAMETERS = [
-    libcxx.test.dsl.Parameter(name='cxx_runtime_root', type=str,
-        actions=lambda root: [libcxx.test.dsl.AddSubstitution('%{cxx-runtime-root}', root)],
-        help="""
-        The simulated root of the system (for libc++) when running tests.
-
-        This should be a directory hierarchy under which the libc++ dylib can be found.
-        The dylib in that hierarchy is the one that will be used at runtime when running
-        the tests.
-        """),
-    libcxx.test.dsl.Parameter(name='abi_runtime_root', type=str,
-        actions=lambda root: [libcxx.test.dsl.AddSubstitution('%{abi-runtime-root}', root)],
-        help="""
-        The simulated root of the system (for libc++abi) when running tests.
-
-        This should be a directory hierarchy under which the libc++abi dylib can be found.
-        The dylib in that hierarchy is the one that will be used at runtime when running
-        the tests.
-        """),
-    libcxx.test.dsl.Parameter(name='unwind_runtime_root', type=str,
-        actions=lambda root: [libcxx.test.dsl.AddSubstitution('%{unwind-runtime-root}', root)],
-        help="""
-        The simulated root of the system (for libunwind) when running tests.
-
-        This should be a directory hierarchy under which the libunwind dylib can be found.
-        The dylib in that hierarchy is the one that will be used at runtime when running
-        the tests.
-        """),
-]
-
-config.substitutions.append(('%{flags}',
-    '-isysroot {}'.format('@CMAKE_OSX_SYSROOT@') if '@CMAKE_OSX_SYSROOT@' else ''
-))
-config.substitutions.append(('%{compile_flags}',
-    '-nostdinc++ -I %{include} -I %{cxx-include} -I %{cxx-target-include} %{maybe-include-libunwind} -D_LIBCPP_ENABLE_CXX17_REMOVED_UNEXPECTED_FUNCTIONS ' +
-    '-I %{libcxx}/test/support -I %{libcxx}/src'
-))
-config.substitutions.append(('%{link_flags}',
-    '-nostdlib++ -L %{lib} -lc++ -lc++abi'
-))
-config.substitutions.append(('%{exec}',
-    '%{executor} --execdir %T --env DYLD_LIBRARY_PATH="%{cxx-runtime-root}:%{abi-runtime-root}:%{unwind-runtime-root}" -- '
-))
-
-config.stdlib = 'apple-libc++'
-config.using_system_stdlib = True
-
-libcxx.test.config.configure(
-    libcxx.test.params.DEFAULT_PARAMETERS + BACKDEPLOYMENT_PARAMETERS,
-    libcxx.test.features.DEFAULT_FEATURES,
-    config,
-    lit_config
-)
diff --git a/libcxxabi/test/configs/apple-libc++abi-system.cfg.in b/libcxxabi/test/configs/apple-libc++abi-system.cfg.in
new file mode 100644
index 00000000000000..8cff0efc4fdf41
--- /dev/null
+++ b/libcxxabi/test/configs/apple-libc++abi-system.cfg.in
@@ -0,0 +1,34 @@
+# Testing configuration for back-deployment against the system-provided libc++abi.
+#
+# Under this configuration, we compile and link all the test suite against the just-built
+# libc++abi, but we run against the system libc++abi.
+
+import os, site
+site.addsitedir(os.path.join('@LIBCXXABI_LIBCXX_PATH@', 'utils'))
+import libcxx.test.params, libcxx.test.config, libcxx.test.dsl
+
+lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg')
+
+config.substitutions.append(('%{flags}',
+    '-isysroot {}'.format('@CMAKE_OSX_SYSROOT@') if '@CMAKE_OSX_SYSROOT@' else ''
+))
+config.substitutions.append(('%{compile_flags}',
+    '-nostdinc++ -I %{include} -I %{cxx-include} -I %{cxx-target-include} %{maybe-include-libunwind} -D_LIBCPP_ENABLE_CXX17_REMOVED_UNEXPECTED_FUNCTIONS ' +
+    '-I %{libcxx}/test/support -I %{libcxx}/src'
+))
+config.substitutions.append(('%{link_flags}',
+    '-nostdlib++ -L %{lib} -lc++ -lc++abi'
+))
+config.substitutions.append(('%{exec}',
+    '%{executor} --execdir %T -- '
+))
+
+config.stdlib = 'apple-libc++'
+config.using_system_stdlib = True
+
+libcxx.test.config.configure(
+    libcxx.test.params.DEFAULT_PARAMETERS,
+    libcxx.test.features.DEFAULT_FEATURES,
+    config,
+    lit_config
+)
diff --git a/libunwind/test/configs/apple-libunwind-backdeployment.cfg.in b/libunwind/test/configs/apple-libunwind-backdeployment.cfg.in
deleted file mode 100644
index 013c43ae78001b..00000000000000
--- a/libunwind/test/configs/apple-libunwind-backdeployment.cfg.in
+++ /dev/null
@@ -1,67 +0,0 @@
-# Testing configuration for back-deployment against older Apple system libunwind.
-#
-# Under this configuration, we compile and link all the test suite against the latest libunwind,
-# however we run against the libunwind on a different platform. This emulates the workflow of
-# a developer building their application using recent tools but with the goal of deploying
-# on existing devices running an older OS (and hence an older dylib).
-
-import os, site
-site.addsitedir(os.path.join('@LIBUNWIND_LIBCXX_PATH@', 'utils'))
-import libcxx.test.params, libcxx.test.config, libcxx.test.dsl
-
-lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg')
-
-BACKDEPLOYMENT_PARAMETERS = [
-    libcxx.test.dsl.Parameter(name='cxx_runtime_root', type=str,
-        actions=lambda root: [libcxx.test.dsl.AddSubstitution('%{cxx-runtime-root}', root)],
-        help="""
-        The simulated root of the system (for libc++) when running tests.
-
-        This should be a directory hierarchy under which the libc++ dylib can be found.
-        The dylib in that hierarchy is the one that will be used at runtime when running
-        the tests.
-        """),
-    libcxx.test.dsl.Parameter(name='abi_runtime_root', type=str,
-        actions=lambda root: [libcxx.test.dsl.AddSubstitution('%{abi-runtime-root}', root)],
-        help="""
-        The simulated root of the system (for libc++abi) when running tests.
-
-        This should be a directory hierarchy under which the libc++abi dylib can be found.
-        The dylib in that hierarchy is the one that will be used at runtime when running
-        the tests.
-        """),
-    libcxx.test.dsl.Parameter(name='unwind_runtime_root', type=str,
-        actions=lambda root: [libcxx.test.dsl.AddSubstitution('%{unwind-runtime-root}', root)],
-        help="""
-        The simulated root of the system (for libunwind) when running tests.
-
-        This should be a directory hierarchy under which the libunwind dylib can be found.
-        The dylib in that hierarchy is the one that will be used at runtime when running
-        the tests.
-        """),
-]
-
-config.substitutions.append(('%{flags}',
-    '-isysroot {}'.format('@CMAKE_OSX_SYSROOT@') if '@CMAKE_OSX_SYSROOT@' else ''
-))
-config.substitutions.append(('%{compile_flags}',
-    '-nostdinc++ -I %{include}'
-))
-config.substitutions.append(('%{link_flags}',
-    '-nostdlib++ -L %{lib} -lc++ -lc++abi -lunwind'
-))
-config.substitutions.append(('%{exec}',
-    '%{executor} --execdir %T --env DYLD_LIBRARY_PATH="%{cxx-runtime-root}:%{abi-runtime-root}:%{unwind-runtime-root}" -- '
-))
-
-config.stdlib = 'apple-libc++'
-config.using_system_stdlib = True
-
-import os, site
-import libcxx.test.params, libcxx.test.config
-libcxx.test.config.configure(
-    libcxx.test.params.DEFAULT_PARAMETERS + BACKDEPLOYMENT_PARAMETERS,
-    libcxx.test.features.DEFAULT_FEATURES,
-    config,
-    lit_config
-)
diff --git a/libunwind/test/configs/apple-libunwind-system.cfg.in b/libunwind/test/configs/apple-libunwind-system.cfg.in
new file mode 100644
index 00000000000000..eb84c3c7b7b7e9
--- /dev/null
+++ b/libunwind/test/configs/apple-libunwind-system.cfg.in
@@ -0,0 +1,35 @@
+# Testing configuration for back-deployment against the system-provided libunwind.
+#
+# Under this configuration, we compile and link all the test suite against the just-built
+# libunwind, but we run against the system libunwind.
+
+import os, site
+site.addsitedir(os.path.join('@LIBUNWIND_LIBCXX_PATH@', 'utils'))
+import libcxx.test.params, libcxx.test.config, libcxx.test.dsl
+
+lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg')
+
+config.substitutions.append(('%{flags}',
+    '-isysroot {}'.format('@CMAKE_OSX_SYSROOT@') if '@CMAKE_OSX_SYSROOT@' else ''
+))
+config.substitutions.append(('%{compile_flags}',
+    '-nostdinc++ -I %{include}'
+))
+config.substitutions.append(('%{link_flags}',
+    '-nostdlib++ -L %{lib} -lc++ -lc++abi -lunwind'
+))
+config.substitutions.append(('%{exec}',
+    '%{executor} --execdir %T -- '
+))
+
+config.stdlib = 'apple-libc++'
+config.using_system_stdlib = True
+
+import os, site
+import libcxx.test.params, libcxx.test.config
+libcxx.test.config.configure(
+    libcxx.test.params.DEFAULT_PARAMETERS,
+    libcxx.test.features.DEFAULT_FEATURES,
+    config,
+    lit_config
+)

>From 28208f0acf2918a0d14b4f0a78a0813b6b2380bd Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Wed, 25 Sep 2024 14:47:34 -0400
Subject: [PATCH 2/3] Specify the right target triple

---
 libcxx/utils/ci/run-buildbot | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/libcxx/utils/ci/run-buildbot b/libcxx/utils/ci/run-buildbot
index 7b4bdc6325e7bb..e9401bd0a63e83 100755
--- a/libcxx/utils/ci/run-buildbot
+++ b/libcxx/utils/ci/run-buildbot
@@ -524,22 +524,34 @@ apple-configuration)
 ;;
 apple-system-hardened)
     clean
+
+    arch="$(uname -m)"
+    version="$(sw_vers --productVersion)"
+    params="target_triple=${arch}-apple-macosx${version}"
+    params+=";hardening_mode=fast"
     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake" \
                    -DLIBCXX_TEST_CONFIG="apple-libc++-system.cfg.in" \
                    -DLIBCXXABI_TEST_CONFIG="apple-libc++abi-system.cfg.in" \
                    -DLIBUNWIND_TEST_CONFIG="apple-libunwind-system.cfg.in" \
-                   -DLIBCXX_TEST_PARAMS="hardening_mode=fast" \
-                   -DLIBCXXABI_TEST_PARAMS="hardening_mode=fast" \
-                   -DLIBUNWIND_TEST_PARAMS="hardening_mode=fast"
+                   -DLIBCXX_TEST_PARAMS="${params}" \
+                   -DLIBCXXABI_TEST_PARAMS="${params}" \
+                   -DLIBUNWIND_TEST_PARAMS="${params}"
 
     check-runtimes
 ;;
 apple-system)
     clean
+
+    arch="$(uname -m)"
+    version="$(sw_vers --productVersion)"
+    params="target_triple=${arch}-apple-macosx${version}"
     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake" \
                    -DLIBCXX_TEST_CONFIG="apple-libc++-system.cfg.in" \
                    -DLIBCXXABI_TEST_CONFIG="apple-libc++abi-system.cfg.in" \
-                   -DLIBUNWIND_TEST_CONFIG="apple-libunwind-system.cfg.in"
+                   -DLIBUNWIND_TEST_CONFIG="apple-libunwind-system.cfg.in" \
+                   -DLIBCXX_TEST_PARAMS="${params}" \
++                  -DLIBCXXABI_TEST_PARAMS="${params}" \
++                  -DLIBUNWIND_TEST_PARAMS="${params}"
 
     check-runtimes
 ;;

>From 3fc51d9ec518d9b66e18568a042a219c28cd976e Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Thu, 26 Sep 2024 09:50:57 -0400
Subject: [PATCH 3/3] Accept minor versions in target triple

---
 libcxx/utils/libcxx/test/features.py | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/libcxx/utils/libcxx/test/features.py b/libcxx/utils/libcxx/test/features.py
index 847ada91eaa4e7..136ff7ce8a9be7 100644
--- a/libcxx/utils/libcxx/test/features.py
+++ b/libcxx/utils/libcxx/test/features.py
@@ -612,21 +612,21 @@ def check_gdb(cfg):
     Feature(
         name="_target-has-llvm-17",
         when=lambda cfg: BooleanExpression.evaluate(
-            "target={{.+}}-apple-macosx{{14.[4-9](.0)?}} || target={{.+}}-apple-macosx{{1[5-9]([.].+)?}}",
+            "target={{.+}}-apple-macosx{{14.[4-9](.[0-9]+)?}} || target={{.+}}-apple-macosx{{1[5-9]([.].+)?}}",
             cfg.available_features,
         ),
     ),
     Feature(
         name="_target-has-llvm-16",
         when=lambda cfg: BooleanExpression.evaluate(
-            "_target-has-llvm-17 || target={{.+}}-apple-macosx{{14.[0-3](.0)?}}",
+            "_target-has-llvm-17 || target={{.+}}-apple-macosx{{14.[0-3](.[0-9]+)?}}",
             cfg.available_features,
         ),
     ),
     Feature(
         name="_target-has-llvm-15",
         when=lambda cfg: BooleanExpression.evaluate(
-            "_target-has-llvm-16 || target={{.+}}-apple-macosx{{13.[4-9](.0)?}}",
+            "_target-has-llvm-16 || target={{.+}}-apple-macosx{{13.[4-9](.[0-9]+)?}}",
             cfg.available_features,
         ),
     ),
@@ -640,21 +640,21 @@ def check_gdb(cfg):
     Feature(
         name="_target-has-llvm-13",
         when=lambda cfg: BooleanExpression.evaluate(
-            "_target-has-llvm-14 || target={{.+}}-apple-macosx{{13.[0-3](.0)?}}",
+            "_target-has-llvm-14 || target={{.+}}-apple-macosx{{13.[0-3](.[0-9]+)?}}",
             cfg.available_features,
         ),
     ),
     Feature(
         name="_target-has-llvm-12",
         when=lambda cfg: BooleanExpression.evaluate(
-            "_target-has-llvm-13 || target={{.+}}-apple-macosx{{12.[3-9](.0)?}}",
+            "_target-has-llvm-13 || target={{.+}}-apple-macosx{{12.[3-9](.[0-9]+)?}}",
             cfg.available_features,
         ),
     ),
     Feature(
         name="_target-has-llvm-11",
         when=lambda cfg: BooleanExpression.evaluate(
-            "_target-has-llvm-12 || target={{.+}}-apple-macosx{{(11.[0-9]|12.[0-2])(.0)?}}",
+            "_target-has-llvm-12 || target={{.+}}-apple-macosx{{(11.[0-9]|12.[0-2])(.[0-9]+)?}}",
             cfg.available_features,
         ),
     ),
@@ -668,7 +668,7 @@ def check_gdb(cfg):
     Feature(
         name="_target-has-llvm-9",
         when=lambda cfg: BooleanExpression.evaluate(
-            "_target-has-llvm-10 || target={{.+}}-apple-macosx{{10.15(.0)?}}",
+            "_target-has-llvm-10 || target={{.+}}-apple-macosx{{10.15(.[0-9]+)?}}",
             cfg.available_features,
         ),
     ),



More information about the llvm-commits mailing list