From 260f48a95421e0a95cbcdf342525b28d51e16c8d Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Thu, 16 Oct 2025 19:18:32 -0700 Subject: [PATCH 1/6] Do not use install-distribution-stripped as target --- .github/workflows/swift-toolchain.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/swift-toolchain.yml b/.github/workflows/swift-toolchain.yml index 95450ff14..21f6d3ea7 100644 --- a/.github/workflows/swift-toolchain.yml +++ b/.github/workflows/swift-toolchain.yml @@ -1169,7 +1169,7 @@ jobs: run: cmake --build ${{ github.workspace }}/BinaryCache/1 --target distribution - name: Install Compiler Distribution - run: cmake --build ${{ github.workspace }}/BinaryCache/1 --target install-distribution-stripped + run: cmake --build ${{ github.workspace }}/BinaryCache/1 --target install-distribution - name: Copy cmark-gfm shared libraries run: | From b44fbb2f958358a6eec28e8d5c3d1abe5ffa4e2a Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Fri, 17 Oct 2025 12:24:10 -0700 Subject: [PATCH 2/6] Add new job to build compiler-rt --- .github/workflows/swift-toolchain.yml | 191 +++++++++++++++++++++++++- 1 file changed, 189 insertions(+), 2 deletions(-) diff --git a/.github/workflows/swift-toolchain.yml b/.github/workflows/swift-toolchain.yml index 21f6d3ea7..eff960b58 100644 --- a/.github/workflows/swift-toolchain.yml +++ b/.github/workflows/swift-toolchain.yml @@ -1169,7 +1169,7 @@ jobs: run: cmake --build ${{ github.workspace }}/BinaryCache/1 --target distribution - name: Install Compiler Distribution - run: cmake --build ${{ github.workspace }}/BinaryCache/1 --target install-distribution + run: cmake --build ${{ github.workspace }}/BinaryCache/1 --target install-distribution-stripped - name: Copy cmark-gfm shared libraries run: | @@ -1191,7 +1191,7 @@ jobs: now = datetime.now() info_plist = r'${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/${{ inputs.swift_version }}+${{ matrix.variant }}/ToolchainInfo.plist' with open(os.path.normpath(info_plist), 'wb') as plist: - plistlib.dump({ 'Identifier': 'org.compnerd.dt.toolchain.{0}.{1}-asserts'.format(now.strftime('%Y%m%d'), now.timetuple().tm_hour % 6) }, plist) + plistlib.dump({ 'Identifier': 'org.compnerd.dt.toolchain.{0}.{1}-${{ matrix.variant }}'.format(now.strftime('%Y%m%d'), now.timetuple().tm_hour % 6) }, plist) - name: Upload Compilers uses: thebrowsercompany/gha-upload-tar-artifact@e18c33b1cd416d0d96a91dc6dce06219f98e4e27 # main @@ -1260,6 +1260,193 @@ jobs: symbolsFolder: ${{ github.workspace }}/BinaryCache/1 searchPattern: '**/*.exe' + compiler-rt: + needs: [compilers] + runs-on: ${{ inputs.default_build_runner }} + + strategy: + fail-fast: false + matrix: ${{ fromJSON(inputs.target_matrix) }} + + name: ${{ matrix.os }} ${{ matrix.arch }} Compiler Runtime + + steps: + - uses: actions/checkout@v4.2.2 + with: + path: ${{ github.workspace }}/SourceCache/ci-build + show-progress: false + - uses: ./SourceCache/ci-build/.github/actions/setup-build + if: matrix.os != 'Android' || inputs.build_android + with: + setup-vs-dev-env: ${{ matrix.os == 'Windows' }} + host-arch: ${{ matrix.arch }} + swift-version: ${{ env.PINNED_BOOTSTRAP_TOOLCHAIN_VERSION }} + - uses: seanmiddleditch/gha-setup-ninja@96bed6edff20d1dd61ecff9b75cc519d516e6401 # master + if: inputs.build_os == 'Darwin' + - name: Compute workspace hash + if: matrix.os != 'Android' || inputs.build_android + id: workspace_hash + run: | + $stringAsStream = [System.IO.MemoryStream]::new() + $writer = [System.IO.StreamWriter]::new($stringAsStream) + $writer.write("${{ github.workspace }}") + $writer.Flush() + $stringAsStream.Position = 0 + $hash = (Get-FileHash -Algorithm SHA256 -InputStream $stringAsStream).Hash + echo "hash=$hash" >> $env:GITHUB_OUTPUT + - name: Setup sccache + if: matrix.os != 'Android' || inputs.build_android + uses: ./SourceCache/ci-build/.github/actions/setup-sccache + with: + s3-bucket: ${{ vars.SCCACHE_S3_BUCKET }} + aws-region: ${{ vars.SCCACHE_AWS_REGION }} + aws-arn: ${{ vars.SCCACHE_AWS_ARN }} + disk-max-size: 500M + disk-cache-key: ${{ steps.workspace_hash.outputs.hash }}-${{ matrix.os }}-${{ matrix.arch }}-compiler-rt + + - name: Download Compilers + if: matrix.os != 'Android' || inputs.build_android + uses: thebrowsercompany/gha-download-tar-artifact@59992d91335d4ecba543c8535f7d07238e42125d # main + with: + name: ${{ inputs.build_os }}-${{ inputs.build_arch }}-Asserts-compilers + path: ${{ github.workspace }}/BinaryCache/Library + - uses: actions/checkout@v4.2.2 + if: matrix.os != 'Android' || inputs.build_android + with: + repository: swiftlang/llvm-project + ref: ${{ inputs.llvm_project_revision }} + path: ${{ github.workspace }}/SourceCache/llvm-project + show-progress: false + + - uses: nttld/setup-ndk@v1 + if: matrix.os == 'Android' && inputs.build_android + id: setup-ndk + with: + ndk-version: ${{ inputs.ANDROID_NDK_VERSION }} + local-cache: true + + - uses: actions/setup-python@v5 + with: + python-version: ${{ inputs.python_version }} + architecture: x64 # FIXME(#1004): Remove workaround installing x64 Python on ARM64 CI hosts + + - name: Configure LLVM + if: matrix.os != 'Android' || inputs.build_android + uses: ./SourceCache/ci-build/.github/actions/configure-cmake-project + with: + project-name: llvm + swift-version: ${{ inputs.swift_version }} + enable-caching: true + debug-info: ${{ inputs.debug_info }} + build-os: ${{ inputs.build_os }} + build-arch: ${{ inputs.build_arch }} + os: ${{ matrix.os }} + arch: ${{ matrix.arch }} + src-dir: ${{ github.workspace }}/SourceCache/llvm-project/llvm + bin-dir: ${{ github.workspace }}/BinaryCache/llvm + android-api-level: ${{ inputs.ANDROID_API_LEVEL }} + android-clang-version: ${{ inputs.ANDROID_CLANG_VERSION }} + ndk-path: ${{ steps.setup-ndk.outputs.ndk-path }} + msvc-compilers: ${{ inputs.use_host_toolchain && '@("ASM_MASM", "C", "CXX")' || '@()' }} + pinned-compilers: ${{ inputs.use_host_toolchain && '@()' || '@("ASM_MASM", "C", "CXX")' }} + cmake-defines: | + @{ + 'LLVM_ENABLE_ASSERTIONS' = "YES"; + 'LLVM_HOST_TRIPLE' = "${{ matrix.triple }}"; + 'CMAKE_C_FLAGS' = "${{ inputs.use_host_toolchain && '' || '-fuse-ld=lld' }}"; + 'CMAKE_CXX_FLAGS' = "${{ inputs.use_host_toolchain && '' || '-fuse-ld=lld' }}"; + } + + - name: Configure ClangBuiltins + uses: ./SourceCache/ci-build/.github/actions/configure-cmake-project + with: + project-name: ClangBuiltins + swift-version: ${{ inputs.swift_version }} + enable-caching: true + debug-info: ${{ inputs.debug_info }} + build-os: ${{ inputs.build_os }} + build-arch: ${{ inputs.build_arch }} + os: ${{ matrix.os }} + arch: ${{ matrix.arch }} + src-dir: ${{ github.workspace }}/SourceCache/llvm-project/compiler-rt/lib/builtins + bin-dir: ${{ github.workspace }}/BinaryCache/ClangBuiltins + android-api-level: ${{ inputs.ANDROID_API_LEVEL }} + android-clang-version: ${{ inputs.ANDROID_CLANG_VERSION }} + ndk-path: ${{ steps.setup-ndk.outputs.ndk-path }} + install-dir: ${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/${{ inputs.swift_version }}+Asserts/usr/lib/clang/21 + built-compilers: '@("ASM", "C", "CXX")' + cmake-defines: | + @{ + 'LLVM_DIR' = "${{ github.workspace }}/BinaryCache/llvm/lib/cmake/llvm"; + 'LLVM_ENABLE_PER_TARGET_RUNTIME_DIR' = "YES"; + 'COMPILER_RT_DEFAULT_TARGET_ONLY' = "YES"; + } + - name: Build ClangBuiltins + run: cmake --build ${{ github.workspace }}/BinaryCache/ClangBuiltins + - name: Install ClangBuiltins + run: cmake --build ${{ github.workspace }}/BinaryCache/ClangBuiltins --target install-compiler-rt + + - name: Configure ClangRuntime + uses: ./SourceCache/ci-build/.github/actions/configure-cmake-project + with: + project-name: ClangRuntime + swift-version: ${{ inputs.swift_version }} + enable-caching: true + debug-info: ${{ inputs.debug_info }} + build-os: ${{ inputs.build_os }} + build-arch: ${{ inputs.build_arch }} + os: ${{ matrix.os }} + arch: ${{ matrix.arch }} + src-dir: ${{ github.workspace }}/SourceCache/llvm-project/compiler-rt + bin-dir: ${{ github.workspace }}/BinaryCache/ClangRuntime + android-api-level: ${{ inputs.ANDROID_API_LEVEL }} + android-clang-version: ${{ inputs.ANDROID_CLANG_VERSION }} + ndk-path: ${{ steps.setup-ndk.outputs.ndk-path }} + install-dir: ${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/${{ inputs.swift_version }}+Asserts/usr/lib/clang/21 + built-compilers: '@("ASM", "C", "CXX")' + cmake-defines: | + @{ + 'LLVM_DIR' = "${{ github.workspace }}/BinaryCache/llvm/lib/cmake/llvm"; + 'LLVM_ENABLE_PER_TARGET_RUNTIME_DIR' = "YES"; + 'COMPILER_RT_DEFAULT_TARGET_ONLY' = "YES"; + 'COMPILER_RT_BUILD_BUILTINS' = "NO"; + 'COMPILER_RT_BUILD_CRT' = "NO"; + 'COMPILER_RT_BUILD_LIBFUZZER' = "NO"; + 'COMPILER_RT_BUILD_ORC' = "NO"; + 'COMPILER_RT_BUILD_XRAY' = "NO"; + 'COMPILER_RT_BUILD_PROFILE' = "YES"; + 'COMPILER_RT_BUILD_SANITIZERS' = "YES"; + } + - name: Build ClangRuntime + run: cmake --build ${{ github.workspace }}/BinaryCache/ClangRuntime + - name: Install ClangRuntime + run: cmake --build ${{ github.workspace }}/BinaryCache/ClangRuntime --target install-compiler-rt + + - uses: thebrowsercompany/gha-upload-tar-artifact@e18c33b1cd416d0d96a91dc6dce06219f98e4e27 # main + if: matrix.os != 'Android' || inputs.build_android + with: + name: ${{ matrix.os }}-${{ matrix.arch }}-compiler-rt + path: ${{ github.workspace }}/BuildRoot/Library + + - name: Upload PDBs to Azure + uses: microsoft/action-publish-symbols@v2.1.6 + if: ${{ inputs.debug_info && matrix.os == 'Windows' }} + with: + accountName: ${{ vars.SYMBOL_SERVER_ACCOUNT }} + personalAccessToken: ${{ secrets.SYMBOL_SERVER_PAT }} + symbolsFolder: ${{ github.workspace }}/BinaryCache + searchPattern: '**/*.pdb' + + - name: Upload DLLs to Azure + uses: microsoft/action-publish-symbols@v2.1.6 + if: ${{ inputs.debug_info && matrix.os == 'Windows' }} + with: + accountName: ${{ vars.SYMBOL_SERVER_ACCOUNT }} + personalAccessToken: ${{ secrets.SYMBOL_SERVER_PAT }} + symbolsFolder: ${{ github.workspace }}/BinaryCache + searchPattern: '**/*.dll' + + zlib: runs-on: ${{ inputs.default_build_runner }} From fc9b02d0c3dcbc90b9a73394492f702f566657ea Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Fri, 17 Oct 2025 18:54:33 -0700 Subject: [PATCH 3/6] Get llvm version through lit --- .github/workflows/swift-toolchain.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/swift-toolchain.yml b/.github/workflows/swift-toolchain.yml index eff960b58..a51c683c8 100644 --- a/.github/workflows/swift-toolchain.yml +++ b/.github/workflows/swift-toolchain.yml @@ -1330,6 +1330,13 @@ jobs: python-version: ${{ inputs.python_version }} architecture: x64 # FIXME(#1004): Remove workaround installing x64 Python on ARM64 CI hosts + - name: Get lit version + id: get-llvm-version + run: | + $litOutput = python ${{ github.workspace }}/SourceCache/llvm-project/llvm/utils/lit/lit.py --version + $litVersion = ($litOutput | Select-String -Pattern 'lit (\d+)' | ForEach-Object { $_.Matches[0].Groups[1].Value }) + echo "llvm-version=$litVersion" >> $env:GITHUB_OUTPUT + - name: Configure LLVM if: matrix.os != 'Android' || inputs.build_android uses: ./SourceCache/ci-build/.github/actions/configure-cmake-project @@ -1373,7 +1380,7 @@ jobs: android-api-level: ${{ inputs.ANDROID_API_LEVEL }} android-clang-version: ${{ inputs.ANDROID_CLANG_VERSION }} ndk-path: ${{ steps.setup-ndk.outputs.ndk-path }} - install-dir: ${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/${{ inputs.swift_version }}+Asserts/usr/lib/clang/21 + install-dir: ${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/${{ inputs.swift_version }}+Asserts/usr/lib/clang/${{ steps.get-llvm-version.outputs.llvm-version }} built-compilers: '@("ASM", "C", "CXX")' cmake-defines: | @{ @@ -1402,7 +1409,7 @@ jobs: android-api-level: ${{ inputs.ANDROID_API_LEVEL }} android-clang-version: ${{ inputs.ANDROID_CLANG_VERSION }} ndk-path: ${{ steps.setup-ndk.outputs.ndk-path }} - install-dir: ${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/${{ inputs.swift_version }}+Asserts/usr/lib/clang/21 + install-dir: ${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/${{ inputs.swift_version }}+Asserts/usr/lib/clang/${{ steps.get-llvm-version.outputs.llvm-version }} built-compilers: '@("ASM", "C", "CXX")' cmake-defines: | @{ From cad07c47661d5c903f4a799cc9373564d97b909f Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Sat, 18 Oct 2025 11:06:11 -0700 Subject: [PATCH 4/6] Download the binaries --- .github/workflows/swift-toolchain.yml | 52 +++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/.github/workflows/swift-toolchain.yml b/.github/workflows/swift-toolchain.yml index a51c683c8..1fa9aec46 100644 --- a/.github/workflows/swift-toolchain.yml +++ b/.github/workflows/swift-toolchain.yml @@ -1326,11 +1326,13 @@ jobs: local-cache: true - uses: actions/setup-python@v5 + if: matrix.os != 'Android' || inputs.build_android with: python-version: ${{ inputs.python_version }} architecture: x64 # FIXME(#1004): Remove workaround installing x64 Python on ARM64 CI hosts - - name: Get lit version + - name: Get LLVM version + if: matrix.os != 'Android' || inputs.build_android id: get-llvm-version run: | $litOutput = python ${{ github.workspace }}/SourceCache/llvm-project/llvm/utils/lit/lit.py --version @@ -1365,6 +1367,7 @@ jobs: } - name: Configure ClangBuiltins + if: matrix.os != 'Android' || inputs.build_android uses: ./SourceCache/ci-build/.github/actions/configure-cmake-project with: project-name: ClangBuiltins @@ -1389,11 +1392,14 @@ jobs: 'COMPILER_RT_DEFAULT_TARGET_ONLY' = "YES"; } - name: Build ClangBuiltins + if: matrix.os != 'Android' || inputs.build_android run: cmake --build ${{ github.workspace }}/BinaryCache/ClangBuiltins - name: Install ClangBuiltins + if: matrix.os != 'Android' || inputs.build_android run: cmake --build ${{ github.workspace }}/BinaryCache/ClangBuiltins --target install-compiler-rt - name: Configure ClangRuntime + if: matrix.os != 'Android' || inputs.build_android uses: ./SourceCache/ci-build/.github/actions/configure-cmake-project with: project-name: ClangRuntime @@ -1425,8 +1431,10 @@ jobs: 'COMPILER_RT_BUILD_SANITIZERS' = "YES"; } - name: Build ClangRuntime + if: matrix.os != 'Android' || inputs.build_android run: cmake --build ${{ github.workspace }}/BinaryCache/ClangRuntime - name: Install ClangRuntime + if: matrix.os != 'Android' || inputs.build_android run: cmake --build ${{ github.workspace }}/BinaryCache/ClangRuntime --target install-compiler-rt - uses: thebrowsercompany/gha-upload-tar-artifact@e18c33b1cd416d0d96a91dc6dce06219f98e4e27 # main @@ -4285,7 +4293,7 @@ jobs: # TODO: Build this on macOS or make an equivalent Mac-only job if: inputs.build_os == 'Windows' name: Package Tools - needs: [compilers, macros, debugging_tools, devtools, stdlib, sdk, configure_signing] + needs: [compilers, compiler-rt, macros, debugging_tools, devtools, stdlib, sdk, configure_signing] runs-on: ${{ inputs.default_build_runner }} strategy: @@ -4321,6 +4329,46 @@ jobs: name: Windows-${{ matrix.arch }}-NoAsserts-compilers path: ${{ github.workspace }}/BuildRoot/Library + - name: Download Compilers Runtime (Windows-amd64) + uses: thebrowsercompany/gha-download-tar-artifact@59992d91335d4ecba543c8535f7d07238e42125d # main + with: + name: Windows-amd64-compiler-rt + path: ${{ github.workspace }}/BuildRoot/Library + - name: Download Compilers Runtime (Windows-arm64) + uses: thebrowsercompany/gha-download-tar-artifact@59992d91335d4ecba543c8535f7d07238e42125d # main + with: + name: Windows-arm64-compiler-rt + path: ${{ github.workspace }}/BuildRoot/Library + - name: Download Compilers Runtime (Windows-x86) + uses: thebrowsercompany/gha-download-tar-artifact@59992d91335d4ecba543c8535f7d07238e42125d # main + with: + name: Windows-x86-compiler-rt + path: ${{ github.workspace }}/BuildRoot/Library + - name: Download Compilers Runtime (Android-arm64) + if: inputs.build_android + uses: thebrowsercompany/gha-download-tar-artifact@59992d91335d4ecba543c8535f7d07238e42125d # main + with: + name: Android-arm64-compiler-rt + path: ${{ github.workspace }}/BuildRoot/Library + - name: Download Compilers Runtime (Android-armv7) + if: inputs.build_android + uses: thebrowsercompany/gha-download-tar-artifact@59992d91335d4ecba543c8535f7d07238e42125d # main + with: + name: Android-armv7-compiler-rt + path: ${{ github.workspace }}/BuildRoot/Library + - name: Download Compilers Runtime (Android-x86_64) + if: inputs.build_android + uses: thebrowsercompany/gha-download-tar-artifact@59992d91335d4ecba543c8535f7d07238e42125d # main + with: + name: Android-x86_64-compiler-rt + path: ${{ github.workspace }}/BuildRoot/Library + - name: Download Compilers Runtime (Android-i686) + if: inputs.build_android + uses: thebrowsercompany/gha-download-tar-artifact@59992d91335d4ecba543c8535f7d07238e42125d # main + with: + name: Android-i686-compiler-rt + path: ${{ github.workspace }}/BuildRoot/Library + - name: Download Developer Tools uses: actions/download-artifact@v4 with: From e2e5331ad5bf14d1de166bc0b256f6ccc8627c54 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Thu, 16 Oct 2025 19:18:32 -0700 Subject: [PATCH 5/6] Do not use install-distribution-stripped as target --- .github/workflows/swift-toolchain.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/swift-toolchain.yml b/.github/workflows/swift-toolchain.yml index 1fa9aec46..acc507a09 100644 --- a/.github/workflows/swift-toolchain.yml +++ b/.github/workflows/swift-toolchain.yml @@ -1169,7 +1169,7 @@ jobs: run: cmake --build ${{ github.workspace }}/BinaryCache/1 --target distribution - name: Install Compiler Distribution - run: cmake --build ${{ github.workspace }}/BinaryCache/1 --target install-distribution-stripped + run: cmake --build ${{ github.workspace }}/BinaryCache/1 --target install-distribution - name: Copy cmark-gfm shared libraries run: | From 33d3228e18c22b751f9de5e9be2dce49ed1a91e4 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Mon, 20 Oct 2025 17:52:22 -0700 Subject: [PATCH 6/6] Remove irrelivant section --- .github/workflows/swift-toolchain.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/swift-toolchain.yml b/.github/workflows/swift-toolchain.yml index acc507a09..237799a60 100644 --- a/.github/workflows/swift-toolchain.yml +++ b/.github/workflows/swift-toolchain.yml @@ -1169,7 +1169,7 @@ jobs: run: cmake --build ${{ github.workspace }}/BinaryCache/1 --target distribution - name: Install Compiler Distribution - run: cmake --build ${{ github.workspace }}/BinaryCache/1 --target install-distribution + run: cmake --build ${{ github.workspace }}/BinaryCache/1 --target install-distribution-stripped - name: Copy cmark-gfm shared libraries run: | @@ -1191,7 +1191,7 @@ jobs: now = datetime.now() info_plist = r'${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/${{ inputs.swift_version }}+${{ matrix.variant }}/ToolchainInfo.plist' with open(os.path.normpath(info_plist), 'wb') as plist: - plistlib.dump({ 'Identifier': 'org.compnerd.dt.toolchain.{0}.{1}-${{ matrix.variant }}'.format(now.strftime('%Y%m%d'), now.timetuple().tm_hour % 6) }, plist) + plistlib.dump({ 'Identifier': 'org.compnerd.dt.toolchain.{0}.{1}-asserts'.format(now.strftime('%Y%m%d'), now.timetuple().tm_hour % 6) }, plist) - name: Upload Compilers uses: thebrowsercompany/gha-upload-tar-artifact@e18c33b1cd416d0d96a91dc6dce06219f98e4e27 # main