diff --git a/.github/workflows/swift-toolchain.yml b/.github/workflows/swift-toolchain.yml index 1fb774ff5..d4fffffa6 100644 --- a/.github/workflows/swift-toolchain.yml +++ b/.github/workflows/swift-toolchain.yml @@ -35,6 +35,12 @@ on: default: true required: false + android_api_level: + description: 'Android API Level' + default: 28 + required: true + type: number + workflow_call: inputs: snapshot: @@ -69,6 +75,12 @@ on: default: false required: false + android_api_level: + description: 'Android API Level' + default: 28 + required: true + type: number + secrets: SYMBOL_SERVER_PAT: required: true @@ -113,10 +125,15 @@ jobs: swift_tools_support_core_revision: ${{ steps.context.outputs.swift_tools_support_core_revision }} yams_revision: ${{ steps.context.outputs.yams_revision }} zlib_revision: ${{ steps.context.outputs.zlib_revision }} - CMAKE_C_FLAGS: ${{ steps.context.outputs.CMAKE_C_FLAGS }} - CMAKE_CXX_FLAGS: ${{ steps.context.outputs.CMAKE_CXX_FLAGS }} - CMAKE_EXE_LINKER_FLAGS: ${{ steps.context.outputs.CMAKE_EXE_LINKER_FLAGS }} - CMAKE_SHARED_LINKER_FLAGS: ${{ steps.context.outputs.CMAKE_SHARED_LINKER_FLAGS }} + ANDROID_API_LEVEL: ${{ steps.context.outputs.ANDROID_API_LEVEL }} + WINDOWS_CMAKE_C_FLAGS: ${{ steps.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + WINDOWS_CMAKE_CXX_FLAGS: ${{ steps.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + WINDOWS_CMAKE_EXE_LINKER_FLAGS: ${{ steps.context.outputs.WINDOWS_CMAKE_EXE_LINKER_FLAGS }} + WINDOWS_CMAKE_SHARED_LINKER_FLAGS: ${{ steps.context.outputs.WINDOWS_CMAKE_SHARED_LINKER_FLAGS }} + ANDROID_CMAKE_C_FLAGS: ${{ steps.context.outputs.ANDROID_CMAKE_C_FLAGS }} + ANDROID_CMAKE_CXX_FLAGS: ${{ steps.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + ANDROID_CMAKE_EXE_LINKER_FLAGS: ${{ steps.context.outputs.ANDROID_CMAKE_EXE_LINKER_FLAGS }} + ANDROID_CMAKE_SHARED_LINKER_FLAGS: ${{ steps.context.outputs.ANDROID_CMAKE_SHARED_LINKER_FLAGS }} CMAKE_Swift_FLAGS: ${{ steps.context.outputs.CMAKE_Swift_FLAGS }} debug_info: ${{ steps.context.outputs.debug_info }} signed: ${{ steps.context.outputs.signed }} @@ -191,19 +208,25 @@ jobs: # see: https://github.com/actions/runner-images/issues/10004 if [[ "${{ github.event_name }}" == "schedule" || "${{ inputs.debug_info }}" == "true" ]]; then echo debug_info=true >> ${GITHUB_OUTPUT} - echo CMAKE_C_FLAGS="/GS- /Gw /Gy /Oi /Oy /Z7 /Zc:inline /Zc:preprocessor" >> ${GITHUB_OUTPUT} - echo CMAKE_CXX_FLAGS="/GS- /Gw /Gy /Oi /Oy /Z7 /Zc:inline /Zc:preprocessor /Zc:__cplusplus /D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR" >> ${GITHUB_OUTPUT} - echo CMAKE_EXE_LINKER_FLAGS="-incremental:no -debug -opt:ref -opt:icf" >> ${GITHUB_OUTPUT} - echo CMAKE_SHARED_LINKER_FLAGS="-incremental:no -debug -opt:ref -opt:icf" >> ${GITHUB_OUTPUT} + echo WINDOWS_CMAKE_C_FLAGS="/GS- /Gw /Gy /Oi /Oy /Z7 /Zc:inline /Zc:preprocessor" >> ${GITHUB_OUTPUT} + echo WINDOWS_CMAKE_CXX_FLAGS="/GS- /Gw /Gy /Oi /Oy /Z7 /Zc:inline /Zc:preprocessor /Zc:__cplusplus /D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR" >> ${GITHUB_OUTPUT} + echo ANDROID_CMAKE_C_FLAGS="-ffunction-sections -fdata-sections -g" >> ${GITHUB_OUTPUT} + echo ANDROID_CMAKE_CXX_FLAGS="-ffunction-sections -fdata-sections -g" >> ${GITHUB_OUTPUT} + echo WINDOWS_CMAKE_EXE_LINKER_FLAGS="-incremental:no -debug -opt:ref -opt:icf" >> ${GITHUB_OUTPUT} + echo WINDOWS_CMAKE_SHARED_LINKER_FLAGS="-incremental:no -debug -opt:ref -opt:icf" >> ${GITHUB_OUTPUT} echo CMAKE_Swift_FLAGS="-g -debug-info-format=codeview -Xlinker -debug -Xlinker -incremental:no -Xlinker -opt:ref -Xlinker -opt:icf" >> ${GITHUB_OUTPUT} else echo debug_info=false >> ${GITHUB_OUTPUT} - echo CMAKE_C_FLAGS="/GS- /Gw /Gy /Oi /Oy /Zc:inline /Zc:preprocessor" >> ${GITHUB_OUTPUT} - echo CMAKE_CXX_FLAGS="/GS- /Gw /Gy /Oi /Oy /Zc:inline /Zc:preprocessor /Zc:__cplusplus /D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR" >> ${GITHUB_OUTPUT} - echo CMAKE_EXE_LINKER_FLAGS="" >> ${GITHUB_OUTPUT} - echo CMAKE_SHARED_LINKER_FLAGS="" >> ${GITHUB_OUTPUT} + echo WINDOWS_CMAKE_C_FLAGS="/GS- /Gw /Gy /Oi /Oy /Zc:inline /Zc:preprocessor" >> ${GITHUB_OUTPUT} + echo WINDOWS_CMAKE_CXX_FLAGS="/GS- /Gw /Gy /Oi /Oy /Zc:inline /Zc:preprocessor /Zc:__cplusplus /D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR" >> ${GITHUB_OUTPUT} + echo ANDROID_CMAKE_C_FLAGS="-ffunction-sections -fdata-sections" >> ${GITHUB_OUTPUT} + echo ANDROID_CMAKE_CXX_FLAGS="-ffunction-sections -fdata-sections" >> ${GITHUB_OUTPUT} + echo WINDOWS_CMAKE_EXE_LINKER_FLAGS="" >> ${GITHUB_OUTPUT} + echo WINDOWS_CMAKE_SHARED_LINKER_FLAGS="" >> ${GITHUB_OUTPUT} echo CMAKE_Swift_FLAGS="-Xlinker -incremental:no -Xlinker -opt:ref -Xlinker -opt:icf" >> ${GITHUB_OUTPUT} fi + echo ANDROID_CMAKE_EXE_LINKER_FLAGS="" >> ${GITHUB_OUTPUT} + echo ANDROID_CMAKE_SHARED_LINKER_FLAGS="" >> ${GITHUB_OUTPUT} if [[ "${{ github.event_name }}" == "schedule" || "${{ inputs.signed }}" == "true" ]]; then # FIXME(compnerd) enable this when requested @@ -226,6 +249,8 @@ jobs: echo windows_build_runner=${{ vars.WINDOWS_BUILD_RUNNER || 'windows-latest' }} >> ${GITHUB_OUTPUT} echo compilers_build_runner=${{ vars.COMPILERS_BUILD_RUNNER || vars.WINDOWS_BUILD_RUNNER || 'windows-latest' }} >> ${GITHUB_OUTPUT} + echo ANDROID_API_LEVEL=${{ inputs.android_api_level }} >> ${GITHUB_OUTPUT} + - uses: actions/upload-artifact@v4 with: name: stable.xml @@ -239,7 +264,64 @@ jobs: strategy: fail-fast: false matrix: - arch: ['amd64', 'arm64', 'x86'] + include: + - arch: amd64 + cc: cl + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: cl + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + os: Windows + extra_flags: + + - arch: arm64 + cc: cl + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: cl + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + os: Windows + extra_flags: + + - arch: x86 + cc: cl + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: cl + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + os: Windows + extra_flags: + + - arch: arm64 + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: armv7 + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: i686 + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=x86 "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: x86_64 + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=x86_64 "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + name: ${{ matrix.os }} ${{ matrix.arch }} SQLite3 steps: - uses: actions/checkout@v4 @@ -257,6 +339,7 @@ jobs: run: Copy-Item ${{ github.workspace }}\SourceCache\swift-build\cmake\SQLite\CMakeLists.txt -destination ${{ github.workspace }}\SourceCache\sqlite-3.43.2\CMakeLists.txt - uses: compnerd/gha-setup-vsdevenv@main + if: matrix.os == 'Windows' with: host_arch: amd64 components: 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64;Microsoft.VisualStudio.Component.VC.Tools.ARM64' @@ -266,23 +349,26 @@ jobs: uses: hendrikmuhs/ccache-action@2e0e89e8d74340a03f75d58d02aae4c5ee1b15c6 with: max-size: 100M - key: windows-${{ matrix.arch }}-sqlite + key: ${{ matrix.os }}-${{ matrix.arch }}-sqlite variant: sccache append-timestamp: false - name: Configure SQLite run: | + $NINJA_PATH = "$(& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -products * -nologo -latest -property installationPath)\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe" cmake -B ${{ github.workspace }}/BinaryCache/sqlite-3.43.2 ` -D BUILD_SHARED_LIBS=NO ` -D CMAKE_BUILD_TYPE=Release ` - -D CMAKE_C_COMPILER=cl ` + -D CMAKE_C_COMPILER=${{ matrix.cc }} ` -D CMAKE_C_COMPILER_LAUNCHER=sccache ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` - -D CMAKE_CXX_COMPILER=cl ` + -D CMAKE_C_FLAGS="${{ matrix.cflags }}" ` + -D CMAKE_CXX_COMPILER=${{ matrix.cxx }} ` -D CMAKE_CXX_COMPILER_LAUNCHER=sccache ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ matrix.cxxflags }}" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/sqlite-3.43.2/usr ` + -D CMAKE_SYSTEM_NAME=${{ matrix.os }} ` + ${{ matrix.extra_flags }} ` -G Ninja ` -S ${{ github.workspace }}/SourceCache/sqlite-3.43.2 - name: Build SQLite @@ -292,7 +378,7 @@ jobs: - uses: actions/upload-artifact@v4 with: - name: sqlite-${{ matrix.arch }}-3.43.2 + name: sqlite-${{ matrix.os }}-${{ matrix.arch }}-3.43.2 path: ${{ github.workspace }}/BuildRoot/Library/sqlite-3.43.2/usr icu_tools: @@ -339,10 +425,10 @@ jobs: -D CMAKE_BUILD_TYPE=Release ` -D CMAKE_C_COMPILER=cl ` -D CMAKE_C_COMPILER_LAUNCHER=sccache ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` + -D CMAKE_C_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }}" ` -D CMAKE_CXX_COMPILER=cl ` -D CMAKE_CXX_COMPILER_LAUNCHER=sccache ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }}" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/icu-69.1/usr ` -G Ninja ` @@ -364,6 +450,7 @@ jobs: ${{ github.workspace }}/BinaryCache/icu-tools-69.1/icupkg.exe ${{ github.workspace }}/BinaryCache/icu-tools-69.1/makeconv.exe ${{ github.workspace }}/BinaryCache/icu-tools-69.1/pkgdata.exe + ${{ github.workspace }}/BinaryCache/icu-tools-69.1/genccode.exe icu: needs: [context, icu_tools] @@ -373,12 +460,77 @@ jobs: fail-fast: false matrix: include: - - arch: 'amd64' + - arch: amd64 BUILD_TOOLS: NO - - arch: 'arm64' + BUILD_DATA: YES + cc: cl + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: cl + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + os: Windows + extra_flags: + + - arch: arm64 BUILD_TOOLS: NO - - arch: 'x86' + BUILD_DATA: YES + cc: cl + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: cl + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + os: Windows + extra_flags: + + - arch: x86 BUILD_TOOLS: YES + BUILD_DATA: YES + cc: cl + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: cl + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + os: Windows + extra_flags: + + - arch: arm64 + BUILD_TOOLS: NO + BUILD_DATA: NO + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: armv7 + BUILD_TOOLS: NO + BUILD_DATA: NO + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: i686 + BUILD_TOOLS: NO + BUILD_DATA: NO + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=x86 "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: x86_64 + BUILD_TOOLS: NO + BUILD_DATA: NO + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=x86_64 "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + name: ${{ matrix.os }} ${{ matrix.arch }} ICU steps: - uses: actions/download-artifact@v4 @@ -401,9 +553,12 @@ jobs: show-progress: false - name: Copy CMakeLists.txt - run: Copy-Item ${{ github.workspace }}\SourceCache\swift-installer-scripts\shared\ICU\CMakeLists.txt -destination ${{ github.workspace }}\SourceCache\icu\icu4c\CMakeLists.txt + run: | + Copy-Item ${{ github.workspace }}\SourceCache\swift-installer-scripts\shared\ICU\CMakeLists.txt -destination ${{ github.workspace }}\SourceCache\icu\icu4c\CMakeLists.txt + Copy-Item ${{ github.workspace }}\SourceCache\swift-installer-scripts\shared\ICU\icupkg.inc.cmake -destination ${{ github.workspace }}\SourceCache\icu\icu4c\icupkg.inc.cmake - uses: compnerd/gha-setup-vsdevenv@main + if: matrix.os == 'Windows' with: host_arch: amd64 components: 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64;Microsoft.VisualStudio.Component.VC.Tools.ARM64' @@ -413,26 +568,30 @@ jobs: uses: hendrikmuhs/ccache-action@2e0e89e8d74340a03f75d58d02aae4c5ee1b15c6 with: max-size: 100M - key: windows-${{ matrix.arch }}-icu + key: ${{ matrix.os }}-${{ matrix.arch }}-icu variant: sccache append-timestamp: false - name: Configure ICU run: | + $NINJA_PATH = "$(& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -products * -nologo -latest -property installationPath)\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe" cmake -B ${{ github.workspace }}/BinaryCache/icu-69.1 ` -D BUILD_SHARED_LIBS=NO ` -D BUILD_TOOLS=${{ matrix.BUILD_TOOLS }} ` + -D BUILD_DATA=${{ matrix.BUILD_DATA }} ` -D CMAKE_BUILD_TYPE=Release ` - -D CMAKE_C_COMPILER=cl ` + -D CMAKE_C_COMPILER=${{ matrix.cc }} ` -D CMAKE_C_COMPILER_LAUNCHER=sccache ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` - -D CMAKE_CXX_COMPILER=cl ` + -D CMAKE_C_FLAGS="${{ matrix.cflags }}" ` + -D CMAKE_CXX_COMPILER=${{ matrix.cxx }} ` -D CMAKE_CXX_COMPILER_LAUNCHER=sccache ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ matrix.cxxflags }}" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/icu-69.1/usr ` -D MSVC_C_ARCHITECTURE_ID=${{ matrix.arch }} ` + -D CMAKE_SYSTEM_NAME=${{ matrix.os }} ` -D ICU_TOOLS_DIR=${{ github.workspace }}/BinaryCache/icu-tools-69.1/usr/bin ` + ${{ matrix.extra_flags }} ` -G Ninja ` -S ${{ github.workspace }}/SourceCache/icu/icu4c - name: Build ICU @@ -442,7 +601,7 @@ jobs: - uses: actions/upload-artifact@v4 with: - name: icu-${{ matrix.arch }}-69.1 + name: icu-${{ matrix.os }}-${{ matrix.arch }}-69.1 path: ${{ github.workspace }}/BuildRoot/Library/icu-69.1/usr cmark_gfm: @@ -484,10 +643,10 @@ jobs: -D CMAKE_BUILD_TYPE=Release ` -D CMAKE_C_COMPILER=cl ` -D CMAKE_C_COMPILER_LAUNCHER=sccache ` - -D CMAKE_C_COMPILER_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` + -D CMAKE_C_COMPILER_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }}" ` -D CMAKE_CXX_COMPILER=cl ` -D CMAKE_CXX_COMPILER_LAUNCHER=sccache ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }}" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/cmark-gfm-0.29.0.gfm.13/usr ` -D CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=YES ` @@ -541,10 +700,10 @@ jobs: -D CMAKE_BUILD_TYPE=Release ` -D CMAKE_C_COMPILER=cl ` -D CMAKE_C_COMPILER_LAUNCHER=sccache ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` + -D CMAKE_C_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }}" ` -D CMAKE_CXX_COMPILER=cl ` -D CMAKE_CXX_COMPILER_LAUNCHER=sccache ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }}" ` -D CMAKE_MT=mt ` -D cmark-gfm_DIR=${{ github.workspace }}/BuildRoot/Library/cmark-gfm-0.29.0.gfm.13/usr/lib/cmake ` -G Ninja ` @@ -734,17 +893,17 @@ jobs: -D CMAKE_BUILD_TYPE=Release ` -D CMAKE_C_COMPILER=cl ` -D CMAKE_C_COMPILER_LAUNCHER=sccache ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` + -D CMAKE_C_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }}" ` -D CMAKE_CXX_COMPILER=cl ` -D CMAKE_CXX_COMPILER_LAUNCHER=sccache ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }} -D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH" ` + -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} -D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH" ` -D CMAKE_MT=mt ` -D CMAKE_Swift_COMPILER="${SWIFTC}" ` -D CMAKE_Swift_COMPILER_WORKS=YES ` -D CMAKE_Swift_FLAGS="-sdk `"${SDKROOT}`" -Xcc -D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH" ` - -D CMAKE_EXE_LINKER_FLAGS="${{ needs.context.outputs.CMAKE_EXE_LINKER_FLAGS }}" ` + -D CMAKE_EXE_LINKER_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_EXE_LINKER_FLAGS }}" ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr ` - -D CMAKE_SHARED_LINKER_FLAGS="${{ needs.context.outputs.CMAKE_SHARED_LINKER_FLAGS }}" ` + -D CMAKE_SHARED_LINKER_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_SHARED_LINKER_FLAGS }}" ` ${CMAKE_SYSTEM_NAME} ` ${CMAKE_SYSTEM_PROCESSOR} ` -G Ninja ` @@ -863,7 +1022,64 @@ jobs: strategy: fail-fast: false matrix: - arch: ['amd64', 'arm64', 'x86'] + include: + - arch: amd64 + cc: cl + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: cl + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + os: Windows + extra_flags: + + - arch: arm64 + cc: cl + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: cl + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + os: Windows + extra_flags: + + - arch: x86 + cc: cl + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: cl + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + os: Windows + extra_flags: + + - arch: arm64 + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=YES -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: armv7 + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=YES -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: i686 + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=YES -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=x86 "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: x86_64 + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=YES -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=x86_64 "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + name: ${{ matrix.os }} ${{ matrix.arch }} zlib steps: - uses: actions/checkout@v4 @@ -874,6 +1090,7 @@ jobs: show-progress: false - uses: compnerd/gha-setup-vsdevenv@main + if: matrix.os == 'Windows' with: host_arch: amd64 components: 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64;Microsoft.VisualStudio.Component.VC.Tools.ARM64' @@ -883,23 +1100,26 @@ jobs: uses: hendrikmuhs/ccache-action@2e0e89e8d74340a03f75d58d02aae4c5ee1b15c6 with: max-size: 100M - key: windows-${{ matrix.arch }}-zlib + key: ${{ matrix.os }}-${{ matrix.arch }}-zlib variant: sccache append-timestamp: false - name: Configure zlib run: | + $NINJA_PATH = "$(& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -products * -nologo -latest -property installationPath)\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe" cmake -B ${{ github.workspace }}/BinaryCache/zlib-1.3 ` -D BUILD_SHARED_LIBS=NO ` -D CMAKE_BUILD_TYPE=Release ` - -D CMAKE_C_COMPILER=cl ` + -D CMAKE_C_COMPILER=${{ matrix.cc }} ` -D CMAKE_C_COMPILER_LAUNCHER=sccache ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` - -D CMAKE_CXX_COMPILER=cl ` + -D CMAKE_C_FLAGS="${{ matrix.cflags }}" ` + -D CMAKE_CXX_COMPILER=${{ matrix.cxx }} ` -D CMAKE_CXX_COMPILER_LAUNCHER=sccache ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ matrix.cxxflags }}" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/zlib-1.3/usr ` + -D CMAKE_SYSTEM_NAME=${{ matrix.os }} ` + ${{ matrix.extra_flags }} ` -G Ninja ` -S ${{ github.workspace }}/SourceCache/zlib ` -D SKIP_INSTALL_FILES=YES @@ -910,7 +1130,7 @@ jobs: - uses: actions/upload-artifact@v4 with: - name: zlib-${{ matrix.arch }}-1.3 + name: zlib-${{ matrix.os }}-${{ matrix.arch }}-1.3 path: ${{ github.workspace }}/BuildRoot/Library/zlib-1.3/usr curl: @@ -920,7 +1140,64 @@ jobs: strategy: fail-fast: false matrix: - arch: ['amd64', 'arm64', 'x86'] + include: + - arch: amd64 + cc: cl + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: cl + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + os: Windows + extra_flags: + + - arch: arm64 + cc: cl + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: cl + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + os: Windows + extra_flags: + + - arch: x86 + cc: cl + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: cl + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + os: Windows + extra_flags: + + - arch: arm64 + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=YES -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: armv7 + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=YES -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: i686 + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=YES -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=x86 "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: x86_64 + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=YES -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=x86_64 "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + name: ${{ matrix.os }} ${{ matrix.arch }} curl steps: - uses: actions/checkout@v4 @@ -932,10 +1209,11 @@ jobs: - uses: actions/download-artifact@v4 with: - name: zlib-${{ matrix.arch }}-1.3 + name: zlib-${{ matrix.os }}-${{ matrix.arch }}-1.3 path: ${{ github.workspace }}/BuildRoot/Library/zlib-1.3/usr - uses: compnerd/gha-setup-vsdevenv@main + if: matrix.os == 'Windows' with: host_arch: amd64 components: 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64;Microsoft.VisualStudio.Component.VC.Tools.ARM64' @@ -945,23 +1223,26 @@ jobs: uses: hendrikmuhs/ccache-action@2e0e89e8d74340a03f75d58d02aae4c5ee1b15c6 with: max-size: 100M - key: windows-${{ matrix.arch }}-curl + key: ${{ matrix.os }}-${{ matrix.arch }}-curl variant: sccache append-timestamp: false - name: Configure curl run: | + $NINJA_PATH = "$(& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -products * -nologo -latest -property installationPath)\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe" cmake -B ${{ github.workspace }}/BinaryCache/curl-7.77.0 ` -D BUILD_SHARED_LIBS=NO ` -D CMAKE_BUILD_TYPE=Release ` - -D CMAKE_C_COMPILER=cl ` + -D CMAKE_C_COMPILER=${{ matrix.cc }} ` -D CMAKE_C_COMPILER_LAUNCHER=sccache ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` - -D CMAKE_CXX_COMPILER=cl ` + -D CMAKE_C_FLAGS="${{ matrix.cflags }}" ` + -D CMAKE_CXX_COMPILER=${{ matrix.cxx }} ` -D CMAKE_CXX_COMPILER_LAUNCHER=sccache ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ matrix.cxxflags }}" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/curl-7.77.0/usr ` + -D CMAKE_SYSTEM_NAME=${{ matrix.os }} ` + ${{ matrix.extra_flags }} ` -G Ninja ` -S ${{ github.workspace }}/SourceCache/curl ` -D BUILD_TESTING=NO ` @@ -1017,9 +1298,9 @@ jobs: -D CURL_USE_LIBSSH2=NO ` -D CURL_USE_MBEDTLS=NO ` -D CURL_USE_OPENSSL=NO ` - -D CURL_USE_SCHANNEL=YES ` + -D CURL_USE_SCHANNEL=${{ matrix.os == 'Windows' && 'YES' || 'NO' }} ` -D CURL_USE_WOLFSSL=NO ` - -D CURL_WINDOWS_SSPI=YES ` + -D CURL_WINDOWS_SSPI=${{ matrix.os == 'Windows' && 'YES' || 'NO' }} ` -D CURL_ZLIB=YES ` -D CURL_ZSTD=NO ` -D ENABLE_ARES=NO ` @@ -1037,8 +1318,8 @@ jobs: -D USE_NGHTTP2=NO ` -D USE_NGTCP2=NO ` -D USE_QUICHE=NO ` - -D USE_WIN32_IDN=YES ` - -D USE_WIN32_LARGE_FILES=YES ` + -D USE_WIN32_IDN=${{ matrix.os == 'Windows' && 'YES' || 'NO' }} ` + -D USE_WIN32_LARGE_FILES=${{ matrix.os == 'Windows' && 'YES' || 'NO' }} ` -D USE_WIN32_LDAP=NO ` -D ZLIB_ROOT=${{ github.workspace }}/BuildRoot/Library/zlib-1.3/usr ` -D ZLIB_LIBRARY=${{ github.workspace }}/BuildRoot/Library/zlib-1.3/usr/lib/zlibstatic.lib @@ -1049,7 +1330,7 @@ jobs: - uses: actions/upload-artifact@v4 with: - name: curl-${{ matrix.arch }}-7.77.0 + name: curl-${{ matrix.os }}-${{ matrix.arch }}-7.77.0 path: ${{ github.workspace }}/BuildRoot/Library/curl-7.77.0/usr libxml2: @@ -1059,7 +1340,64 @@ jobs: strategy: fail-fast: false matrix: - arch: ['amd64', 'arm64', 'x86'] + include: + - arch: amd64 + cc: cl + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: cl + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + os: Windows + extra_flags: + + - arch: arm64 + cc: cl + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: cl + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + os: Windows + extra_flags: + + - arch: x86 + cc: cl + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: cl + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + os: Windows + extra_flags: + + - arch: arm64 + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=YES -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: armv7 + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=YES -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: i686 + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=YES -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=x86 "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: x86_64 + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + os: Android + extra_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=YES -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=x86_64 "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + name: ${{ matrix.os }} ${{ matrix.arch }} libxml2 steps: - uses: actions/checkout@v4 @@ -1070,6 +1408,7 @@ jobs: show-progress: false - uses: compnerd/gha-setup-vsdevenv@main + if: matrix.os == 'Windows' with: host_arch: amd64 components: 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64;Microsoft.VisualStudio.Component.VC.Tools.ARM64' @@ -1079,23 +1418,26 @@ jobs: uses: hendrikmuhs/ccache-action@2e0e89e8d74340a03f75d58d02aae4c5ee1b15c6 with: max-size: 100M - key: windows-${{ matrix.arch }}-libxml2 + key: ${{ matrix.os }}-${{ matrix.arch }}-libxml2 variant: sccache append-timestamp: false - name: Configure libxml2 run: | + $NINJA_PATH = "$(& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -products * -nologo -latest -property installationPath)\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe" cmake -B ${{ github.workspace }}/BinaryCache/libxml2-2.11.5 ` -D BUILD_SHARED_LIBS=NO ` -D CMAKE_BUILD_TYPE=Release ` - -D CMAKE_C_COMPILER=cl ` + -D CMAKE_C_COMPILER=${{ matrix.cc }} ` -D CMAKE_C_COMPILER_LAUNCHER=sccache ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` - -D CMAKE_CXX_COMPILER=cl ` + -D CMAKE_C_FLAGS="${{ matrix.cflags }}" ` + -D CMAKE_CXX_COMPILER=${{ matrix.cxx }} ` -D CMAKE_CXX_COMPILER_LAUNCHER=sccache ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ matrix.cxxflags }}" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/libxml2-2.11.5/usr ` + -D CMAKE_SYSTEM_NAME=${{ matrix.os }} ` + ${{ matrix.extra_flags }} ` -G Ninja ` -S ${{ github.workspace }}/SourceCache/libxml2 ` -D LIBXML2_WITH_ICONV=NO ` @@ -1112,7 +1454,7 @@ jobs: - uses: actions/upload-artifact@v4 with: - name: libxml2-${{ matrix.arch }}-2.11.5 + name: libxml2-${{ matrix.os }}-${{ matrix.arch }}-2.11.5 path: ${{ github.workspace }}/BuildRoot/Library/libxml2-2.11.5/usr sdk: @@ -1124,34 +1466,122 @@ jobs: fail-fast: false matrix: include: - - arch: 'amd64' + - arch: amd64 cpu: 'x86_64' triple: 'x86_64-unknown-windows-msvc' + triple_no_api_level: 'x86_64-unknown-windows-msvc' + cc: '$CLANG_CL' + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: '$CLANG_CL' + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + swiftflags: ${{ needs.context.outputs.CMAKE_Swift_FLAGS }} + os: Windows + llvm_flags: + linker_flags: '-D CMAKE_EXE_LINKER_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_EXE_LINKER_FLAGS }}" -D CMAKE_SHARED_LINKER_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_SHARED_LINKER_FLAGS }}"' + extra_flags: - - arch: 'arm64' + - arch: arm64 cpu: 'aarch64' triple: 'aarch64-unknown-windows-msvc' + triple_no_api_level: 'aarch64-unknown-windows-msvc' + cc: '$CLANG_CL' + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: '$CLANG_CL' + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + swiftflags: ${{ needs.context.outputs.CMAKE_Swift_FLAGS }} + os: Windows + llvm_flags: + linker_flags: '-D CMAKE_EXE_LINKER_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_EXE_LINKER_FLAGS }}" -D CMAKE_SHARED_LINKER_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_SHARED_LINKER_FLAGS }}"' + extra_flags: - - arch: 'x86' + - arch: x86 cpu: 'i686' triple: 'i686-unknown-windows-msvc' + triple_no_api_level: 'i686-unknown-windows-msvc' + cc: '$CLANG_CL' + cflags: ${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} + cxx: '$CLANG_CL' + cxxflags: ${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} + swiftflags: ${{ needs.context.outputs.CMAKE_Swift_FLAGS }} + os: Windows + llvm_flags: + linker_flags: '-D CMAKE_EXE_LINKER_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_EXE_LINKER_FLAGS }}" -D CMAKE_SHARED_LINKER_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_SHARED_LINKER_FLAGS }}"' + extra_flags: + + - arch: arm64 + cpu: 'aarch64' + triple: 'aarch64-unknown-linux-android${{ needs.context.outputs.ANDROID_API_LEVEL }}' + triple_no_api_level: aarch64-unknown-linux-android + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + swiftflags: -sdk $NDKPATH/toolchains/llvm/prebuilt/windows-x86_64/sysroot -Xclang-linker -target -Xclang-linker aarch64-unknown-linux-android${{ needs.context.outputs.ANDROID_API_LEVEL }} -Xclang-linker --sysroot -Xclang-linker $NDKPATH/toolchains/llvm/prebuilt/windows-x86_64/sysroot -Xclang-linker -resource-dir -Xclang-linker $NDKPATH/toolchains/llvm/prebuilt/windows-x86_64/lib/clang/17 -L ${{ github.workspace }}/BinaryCache/swift/lib/swift/android -g + os: Android + llvm_flags: -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DLLVM_HOST_TRIPLE=aarch64-unknown-linux-android${{ needs.context.outputs.ANDROID_API_LEVEL }} + linker_flags: '-D CMAKE_EXE_LINKER_FLAGS="${{ needs.context.outputs.ANDROID_CMAKE_EXE_LINKER_FLAGS }}" -D CMAKE_SHARED_LINKER_FLAGS="${{ needs.context.outputs.ANDROID_CMAKE_SHARED_LINKER_FLAGS }}"' + extra_flags: -D CMAKE_ANDROID_NDK=$NDKPATH -D SWIFT_ANDROID_NDK_PATH=$NDKPATH -DSWIFT_BUILD_CLANG_OVERLAYS_SKIP_BUILTIN_FLOAT=YES -DLLVM_ENABLE_LIBCXX=YES -DSWIFT_USE_LINKER=lld -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: armv7 + cpu: armv7 + triple: 'armv7a-unknown-linux-androideabi${{ needs.context.outputs.ANDROID_API_LEVEL }}' + triple_no_api_level: armv7-unknown-linux-androideabi + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + swiftflags: -sdk $NDKPATH/toolchains/llvm/prebuilt/windows-x86_64/sysroot -Xclang-linker -target -Xclang-linker armv7a-unknown-linux-androideabi${{ needs.context.outputs.ANDROID_API_LEVEL }} -Xclang-linker --sysroot -Xclang-linker $NDKPATH/toolchains/llvm/prebuilt/windows-x86_64/sysroot -Xclang-linker -resource-dir -Xclang-linker $NDKPATH/toolchains/llvm/prebuilt/windows-x86_64/lib/clang/17 -L ${{ github.workspace }}/BinaryCache/swift/lib/swift/android -g + os: Android + llvm_flags: -DCMAKE_SYSTEM_PROCESSOR=armv7-a -DLLVM_HOST_TRIPLE=armv7a-unknown-linux-androideabi${{ needs.context.outputs.ANDROID_API_LEVEL }} + linker_flags: '-D CMAKE_EXE_LINKER_FLAGS="${{ needs.context.outputs.ANDROID_CMAKE_EXE_LINKER_FLAGS }}" -D CMAKE_SHARED_LINKER_FLAGS="${{ needs.context.outputs.ANDROID_CMAKE_SHARED_LINKER_FLAGS }}"' + extra_flags: -D CMAKE_ANDROID_NDK=$NDKPATH -D SWIFT_ANDROID_NDK_PATH=$NDKPATH -DSWIFT_BUILD_CLANG_OVERLAYS_SKIP_BUILTIN_FLOAT=YES -DLLVM_ENABLE_LIBCXX=YES -DSWIFT_USE_LINKER=lld -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: i686 + cpu: i686 + triple: 'i686-unknown-linux-android${{ needs.context.outputs.ANDROID_API_LEVEL }}' + triple_no_api_level: i686-unknown-linux-android + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + swiftflags: -sdk $NDKPATH/toolchains/llvm/prebuilt/windows-x86_64/sysroot -Xclang-linker -target -Xclang-linker i686-unknown-linux-android${{ needs.context.outputs.ANDROID_API_LEVEL }} -Xclang-linker --sysroot -Xclang-linker $NDKPATH/toolchains/llvm/prebuilt/windows-x86_64/sysroot -Xclang-linker -resource-dir -Xclang-linker $NDKPATH/toolchains/llvm/prebuilt/windows-x86_64/lib/clang/17 -L ${{ github.workspace }}/BinaryCache/swift/lib/swift/android -g + os: Android + llvm_flags: -DCMAKE_SYSTEM_PROCESSOR=i686 -DLLVM_HOST_TRIPLE=i686-unknown-linux-android${{ needs.context.outputs.ANDROID_API_LEVEL }} + linker_flags: '-D CMAKE_EXE_LINKER_FLAGS="${{ needs.context.outputs.ANDROID_CMAKE_EXE_LINKER_FLAGS }}" -D CMAKE_SHARED_LINKER_FLAGS="${{ needs.context.outputs.ANDROID_CMAKE_SHARED_LINKER_FLAGS }}"' + extra_flags: -D CMAKE_ANDROID_NDK=$NDKPATH -D SWIFT_ANDROID_NDK_PATH=$NDKPATH -DSWIFT_BUILD_CLANG_OVERLAYS_SKIP_BUILTIN_FLOAT=YES -DLLVM_ENABLE_LIBCXX=YES -DSWIFT_USE_LINKER=lld -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=x86 "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + - arch: x86_64 + cpu: 'x86_64' + triple: 'x86_64-unknown-linux-android${{ needs.context.outputs.ANDROID_API_LEVEL }}' + triple_no_api_level: x86_64-unknown-linux-android + cc: clang + cflags: ${{ needs.context.outputs.ANDROID_CMAKE_C_FLAGS }} + cxx: clang++ + cxxflags: ${{ needs.context.outputs.ANDROID_CMAKE_CXX_FLAGS }} + swiftflags: -sdk $NDKPATH/toolchains/llvm/prebuilt/windows-x86_64/sysroot -Xclang-linker -target -Xclang-linker x86_64-unknown-linux-android${{ needs.context.outputs.ANDROID_API_LEVEL }} -Xclang-linker --sysroot -Xclang-linker $NDKPATH/toolchains/llvm/prebuilt/windows-x86_64/sysroot -Xclang-linker -resource-dir -Xclang-linker $NDKPATH/toolchains/llvm/prebuilt/windows-x86_64/lib/clang/17 -L ${{ github.workspace }}/BinaryCache/swift/lib/swift/android -g + os: Android + llvm_flags: -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DLLVM_HOST_TRIPLE=x86_64-unknown-linux-android${{ needs.context.outputs.ANDROID_API_LEVEL }} + linker_flags: '-D CMAKE_EXE_LINKER_FLAGS="${{ needs.context.outputs.ANDROID_CMAKE_EXE_LINKER_FLAGS }}" -D CMAKE_SHARED_LINKER_FLAGS="${{ needs.context.outputs.ANDROID_CMAKE_SHARED_LINKER_FLAGS }}"' + extra_flags: -D CMAKE_ANDROID_NDK=$NDKPATH -D SWIFT_ANDROID_NDK_PATH=$NDKPATH -DSWIFT_BUILD_CLANG_OVERLAYS_SKIP_BUILTIN_FLOAT=YES -DLLVM_ENABLE_LIBCXX=YES -DSWIFT_USE_LINKER=lld -DCMAKE_ANDROID_API=${{ needs.context.outputs.ANDROID_API_LEVEL }} -DCMAKE_ANDROID_ARCH_ABI=x86_64 "-DCMAKE_MAKE_PROGRAM=$NINJA_PATH" + + name: ${{ matrix.os }} ${{ matrix.arch }} SDK steps: - uses: actions/download-artifact@v4 with: - name: icu-${{ matrix.arch }}-69.1 + name: icu-${{ matrix.os }}-${{ matrix.arch }}-69.1 path: ${{ github.workspace }}/BuildRoot/Library/icu-69.1/usr - uses: actions/download-artifact@v4 with: - name: libxml2-${{ matrix.arch }}-2.11.5 + name: libxml2-${{ matrix.os }}-${{ matrix.arch }}-2.11.5 path: ${{ github.workspace }}/BuildRoot/Library/libxml2-2.11.5/usr - uses: actions/download-artifact@v4 with: - name: curl-${{ matrix.arch }}-7.77.0 + name: curl-${{ matrix.os }}-${{ matrix.arch }}-7.77.0 path: ${{ github.workspace }}/BuildRoot/Library/curl-7.77.0/usr - uses: actions/download-artifact@v4 with: - name: zlib-${{ matrix.arch }}-1.3 + name: zlib-${{ matrix.os }}-${{ matrix.arch }}-1.3 path: ${{ github.workspace }}/BuildRoot/Library/zlib-1.3/usr - name: Download Compilers uses: actions/download-artifact@v4 @@ -1191,11 +1621,19 @@ jobs: path: ${{ github.workspace }}/SourceCache/swift-corelibs-libdispatch show-progress: false - uses: actions/checkout@v4 + if: matrix.os == 'Windows' with: repository: apple/swift-corelibs-foundation ref: ${{ needs.context.outputs.swift_corelibs_foundation_revision }} path: ${{ github.workspace }}/SourceCache/swift-corelibs-foundation show-progress: false + - uses: actions/checkout@v4 + if: matrix.os == 'Android' + with: + repository: apple/swift-corelibs-foundation + ref: a515f3e15c81d029411c540df7edf52d427ff2cb + path: ${{ github.workspace }}/SourceCache/swift-corelibs-foundation + show-progress: false - uses: actions/checkout@v4 with: repository: apple/swift-corelibs-xctest @@ -1210,6 +1648,7 @@ jobs: show-progress: false - uses: compnerd/gha-setup-vsdevenv@main + if: matrix.os == 'Windows' with: host_arch: amd64 components: 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64;Microsoft.VisualStudio.Component.VC.Tools.ARM64' @@ -1223,17 +1662,37 @@ jobs: release-asset-name: installer-amd64.exe release-tag-name: '20231016.0' + - name: Download Android NDK + if: matrix.os == 'Android' + run: | + $NDKURL = "https://dl.google.com/android/repository/android-ndk-r26b-windows.zip" + $NDKHash = "A478D43D4A45D0D345CDA6BE50D79642B92FB175868D9DC0DFC86181D80F691E" + curl.exe -sL $NDKURL -o $env:TEMP\android-ndk-r26b-windows.zip + $SHA256 = Get-FileHash -Path $env:TEMP\android-ndk-r26b-windows.zip -Algorithm SHA256 + if ($SHA256.Hash -ne $NDKHash) { + throw "NDK SHA256 mismatch ($($SHA256.Hash) vs $$NDKHash)" + } + + Expand-Archive -Path $env:TEMP\android-ndk-r26b-windows.zip -DestinationPath ${{ github.workspace }}\BuildRoot\Library -Force + - name: Configure LLVM run: | + $NINJA_PATH = "$(& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -products * -nologo -latest -property installationPath)\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe" + $CLANG_CL = "cl" + $NDKPATH = cygpath -m ${{ github.workspace }}/BuildRoot/Library/android-ndk-r26b + Remove-Item env:\SDKROOT cmake -B ${{ github.workspace }}/BinaryCache/llvm ` -D CMAKE_BUILD_TYPE=Release ` - -D CMAKE_C_COMPILER=cl ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` - -D CMAKE_CXX_COMPILER=cl ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_C_COMPILER=${{ matrix.cc }} ` + -D CMAKE_C_FLAGS="${{ matrix.cflags }}" ` + -D CMAKE_CXX_COMPILER=${{ matrix.cxx }} ` + -D CMAKE_CXX_FLAGS="${{ matrix.cxxflags }}" ` -D CMAKE_MT=mt ` - -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr ` + -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/${{ matrix.os }}.platform/Developer/SDKs/${{ matrix.os }}.sdk/usr ` + -D CMAKE_SYSTEM_NAME=${{ matrix.os }} ` + ${{ matrix.llvm_flags }} ` + ${{ matrix.extra_flags }} ` -G Ninja ` -S ${{ github.workspace }}/SourceCache/llvm-project/llvm ` -D LLVM_ENABLE_ASSERTIONS=YES @@ -1243,26 +1702,34 @@ jobs: # Workaround CMake 3.20 issue $CLANG_CL = cygpath -m ${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr/bin/clang-cl.exe + $SWIFTC = cygpath -m ${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr/bin/swiftc.exe + $NDKPATH = cygpath -m ${{ github.workspace }}/BuildRoot/Library/android-ndk-r26b + $NINJA_PATH = "$(& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -products * -nologo -latest -property installationPath)\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe" + + $CMAKE_CPU = if ("${{ matrix.cpu }}" -eq "armv7") { "armv7-a" } else { "${{ matrix.cpu }}" } + Remove-Item env:\SDKROOT cmake -B ${{ github.workspace }}/BinaryCache/swift ` - -C ${{ github.workspace }}/SourceCache/swift/cmake/caches/Runtime-Windows-${{ matrix.cpu }}.cmake ` + -C ${{ github.workspace }}/SourceCache/swift/cmake/caches/Runtime-${{ matrix.os }}-${{ matrix.cpu }}.cmake ` -D CMAKE_BUILD_TYPE=Release ` - -D CMAKE_C_COMPILER=${CLANG_CL} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` + -D CMAKE_C_COMPILER=${{ matrix.cc }} ` + -D CMAKE_C_FLAGS="${{ matrix.cflags }}" ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_CXX_COMPILER=${CLANG_CL} ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_COMPILER=${{ matrix.cxx }} ` + -D CMAKE_CXX_FLAGS="${{ matrix.cxxflags }}" ` -D CMAKE_CXX_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_EXE_LINKER_FLAGS="${{ needs.context.outputs.CMAKE_EXE_LINKER_FLAGS }}" ` -D CMAKE_MT=mt ` - -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr ` - -D CMAKE_SHARED_LINKER_FLAGS="${{ needs.context.outputs.CMAKE_SHARED_LINKER_FLAGS }}" ` - -D CMAKE_SYSTEM_NAME=Windows ` - -D CMAKE_SYSTEM_PROCESSOR=${{ matrix.cpu }} ` - -D CMAKE_Swift_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_Swift_FLAGS="${{ needs.context.outputs.CMAKE_Swift_FLAGS }}" ` + -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/${{ matrix.os }}.platform/Developer/SDKs/${{ matrix.os }}.sdk/usr ` + -D CMAKE_SYSTEM_NAME=${{ matrix.os }} ` + -D CMAKE_SYSTEM_PROCESSOR=${CMAKE_CPU} ` + -D CMAKE_Swift_COMPILER=${SWIFTC} ` + -D CMAKE_Swift_COMPILER_WORKS=YES ` + -D CMAKE_Swift_COMPILER_TARGET=${{ matrix.triple_no_api_level }} ` + -D CMAKE_Swift_FLAGS="-resource-dir ${{ github.workspace }}/BinaryCache/swift/lib/swift ${{ matrix.swiftflags }}" ` -D MSVC_C_ARCHITECTURE_ID=${{ matrix.arch }} ` -D MSVC_CXX_ARCHITECTURE_ID=${{ matrix.arch }} ` + ${{ matrix.linker_flags }} ` + ${{ matrix.extra_flags }} ` -G Ninja ` -S ${{ github.workspace }}/SourceCache/swift ` -D LLVM_DIR=${{ github.workspace }}/BinaryCache/llvm/lib/cmake/llvm ` @@ -1273,6 +1740,7 @@ jobs: -D SWIFT_ENABLE_EXPERIMENTAL_OBSERVATION=YES ` -D SWIFT_ENABLE_EXPERIMENTAL_STRING_PROCESSING=YES ` -D SWIFT_ENABLE_SYNCHRONIZATION=YES ` + -D SWIFT_ENABLE_VOLATILE=YES ` -D SWIFT_NATIVE_SWIFT_TOOLS_PATH=${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr/bin ` -D SWIFT_PATH_TO_LIBDISPATCH_SOURCE=${{ github.workspace }}/SourceCache/swift-corelibs-libdispatch ` -D SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE=${{ github.workspace }}/SourceCache/swift-syntax ` @@ -1291,29 +1759,36 @@ jobs: # Workaround CMake 3.20 issue $CLANG_CL = cygpath -m ${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr/bin/clang-cl.exe $SWIFTC = cygpath -m ${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr/bin/swiftc.exe + $NDKPATH = cygpath -m ${{ github.workspace }}/BuildRoot/Library/android-ndk-r26b + $NINJA_PATH = "$(& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -products * -nologo -latest -property installationPath)\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe" + + $WIN_OVERLAY_PATH = cygpath -m ${{ github.workspace }}/BinaryCache/swift/stdlib/windows-vfs-overlay.yaml + $OVERLAY_FLAGS = if ("${{ matrix.os }}" -eq "Windows") { "-vfsoverlay ${WIN_OVERLAY_PATH} -strict-implicit-module-context -Xcc -Xclang -Xcc -fbuiltin-headers-in-system-modules" } else { "" } + + $CMAKE_CPU = if ("${{ matrix.cpu }}" -eq "armv7") { "armv7-a" } else { "${{ matrix.cpu }}" } Remove-Item env:\SDKROOT cmake -B ${{ github.workspace }}/BinaryCache/libdispatch ` -D BUILD_SHARED_LIBS=YES ` -D CMAKE_BUILD_TYPE=Release ` - -D CMAKE_C_COMPILER=${CLANG_CL} ` + -D CMAKE_C_COMPILER=${{ matrix.cc }} ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` - -D CMAKE_CXX_COMPILER=${CLANG_CL} ` + -D CMAKE_C_FLAGS="${{ matrix.cflags }}" ` + -D CMAKE_CXX_COMPILER=${{ matrix.cxx }} ` -D CMAKE_CXX_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ matrix.cxxflags }}" ` -D CMAKE_MT=mt ` - -D CMAKE_EXE_LINKER_FLAGS="${{ needs.context.outputs.CMAKE_EXE_LINKER_FLAGS }}" ` - -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr ` - -D CMAKE_SHARED_LINKER_FLAGS="${{ needs.context.outputs.CMAKE_SHARED_LINKER_FLAGS }}" ` - -D CMAKE_SWIFT_COMPILER=${SWIFTC} ` - -D CMAKE_Swift_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_Swift_FLAGS="-resource-dir ${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr/lib/swift -L${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr/lib/swift/windows -vfsoverlay ${{ github.workspace }}/BinaryCache/swift/stdlib/windows-vfs-overlay.yaml -strict-implicit-module-context -Xcc -Xclang -Xcc -fbuiltin-headers-in-system-modules ${{ needs.context.outputs.CMAKE_Swift_FLAGS }}" ` + -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/${{ matrix.os }}.platform/Developer/SDKs/${{ matrix.os }}.sdk/usr ` + -D CMAKE_Swift_COMPILER=${SWIFTC} ` + -D CMAKE_Swift_COMPILER_TARGET=${{ matrix.triple_no_api_level }} ` + -D CMAKE_Swift_FLAGS="-resource-dir ${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/${{ matrix.os }}.platform/Developer/SDKs/${{ matrix.os }}.sdk/usr/lib/swift -L${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/${{ matrix.os }}.platform/Developer/SDKs/${{ matrix.os }}.sdk/usr/lib/swift/${{ matrix.os }} ${OVERLAY_FLAGS} ${{ matrix.swiftflags }}" ` -D CMAKE_Swift_FLAGS_RELEASE="-O" ` - -D CMAKE_SYSTEM_NAME=Windows ` - -D CMAKE_SYSTEM_PROCESSOR=${{ matrix.cpu }} ` + -D CMAKE_SYSTEM_NAME=${{ matrix.os }} ` + -D CMAKE_SYSTEM_PROCESSOR=${CMAKE_CPU} ` -D MSVC_C_ARCHITECTURE_ID=${{ matrix.arch }} ` -D MSVC_CXX_ARCHITECTURE_ID=${{ matrix.arch }} ` + ${{ matrix.linker_flags }} ` + ${{ matrix.extra_flags }} ` -G Ninja ` -S ${{ github.workspace }}/SourceCache/swift-corelibs-libdispatch ` -D BUILD_TESTING=NO ` @@ -1328,6 +1803,21 @@ jobs: # Workaround CMake 3.20 issue $CLANG_CL = cygpath -m ${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr/bin/clang-cl.exe $SWIFTC = cygpath -m ${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr/bin/swiftc.exe + $NDKPATH = cygpath -m ${{ github.workspace }}/BuildRoot/Library/android-ndk-r26b + $NINJA_PATH = "$(& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -products * -nologo -latest -property installationPath)\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe" + + $WIN_OVERLAY_PATH = cygpath -m ${{ github.workspace }}/BinaryCache/swift/stdlib/windows-vfs-overlay.yaml + $OVERLAY_FLAGS = if ("${{ matrix.os }}" -eq "Windows") { "-vfsoverlay ${WIN_OVERLAY_PATH} -strict-implicit-module-context -Xcc -Xclang -Xcc -fbuiltin-headers-in-system-modules" } else { "" } + + $CMAKE_CPU = if ("${{ matrix.cpu }}" -eq "armv7") { "armv7-a" } else { "${{ matrix.cpu }}" } + $DEFINITION_FLAG = if ("${{ matrix.os }}" -eq "Windows") { "/D" } else { "-D" } + + $zlib_lib = if ("${{ matrix.os }}" -eq "Windows") { "zlibstatic.lib" } else { "libz.a" } + $xml_lib = if ("${{ matrix.os }}" -eq "Windows") { "libxml2s.lib" } else { "libxml2.a" } + $icu_data_lib_release = if ("${{ matrix.os }}" -eq "Windows") { "sicudt69.lib" } else { "libicudt69.a" } + $icu_i18n_lib_release = if ("${{ matrix.os }}" -eq "Windows") { "sicuuc69.lib" } else { "libicuin69.a" } + $icu_lib_release = if ("${{ matrix.os }}" -eq "Windows") { "sicuin69.lib" } else { "libicuuc69.a" } + $build_tools = if ("${{ matrix.os }}" -eq "Windows") { "YES" } else { "NO" } Remove-Item env:\SDKROOT cmake -B ${{ github.workspace }}/BinaryCache/foundation ` @@ -1335,38 +1825,41 @@ jobs: -D CMAKE_ASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL="/MD" ` -D CMAKE_ASM_FLAGS="--target=${{ matrix.triple }}" ` -D CMAKE_BUILD_TYPE=Release ` - -D CMAKE_C_COMPILER=${CLANG_CL} ` + -D CMAKE_C_COMPILER=${{ matrix.cc }} ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` - -D CMAKE_CXX_COMPILER=${CLANG_CL} ` + -D CMAKE_C_FLAGS="${{ matrix.cflags }}" ` + -D CMAKE_CXX_COMPILER=${{ matrix.cxx }} ` -D CMAKE_CXX_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` - -D CMAKE_EXE_LINKER_FLAGS="${{ needs.context.outputs.CMAKE_EXE_LINKER_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ matrix.cxxflags }}" ` + -D CMAKE_EXE_LINKER_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_EXE_LINKER_FLAGS }}" ` -D CMAKE_MT=mt ` - -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr ` - -D CMAKE_SHARED_LINKER_FLAGS="${{ needs.context.outputs.CMAKE_SHARED_LINKER_FLAGS }}" ` + -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/${{ matrix.os }}.platform/Developer/SDKs/${{ matrix.os }}.sdk/usr ` -D CMAKE_Swift_COMPILER=${SWIFTC} ` - -D CMAKE_Swift_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_Swift_FLAGS="-resource-dir ${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr/lib/swift -L${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr/lib/swift/windows -vfsoverlay ${{ github.workspace }}/BinaryCache/swift/stdlib/windows-vfs-overlay.yaml -strict-implicit-module-context -Xcc -Xclang -Xcc -fbuiltin-headers-in-system-modules ${{ needs.context.outputs.CMAKE_Swift_FLAGS }}" ` + -D CMAKE_Swift_COMPILER_TARGET=${{ matrix.triple_no_api_level }} ` + -D CMAKE_Swift_FLAGS="-resource-dir ${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/${{ matrix.os }}.platform/Developer/SDKs/${{ matrix.os }}.sdk/usr/lib/swift -L${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/${{ matrix.os }}.platform/Developer/SDKs/${{ matrix.os }}.sdk/usr/lib/swift/${{ matrix.os }} ${OVERLAY_FLAGS} ${{ matrix.swiftflags }}" ` -D CMAKE_Swift_FLAGS_RELEASE="-O" ` - -D CMAKE_SYSTEM_NAME=Windows ` - -D CMAKE_SYSTEM_PROCESSOR=${{ matrix.cpu }} ` + -D CMAKE_SYSTEM_NAME=${{ matrix.os }} ` + -D CMAKE_SYSTEM_PROCESSOR=${CMAKE_CPU} ` -D MSVC_C_ARCHITECTURE_ID=${{ matrix.arch }} ` -D MSVC_CXX_ARCHITECTURE_ID=${{ matrix.arch }} ` + ${{ matrix.linker_flags }} ` + ${{ matrix.extra_flags }} ` -G Ninja ` -S ${{ github.workspace }}/SourceCache/swift-corelibs-foundation ` -D dispatch_DIR=${{ github.workspace }}/BinaryCache/libdispatch/cmake/modules ` -D CURL_DIR=${{ github.workspace }}/BuildRoot/Library/curl-7.77.0/usr/lib/cmake/CURL ` + -D FOUNDATION_BUILD_TOOLS=${build_tools} ` -D ENABLE_TESTING=NO ` - -D ICU_DATA_LIBRARY_RELEASE=${{ github.workspace }}/BuildRoot/Library/icu-69.1/usr/lib/sicudt69.lib ` - -D ICU_I18N_LIBRARY_RELEASE=${{ github.workspace }}/BuildRoot/Library/icu-69.1/usr/lib/sicuin69.lib ` + -D ICU_DATA_LIBRARY_RELEASE=${{ github.workspace }}/BuildRoot/Library/icu-69.1/usr/lib/$icu_data_lib_release ` + -D ICU_I18N_LIBRARY_RELEASE=${{ github.workspace }}/BuildRoot/Library/icu-69.1/usr/lib/$icu_i18n_lib_release ` -D ICU_ROOT=${{ github.workspace }}/BuildRoot/Library/icu-69.1/usr ` - -D ICU_UC_LIBRARY_RELEASE=${{ github.workspace }}/BuildRoot/Library/icu-69.1/usr/lib/sicuuc69.lib ` - -D LIBXML2_DEFINITIONS="/DLIBXML_STATIC" ` + -D ICU_INCLUDE_DIR=${{ github.workspace }}/BuildRoot/Library/icu-69.1/usr/include ` + -D ICU_UC_LIBRARY_RELEASE=${{ github.workspace }}/BuildRoot/Library/icu-69.1/usr/lib/$icu_lib_release ` + -D LIBXML2_DEFINITIONS="${DEFINITION_FLAG}LIBXML_STATIC" ` -D LIBXML2_INCLUDE_DIR=${{ github.workspace }}/BuildRoot/Library/libxml2-2.11.5/usr/include/libxml2 ` - -D LIBXML2_LIBRARY=${{ github.workspace }}/BuildRoot/Library/libxml2-2.11.5/usr/lib/libxml2s.lib ` + -D LIBXML2_LIBRARY=${{ github.workspace }}/BuildRoot/Library/libxml2-2.11.5/usr/lib/$xml_lib ` -D ZLIB_ROOT=${{ github.workspace }}/BuildRoot/Library/zlib-1.3/usr ` - -D ZLIB_LIBRARY=${{ github.workspace }}/BuildRoot/Library/zlib-1.3/usr/lib/zlibstatic.lib + -D ZLIB_LIBRARY=${{ github.workspace }}/BuildRoot/Library/zlib-1.3/usr/lib/$zlib_lib - name: Build foundation run: | Remove-Item env:\SDKROOT @@ -1378,27 +1871,35 @@ jobs: # Workaround CMake 3.20 issue $CLANG_CL = cygpath -m ${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr/bin/clang-cl.exe $SWIFTC = cygpath -m ${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr/bin/swiftc.exe + $NDKPATH = cygpath -m ${{ github.workspace }}/BuildRoot/Library/android-ndk-r26b + $NINJA_PATH = "$(& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -products * -nologo -latest -property installationPath)\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe" + + $WIN_OVERLAY_PATH = cygpath -m ${{ github.workspace }}/BinaryCache/swift/stdlib/windows-vfs-overlay.yaml + $OVERLAY_FLAGS = if ("${{ matrix.os }}" -eq "Windows") { "-vfsoverlay ${WIN_OVERLAY_PATH} -strict-implicit-module-context -Xcc -Xclang -Xcc -fbuiltin-headers-in-system-modules" } else { "" } + + $CMAKE_CPU = if ("${{ matrix.cpu }}" -eq "armv7") { "armv7-a" } else { "${{ matrix.cpu }}" } Remove-Item env:\SDKROOT cmake -B ${{ github.workspace }}/BinaryCache/xctest ` -D BUILD_SHARED_LIBS=YES ` -D CMAKE_BUILD_TYPE=Release ` - -D CMAKE_C_COMPILER=${CLANG_CL} ` + -D CMAKE_BUILD_WITH_INSTALL_RPATH=YES ` + -D CMAKE_C_COMPILER=${{ matrix.cc }} ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` - -D CMAKE_CXX_COMPILER=${CLANG_CL} ` + -D CMAKE_C_FLAGS="${{ matrix.cflags }}" ` + -D CMAKE_CXX_COMPILER=${{ matrix.cxx }} ` -D CMAKE_CXX_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` - -D CMAKE_EXE_LINKER_FLAGS="${{ needs.context.outputs.CMAKE_EXE_LINKER_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ matrix.cxxflags }}" ` -D CMAKE_MT=mt ` - -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/Library/XCTest-development/usr ` - -D CMAKE_SHARED_LINKER_FLAGS="${{ needs.context.outputs.CMAKE_SHARED_LINKER_FLAGS }}" ` + -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/${{ matrix.os }}.platform/Developer/Library/XCTest-development/usr ` -D CMAKE_Swift_COMPILER=${SWIFTC} ` - -D CMAKE_Swift_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_Swift_FLAGS="-resource-dir ${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr/lib/swift -L${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr/lib/swift/windows -vfsoverlay ${{ github.workspace }}/BinaryCache/swift/stdlib/windows-vfs-overlay.yaml -strict-implicit-module-context -Xcc -Xclang -Xcc -fbuiltin-headers-in-system-modules ${{ needs.context.outputs.CMAKE_Swift_FLAGS }}" ` + -D CMAKE_Swift_COMPILER_TARGET=${{ matrix.triple_no_api_level }} ` + -D CMAKE_Swift_FLAGS="-resource-dir ${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/${{ matrix.os }}.platform/Developer/SDKs/${{ matrix.os }}.sdk/usr/lib/swift -L${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/${{ matrix.os }}.platform/Developer/SDKs/${{ matrix.os }}.sdk/usr/lib/swift/${{ matrix.os }} ${OVERLAY_FLAGS} ${{ matrix.swiftflags }}" ` -D CMAKE_Swift_FLAGS_RELEASE="-O" ` - -D CMAKE_SYSTEM_NAME=Windows ` - -D CMAKE_SYSTEM_PROCESSOR=${{ matrix.cpu }} ` + -D CMAKE_SYSTEM_NAME=${{ matrix.os }} ` + -D CMAKE_SYSTEM_PROCESSOR=${CMAKE_CPU} ` + ${{ matrix.linker_flags }} ` + ${{ matrix.extra_flags }} ` -G Ninja ` -S ${{ github.workspace }}/SourceCache/swift-corelibs-xctest ` -D dispatch_DIR=${{ github.workspace }}/BinaryCache/libdispatch/cmake/modules ` @@ -1429,12 +1930,12 @@ jobs: import os import plistlib - info_plist = r'${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Info.plist' + info_plist = r'${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/${{ matrix.os }}.platform/Info.plist' with open(os.path.normpath(info_plist), 'wb') as plist: # TODO(compnerd) derive this from the install directory plistlib.dump({ 'DefaultProperties': { 'XCTEST_VERSION': 'development', 'SWIFTC_FLAGS': ['-use-ld=lld'] } }, plist) - sdk_settings_plist = r'${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/SDKSettings.plist' + sdk_settings_plist = r'${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/${{ matrix.os }}.platform/Developer/SDKs/${{ matrix.os }}.sdk/SDKSettings.plist' with open(os.path.normpath(sdk_settings_plist), 'wb') as plist: # TODO(compnerd) derive this from the CMAKE_BUILD_TYPE for the # runtime. @@ -1442,12 +1943,12 @@ jobs: - uses: actions/upload-artifact@v4 with: - name: windows-sdk-${{ matrix.arch }} - path: ${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform + name: ${{ matrix.os }}-sdk-${{ matrix.arch }} + path: ${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/${{ matrix.os }}.platform - name: Upload PDBs to Azure uses: microsoft/action-publish-symbols@v2.1.6 - if: ${{ needs.context.outputs.debug_info }} + if: ${{ needs.context.outputs.debug_info && matrix.os == 'Windows' }} with: accountName: ${{ vars.SYMBOL_SERVER_ACCOUNT }} personalAccessToken: ${{ secrets.SYMBOL_SERVER_PAT }} @@ -1456,7 +1957,7 @@ jobs: - name: Upload DLLs to Azure uses: microsoft/action-publish-symbols@v2.1.6 - if: ${{ needs.context.outputs.debug_info }} + if: ${{ needs.context.outputs.debug_info && matrix.os == 'Windows' }} with: accountName: ${{ vars.SYMBOL_SERVER_ACCOUNT }} personalAccessToken: ${{ secrets.SYMBOL_SERVER_PAT }} @@ -1482,7 +1983,7 @@ jobs: steps: - uses: actions/download-artifact@v4 with: - name: sqlite-${{ matrix.arch }}-3.43.2 + name: sqlite-Windows-${{ matrix.arch }}-3.43.2 path: ${{ github.workspace }}/BuildRoot/Library/sqlite-3.43.2/usr - name: Download Compilers uses: actions/download-artifact@v4 @@ -1491,12 +1992,12 @@ jobs: path: ${{ github.workspace }}/BuildRoot/Library - uses: actions/download-artifact@v4 with: - name: windows-sdk-amd64 + name: Windows-sdk-amd64 path: ${{ github.workspace }}/BinaryCache - name: Download SDK uses: actions/download-artifact@v4 with: - name: windows-sdk-${{ matrix.arch }} + name: Windows-sdk-${{ matrix.arch }} path: ${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform - name: Downlaod swift-syntax uses: actions/download-artifact@v4 @@ -1648,10 +2149,10 @@ jobs: -D CMAKE_BUILD_TYPE=Release ` -D CMAKE_C_COMPILER=${CLANG_CL} ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` + -D CMAKE_C_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }}" ` -D CMAKE_CXX_COMPILER=${CLANG_CL} ` -D CMAKE_CXX_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }}" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot-DevTools/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr ` -D CMAKE_Swift_COMPILER=${SWIFTC} ` @@ -1678,10 +2179,10 @@ jobs: -D CMAKE_BUILD_TYPE=Release ` -D CMAKE_C_COMPILER=${CLANG_CL} ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` + -D CMAKE_C_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }}" ` -D CMAKE_CXX_COMPILER=${CLANG_CL} ` -D CMAKE_CXX_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }}" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot-DevTools/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr ` -D CMAKE_Swift_COMPILER=${SWIFTC} ` @@ -1707,10 +2208,10 @@ jobs: -D CMAKE_BUILD_TYPE=Release ` -D CMAKE_C_COMPILER=cl ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` + -D CMAKE_C_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }}" ` -D CMAKE_CXX_COMPILER=cl ` -D CMAKE_CXX_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }}" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot-DevTools/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr ` -D CMAKE_Swift_COMPILER=${SWIFTC} ` @@ -1736,10 +2237,10 @@ jobs: -D CMAKE_BUILD_TYPE=Release ` -D CMAKE_C_COMPILER=cl ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` + -D CMAKE_C_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }}" ` -D CMAKE_CXX_COMPILER=cl ` -D CMAKE_CXX_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }}" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot-DevTools/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr ` -D CMAKE_Swift_COMPILER=${SWIFTC} ` @@ -1765,10 +2266,10 @@ jobs: -D CMAKE_BUILD_TYPE=Release ` -D CMAKE_C_COMPILER=cl ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` + -D CMAKE_C_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }}" ` -D CMAKE_CXX_COMPILER=cl ` -D CMAKE_CXX_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }}" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot-DevTools/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr ` -D CMAKE_Swift_COMPILER=${SWIFTC} ` @@ -1798,10 +2299,10 @@ jobs: -D CMAKE_BUILD_TYPE=Release ` -D CMAKE_C_COMPILER=${CLANG_CL} ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` + -D CMAKE_C_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }}" ` -D CMAKE_CXX_COMPILER=${CLANG_CL} ` -D CMAKE_CXX_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }}" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot-DevTools/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr ` -D CMAKE_Swift_COMPILER=${SWIFTC} ` @@ -1828,10 +2329,10 @@ jobs: -D CMAKE_BUILD_TYPE=Release ` -D CMAKE_C_COMPILER=${CLANG_CL} ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` + -D CMAKE_C_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }}" ` -D CMAKE_CXX_COMPILER=${CLANG_CL} ` -D CMAKE_CXX_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }}" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot-DevTools/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr ` -D CMAKE_Swift_COMPILER=${SWIFTC} ` @@ -1861,10 +2362,10 @@ jobs: -D CMAKE_BUILD_TYPE=Release ` -D CMAKE_C_COMPILER=${CLANG_CL} ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` + -D CMAKE_C_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }}" ` -D CMAKE_CXX_COMPILER=${CLANG_CL} ` -D CMAKE_CXX_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }}" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot-DevTools/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr ` -D CMAKE_Swift_COMPILER=${SWIFTC} ` @@ -1948,10 +2449,10 @@ jobs: -D CMAKE_BUILD_TYPE=Release ` -D CMAKE_C_COMPILER=${CLANG_CL} ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` + -D CMAKE_C_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }}" ` -D CMAKE_CXX_COMPILER=${CLANG_CL} ` -D CMAKE_CXX_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }}" ` + -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }}" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot-DevTools/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr ` -D CMAKE_Swift_COMPILER=${SWIFTC} ` @@ -1991,7 +2492,7 @@ jobs: -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot-DevTools/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr ` -D CMAKE_C_COMPILER=${CLANG_CL} ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` + -D CMAKE_C_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }}" ` -D CMAKE_Swift_COMPILER=${SWIFTC} ` -D CMAKE_Swift_COMPILER_TARGET=${{ matrix.triple }} ` -D CMAKE_Swift_COMPILER_WORKS=YES ` @@ -2018,7 +2519,7 @@ jobs: -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot-DevTools/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr ` -D CMAKE_C_COMPILER=${CLANG_CL} ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }}" ` + -D CMAKE_C_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }}" ` -D CMAKE_Swift_COMPILER=${SWIFTC} ` -D CMAKE_Swift_COMPILER_TARGET=${{ matrix.triple }} ` -D CMAKE_Swift_COMPILER_WORKS=YES ` @@ -2047,10 +2548,10 @@ jobs: -D CMAKE_BUILD_TYPE=Release ` -D CMAKE_C_COMPILER=${CLANG_CL} ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }} -Xclang -fno-split-cold-code" ` + -D CMAKE_C_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} -Xclang -fno-split-cold-code" ` -D CMAKE_CXX_COMPILER=${CLANG_CL} ` -D CMAKE_CXX_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }} -Xclang -fno-split-cold-code -I ${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr/include -I ${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr/include/Block" ` + -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} -Xclang -fno-split-cold-code -I ${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr/include -I ${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr/include/Block" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot-DevTools/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr ` -D CMAKE_Swift_COMPILER=${SWIFTC} ` @@ -2077,10 +2578,10 @@ jobs: -D CMAKE_BUILD_TYPE=Release ` -D CMAKE_C_COMPILER=${CLANG_CL} ` -D CMAKE_C_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_C_FLAGS="${{ needs.context.outputs.CMAKE_C_FLAGS }} -Xclang -fno-split-cold-code" ` + -D CMAKE_C_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_C_FLAGS }} -Xclang -fno-split-cold-code" ` -D CMAKE_CXX_COMPILER=${CLANG_CL} ` -D CMAKE_CXX_COMPILER_TARGET=${{ matrix.triple }} ` - -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.CMAKE_CXX_FLAGS }} -Xclang -fno-split-cold-code" ` + -D CMAKE_CXX_FLAGS="${{ needs.context.outputs.WINDOWS_CMAKE_CXX_FLAGS }} -Xclang -fno-split-cold-code" ` -D CMAKE_MT=mt ` -D CMAKE_INSTALL_PREFIX=${{ github.workspace }}/BuildRoot-DevTools/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr ` -D CMAKE_Swift_COMPILER=${SWIFTC} ` @@ -2189,7 +2690,7 @@ jobs: - name: Download Windows SDK (AMD64) uses: actions/download-artifact@v4 with: - name: windows-sdk-amd64 + name: Windows-sdk-amd64 path: ${{ github.workspace }}/BinaryCache/ - name: Copy Windows SDK (AMD64) to BuildRoot @@ -2225,7 +2726,7 @@ jobs: if: ${{ matrix.arch != 'amd64' }} uses: actions/download-artifact@v4 with: - name: windows-sdk-${{ matrix.arch }} + name: Windows-sdk-${{ matrix.arch }} path: ${{ github.workspace }}/BuildRoot/ - name: Patch the SDK to workaround https://github.com/thebrowsercompany/swift-build#50 @@ -2449,7 +2950,7 @@ jobs: steps: - uses: actions/download-artifact@v4 with: - name: windows-sdk-${{ matrix.arch }} + name: Windows-sdk-${{ matrix.arch }} path: ${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform - uses: actions/checkout@v4 @@ -2521,8 +3022,74 @@ jobs: ${{ github.workspace }}/BinaryCache/installer/Release/${{ matrix.arch }}/rtl.${{ matrix.arch }}.msm ${{ github.workspace }}/BinaryCache/installer/Release/${{ matrix.arch }}/rtl.${{ matrix.arch }}.cab + package_android_sdk: + name: Package Android SDK + needs: [context, sdk] + runs-on: ${{ needs.context.outputs.windows_build_runner }} + + strategy: + fail-fast: false + matrix: + include: + - arch: arm64 + cpu: aarch64 + - arch: x86_64 + cpu: x86_64 + - arch: armv7 + cpu: armv7 + - arch: i686 + cpu: i686 + + steps: + - uses: actions/download-artifact@v4 + with: + name: Android-sdk-${{ matrix.arch }} + path: ${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Android.platform + + - uses: actions/checkout@v4 + with: + repository: apple/swift-installer-scripts + ref: ${{ needs.context.outputs.swift_installer_scripts_revision }} + path: ${{ github.workspace }}/SourceCache/swift-installer-scripts + show-progress: false + + - uses: compnerd/gha-setup-vsdevenv@main + with: + host_arch: amd64 + components: 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64;Microsoft.VisualStudio.Component.VC.Tools.ARM64' + arch: ${{ matrix.arch }} + + - run: | + $CertificatePath = Join-Path -Path ${env:RUNNER_TEMP} -ChildPath CodeSign.b64 + $PFXPath = Join-Path -Path ${env:RUNNER_TEMP} -ChildPath CodeSign.pfx + Set-Content -Path $CertificatePath -Value '${{ secrets.CERTIFICATE }}' + certutil.exe -decode $CertificatePath $PFXPath + Write-Output CERTIFICATE=$PFXPath | Out-File -FilePath ${env:GITHUB_ENV} -Encoding utf8 -Append + if: ${{ needs.context.outputs.signed }} + + - name: Package SDK + run: | + msbuild -nologo -restore -maxCpuCount ` + -p:BaseOutputPath=${{ github.workspace }}\BinaryCache\installer\ ` + -p:Configuration=Release ` + -p:SignOutput=${{ needs.context.outputs.signed }} ` + -p:CERTIFICATE=${env:CERTIFICATE} ` + -p:PASSPHRASE=${{ secrets.PASSPHRASE }} ` + -p:PLATFORM_ROOT=${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Android.platform ` + -p:SDK_ROOT=${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Android.platform/Developer/SDKs/Android.sdk ` + -p:ProductVersion=${{ needs.context.outputs.swift_version }} ` + -p:ProductArchitecture=${{ matrix.cpu }} ` + ${{ github.workspace }}/SourceCache/swift-installer-scripts/platforms/Windows/android_sdk/android_sdk.wixproj + + - uses: actions/upload-artifact@v4 + with: + name: sdk-android-${{ matrix.arch }}-msi + path: | + ${{ github.workspace }}/BinaryCache/installer/Release/${{ matrix.cpu }}/android_sdk.${{ matrix.cpu }}.msi + ${{ github.workspace }}/BinaryCache/installer/Release/${{ matrix.cpu }}/android_sdk.${{ matrix.cpu }}.cab + installer: - needs: [context, package_tools, package_sdk_runtime] + needs: [context, package_tools, package_sdk_runtime, package_android_sdk] runs-on: ${{ needs.context.outputs.windows_build_runner }} strategy: @@ -2577,6 +3144,22 @@ jobs: with: name: sdk-windows-arm64-msi path: ${{ github.workspace }}/BinaryCache/installer/Release/arm64 + - uses: actions/download-artifact@v4 + with: + name: sdk-android-arm64-msi + path: ${{ github.workspace }}/BinaryCache/installer/Release/aarch64 + - uses: actions/download-artifact@v4 + with: + name: sdk-android-x86_64-msi + path: ${{ github.workspace }}/BinaryCache/installer/Release/x86_64 + - uses: actions/download-artifact@v4 + with: + name: sdk-android-armv7-msi + path: ${{ github.workspace }}/BinaryCache/installer/Release/armv7 + - uses: actions/download-artifact@v4 + with: + name: sdk-android-i686-msi + path: ${{ github.workspace }}/BinaryCache/installer/Release/i686 - uses: actions/checkout@v4 with: @@ -2626,6 +3209,10 @@ jobs: -p:INCLUDE_AMD64_SDK=true ` -p:INCLUDE_X86_SDK=true ` -p:INCLUDE_ARM64_SDK=true ` + -p:INCLUDE_ARM64_ANDROID_SDK=true ` + -p:INCLUDE_x86_64_ANDROID_SDK=true ` + -p:INCLUDE_ARM_ANDROID_SDK=true ` + -p:INCLUDE_X86_ANDROID_SDK=true ` -p:ProductArchitecture=${{ matrix.arch }} ` -p:ProductVersion=${{ needs.context.outputs.swift_version }}-${{ needs.context.outputs.swift_tag }} ` ${{ github.workspace }}/SourceCache/swift-installer-scripts/platforms/Windows/bundle/installer.wixproj