From 97a05e18fbac86d69ce6ea22c5eea6fc7c01e2dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Thu, 5 Sep 2024 17:25:41 +0300 Subject: [PATCH] [libc++][ci] Add a test configuration with an incomplete sysroot (#107089) When bringing up a new cross compiler from scratch, we build libunwind/libcxx in a setup where the toolchain is incomplete and unable to perform the normal linker checks; this requires a few special cases in the CMake files. We simulate that scenario by removing the libc++ headers, libunwind and libc++ libraries from the installed toolchain. We need to set CMAKE_CXX_COMPILER_WORKS since CMake fails to probe the compiler. We need to set CMAKE_CXX_COMPILER_TARGET, since LLVM's heuristics fail when CMake hasn't been able to probe the environment properly. (This is normal; one has to set those options when setting up such a toolchain from scratch.) This adds CI coverage for these build scenarios, which otherwise seldom are tested by some build flow (but are essential when setting up a cross compiler from scratch). --- .github/workflows/libcxx-build-and-test.yaml | 7 ++++++ libcxx/utils/ci/run-buildbot | 23 ++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/.github/workflows/libcxx-build-and-test.yaml b/.github/workflows/libcxx-build-and-test.yaml index 1a26a699db8e01..b5e60781e00064 100644 --- a/.github/workflows/libcxx-build-and-test.yaml +++ b/.github/workflows/libcxx-build-and-test.yaml @@ -242,6 +242,7 @@ jobs: - { config: mingw-dll, mingw: true } - { config: mingw-static, mingw: true } - { config: mingw-dll-i686, mingw: true } + - { config: mingw-incomplete-sysroot, mingw: true } steps: - uses: actions/checkout@v4 - name: Install dependencies @@ -260,6 +261,12 @@ jobs: del llvm-mingw*.zip mv llvm-mingw* c:\llvm-mingw echo "c:\llvm-mingw\bin" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append + - name: Simulate a from-scratch build of llvm-mingw + if: ${{ matrix.config == 'mingw-incomplete-sysroot' }} + run: | + rm -r c:\llvm-mingw\include\c++ + rm -r c:\llvm-mingw\*-w64-mingw32\lib\libc++* + rm -r c:\llvm-mingw\*-w64-mingw32\lib\libunwind* - name: Add Git Bash to the path run: | echo "c:\Program Files\Git\usr\bin" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append diff --git a/libcxx/utils/ci/run-buildbot b/libcxx/utils/ci/run-buildbot index 14ff6113029818..b0533cb9a49c93 100755 --- a/libcxx/utils/ci/run-buildbot +++ b/libcxx/utils/ci/run-buildbot @@ -715,6 +715,29 @@ mingw-dll-i686) -C "${MONOREPO_ROOT}/libcxx/cmake/caches/MinGW.cmake" check-runtimes ;; +mingw-incomplete-sysroot) + # When bringing up a new cross compiler from scratch, we build + # libunwind/libcxx in a setup where the toolchain is incomplete and + # unable to perform the normal linker checks; this requires a few + # special cases in the CMake files. + # + # Building in an incomplete setup requires setting CMAKE_*_COMPILER_WORKS, + # as CMake fails to probe the compiler. This case also requires + # setting CMAKE_CXX_COMPILER_TARGET, as LLVM's heuristics for setting + # the triple fails when CMake hasn't been able to probe the environment. + # (This is what one has to do when building the initial libunwind/libcxx + # for a new toolchain.) + clean + generate-cmake \ + -DCMAKE_C_COMPILER_WORKS=TRUE \ + -DCMAKE_CXX_COMPILER_WORKS=TRUE \ + -DCMAKE_C_COMPILER_TARGET=x86_64-w64-windows-gnu \ + -DCMAKE_CXX_COMPILER_TARGET=x86_64-w64-windows-gnu \ + -C "${MONOREPO_ROOT}/libcxx/cmake/caches/MinGW.cmake" + # Only test that building succeeds; there's not much extra value in running + # the tests here, as it would be equivalent to the mingw-dll config above. + ${NINJA} -vC "${BUILD_DIR}" +;; aix) clean generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/AIX.cmake" \