Skip to content

Commit a0acc3d

Browse files
kendalharlandkendalcompnerd
authored
Fix arm64 build for swift-inspect
Add support to cross-compile swift-inspect for ARM64. This brings us closer to parity across the host architectures. Co-authored-by: kendal <[email protected]> Co-authored-by: Saleem Abdulrasool <[email protected]>
1 parent 14cae34 commit a0acc3d

File tree

1 file changed

+77
-52
lines changed

1 file changed

+77
-52
lines changed

.github/workflows/swift-toolchain.yml

Lines changed: 77 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2121,12 +2121,11 @@ jobs:
21212121
symbolsFolder: ${{ github.workspace }}/BinaryCache
21222122
searchPattern: '**/*.exe'
21232123

2124+
21242125
debugging_tools:
21252126
name: Debugging Tools
21262127
needs: [context, compilers, devtools, sdk]
21272128
runs-on: ${{ needs.context.outputs.windows_build_runner }}
2128-
env:
2129-
TOOLCHAIN_PATH: ${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr/bin
21302129

21312130
strategy:
21322131
fail-fast: false
@@ -2135,42 +2134,85 @@ jobs:
21352134
- arch: amd64
21362135
cpu: x86_64
21372136
triple: x86_64-unknown-windows-msvc
2138-
2139-
# TODO(thebrowsercompany/swift-build#125): Fix the layout of SDK files so we can cross-compile to arm64
2140-
# - arch: arm64
2141-
# cpu: aarch64
2142-
# triple: aarch64-unknown-windows-msvc
2137+
- arch: arm64
2138+
cpu: aarch64
2139+
triple: aarch64-unknown-windows-msvc
21432140

21442141
steps:
2145-
- name: Download compilers
2142+
- name: Download build compilers
21462143
uses: actions/download-artifact@v4
21472144
with:
21482145
name: compilers-amd64
2149-
path: ${{ github.workspace }}/BuildRoot/Library
2146+
path: ${{ github.workspace }}/BuildRoot/
21502147

2151-
- name: Download devtools
2148+
- name: Download build devtools
21522149
uses: actions/download-artifact@v4
21532150
with:
21542151
name: devtools-amd64
2155-
path: ${{ github.workspace }}/BuildRoot/Library
2152+
path: ${{ github.workspace }}/BuildRoot/
21562153

2157-
- name: Download cmark-gfm-amd64
2154+
# We're using the runtime libraries from this one.
2155+
- name: Download Windows SDK (AMD64)
21582156
uses: actions/download-artifact@v4
21592157
with:
2160-
name: cmark-gfm-amd64-0.29.0.gfm.13
2161-
path: ${{ github.workspace }}/BuildRoot/Library/cmark-gfm-0.29.0.gfm.13/usr
2158+
name: windows-sdk-amd64
2159+
path: ${{ github.workspace }}/BinaryCache/
21622160

2163-
- name: Download amd64 Windows Runtime
2161+
- name: Download Windows SDK (AMD64)
21642162
uses: actions/download-artifact@v4
21652163
with:
21662164
name: windows-sdk-amd64
2167-
path: ${{ github.workspace }}/BinaryCache
2165+
path: ${{ github.workspace }}/BuildRoot/
2166+
2167+
- name: Update environment variables
2168+
run: |
2169+
$SDKRoot = cygpath -w "${{ github.workspace }}/BuildRoot/Developer/SDKs/Windows.sdk"
2170+
$ToolchainPath = cygpath -w "${{ github.workspace }}/BuildRoot/Developer/Toolchains/unknown-Asserts-development.xctoolchain/usr/bin"
2171+
$RTLPath = cygpath -w "${{ github.workspace }}/BinaryCache/Developer/SDKs/Windows.sdk/usr/bin"
2172+
2173+
echo "SDKROOT=${SDKRoot}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
2174+
echo "TOOLCHAIN_PATH=${ToolchainPath}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
2175+
echo "AR=${ToolchainPath}\llvm-ar.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
2176+
echo "${ToolchainPath}" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
2177+
echo "${RTLPath}" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
2178+
2179+
- name: Patch the SDK to workaround https://github.com/thebrowsercompany/swift-build#50
2180+
run: |
2181+
mv ${{ env.SDKROOT }}/usr/lib/swift/dispatch ${{ env.SDKROOT }}/usr/include/
2182+
mv ${{ env.SDKROOT }}/usr/lib/swift/os ${{ env.SDKROOT }}/usr/include/
2183+
mv ${{ env.SDKROOT }}/usr/lib/swift/Block ${{ env.SDKROOT }}/usr/include/
2184+
2185+
mv ${{ env.SDKROOT }}/usr/lib/swift/windows/BlocksRuntime.lib ${{ env.SDKROOT }}/usr/lib/swift/windows/x86_64/
2186+
mv ${{ env.SDKROOT }}/usr/lib/swift/windows/dispatch.lib ${{ env.SDKROOT }}/usr/lib/swift/windows/x86_64/
2187+
mv ${{ env.SDKROOT }}/usr/lib/swift/windows/swiftDispatch.lib ${{ env.SDKROOT }}/usr/lib/swift/windows/x86_64/
2188+
mv ${{ env.SDKROOT }}/usr/lib/swift/windows/Foundation.lib ${{ env.SDKROOT }}/usr/lib/swift/windows/x86_64/
2189+
mv ${{ env.SDKROOT }}/usr/lib/swift/windows/FoundationXML.lib ${{ env.SDKROOT }}/usr/lib/swift/windows/x86_64/
2190+
mv ${{ env.SDKROOT }}/usr/lib/swift/windows/FoundationNetworking.lib ${{ env.SDKROOT }}/usr/lib/swift/windows/x86_64/
21682191
21692192
- name: Download ${{ matrix.arch }} Windows SDK
2193+
# Only necessary when cross-compiling
2194+
if: ${{ matrix.arch != 'amd64' }}
21702195
uses: actions/download-artifact@v4
21712196
with:
21722197
name: windows-sdk-${{ matrix.arch }}
2173-
path: ${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform
2198+
path: ${{ github.workspace }}/BuildRoot/
2199+
2200+
- name: Patch the SDK to workaround https://github.com/thebrowsercompany/swift-build#50
2201+
# Only necessary when cross-compiling
2202+
if: ${{ matrix.arch != 'amd64' }}
2203+
run: |
2204+
# We already copied these above.
2205+
# Remove them to prevent 'module defined more than once' errors.
2206+
rm -Force -Recurse ${{ env.SDKROOT }}/usr/lib/swift/dispatch
2207+
rm -Force -Recurse ${{ env.SDKROOT }}/usr/lib/swift/os
2208+
rm -Force -Recurse ${{ env.SDKROOT }}/usr/lib/swift/Block
2209+
2210+
mv -Force ${{ env.SDKROOT }}/usr/lib/swift/windows/BlocksRuntime.lib ${{ env.SDKROOT }}/usr/lib/swift/windows/${{ matrix.cpu }}/
2211+
mv -Force ${{ env.SDKROOT }}/usr/lib/swift/windows/dispatch.lib ${{ env.SDKROOT }}/usr/lib/swift/windows/${{ matrix.cpu }}/
2212+
mv -Force ${{ env.SDKROOT }}/usr/lib/swift/windows/swiftDispatch.lib ${{ env.SDKROOT }}/usr/lib/swift/windows/${{ matrix.cpu }}/
2213+
mv -Force ${{ env.SDKROOT }}/usr/lib/swift/windows/Foundation.lib ${{ env.SDKROOT }}/usr/lib/swift/windows/${{ matrix.cpu }}/
2214+
mv -Force ${{ env.SDKROOT }}/usr/lib/swift/windows/FoundationXML.lib ${{ env.SDKROOT }}/usr/lib/swift/windows/${{ matrix.cpu }}/
2215+
mv -Force ${{ env.SDKROOT }}/usr/lib/swift/windows/FoundationNetworking.lib ${{ env.SDKROOT }}/usr/lib/swift/windows/${{ matrix.cpu }}/
21742216
21752217
- name: Checkout apple/swift
21762218
uses: actions/checkout@v4
@@ -2180,49 +2222,32 @@ jobs:
21802222
path: ${{ github.workspace }}/SourceCache/swift
21812223
show-progress: false
21822224

2225+
# Note: We didn't need to explicitly download cmark-gfm above because it's packaged inside
2226+
# compilers-${{ matrix.arch }}.
21832227
- name: Setup cmark-gfm
2184-
run: Copy-Item ${{ github.workspace }}/BuildRoot/Library/cmark-gfm-0.29.0.gfm.13/usr/bin/*.dll ${env:TOOLCHAIN_PATH}
2185-
2186-
- name: Add runtime libraries to path
2187-
run: |
2188-
$RTLPath = cygpath -w ${{ github.workspace }}/BinaryCache/Developer/SDKs/Windows.sdk/usr/bin
2189-
echo ${RTLPath} | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
2190-
2191-
- name: Add Toolchain to path
2192-
run: |
2193-
echo ${env:TOOLCHAIN_PATH} | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
2194-
2195-
- uses: compnerd/gha-setup-vsdevenv@main
2196-
with:
2197-
host_arch: amd64
2198-
components: 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64;Microsoft.VisualStudio.Component.VC.Tools.ARM64'
2199-
arch: ${{ matrix.arch }}
2200-
2201-
# TODO(thebrowsercompany/swift-build#50): Workaround a file layout bug in the Windows SDK.
2202-
- name: Patch SDK file layout
2203-
run: |
2204-
$env:SDKROOT="${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk"
2205-
mv ${env:SDKROOT}/usr/lib/swift/dispatch ${env:SDKROOT}/usr/include/
2206-
mv ${env:SDKROOT}/usr/lib/swift/os ${env:SDKROOT}/usr/include/
2207-
mv ${env:SDKROOT}/usr/lib/swift/Block ${env:SDKROOT}/usr/include/
2208-
mv ${env:SDKROOT}/usr/lib/swift/windows/BlocksRuntime.lib ${env:SDKROOT}/usr/lib/swift/windows/${{ matrix.cpu }}/
2209-
mv ${env:SDKROOT}/usr/lib/swift/windows/dispatch.lib ${env:SDKROOT}/usr/lib/swift/windows/${{ matrix.cpu }}/
2210-
mv ${env:SDKROOT}/usr/lib/swift/windows/swiftDispatch.lib ${env:SDKROOT}/usr/lib/swift/windows/${{ matrix.cpu }}/
2211-
mv ${env:SDKROOT}/usr/lib/swift/windows/Foundation.lib ${env:SDKROOT}/usr/lib/swift/windows/${{ matrix.cpu }}/
2212-
mv ${env:SDKROOT}/usr/lib/swift/windows/FoundationXML.lib ${env:SDKROOT}/usr/lib/swift/windows/${{ matrix.cpu }}/
2213-
mv ${env:SDKROOT}/usr/lib/swift/windows/FoundationNetworking.lib ${env:SDKROOT}/usr/lib/swift/windows/${{ matrix.cpu }}/
2228+
run: Copy-Item ${{ github.workspace }}/BuildRoot/cmark-gfm-0.29.0.gfm.13/usr/bin/*.dll ${{ env.TOOLCHAIN_PATH }}
22142229

22152230
- name: Build swift-inspect
2231+
id: swift_inspect
2232+
shell: cmd
22162233
run: |
2217-
$env:SDKROOT="${{ github.workspace }}/BuildRoot/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk"
2218-
# TODO(kendal): Figure out why Powershell won't execute this command when it's split into multiple lines.
2219-
swift build --triple=${{ matrix.triple }} --scratch-path="${{ github.workspace }}/BinaryCache/${{ matrix.arch }}/swift-inspect" --sdk="${env:SDKROOT}" --package-path="${{ github.workspace }}/SourceCache/swift/tools/swift-inspect" -c="release" -Xbuild-tools-swiftc="-I${env:SDKROOT}/usr/lib/swift" -Xbuild-tools-swiftc="-L${env:SDKROOT}/usr/lib/swift/windows" -Xcc="-I${env:SDKROOT}/usr/lib/swift" -Xlinker="-L${env:SDKROOT}/usr/lib/swift/windows" -debug-info-format="none" -Xcc="-I${env:SDKROOT}/usr/include/swift/SwiftRemoteMirror" -Xlinker="${env:SDKROOT}/usr/lib/swift/windows/${{ matrix.cpu }}/swiftRemoteMirror.lib"
2234+
swift build ^
2235+
--triple=${{ matrix.triple }} ^
2236+
--scratch-path="${{ github.workspace }}/BinaryCache/${{ matrix.arch }}/swift-inspect" ^
2237+
--sdk="${{ env.SDKROOT }}" ^
2238+
--package-path="${{ github.workspace }}/SourceCache/swift/tools/swift-inspect" ^
2239+
-c="release" ^
2240+
-Xbuild-tools-swiftc="-L${{ env.SDKROOT }}/usr/lib/swift/windows" ^
2241+
-Xbuild-tools-swiftc="-I${{ env.SDKROOT }}/usr/lib/swift -use-ld=lld" ^
2242+
-Xcc="-I${{ env.SDKROOT }}/usr/include/swift/SwiftRemoteMirror" ^
2243+
-Xlinker="${{ env.SDKROOT }}/usr/lib/swift/windows/${{ matrix.cpu }}/swiftRemoteMirror.lib" ^
2244+
-Xswiftc="-use-ld=lld"
22202245
22212246
- name: Copy swift-inspect executable
2222-
id: copy-swift-inspect-exe
22232247
run: |
22242248
New-Item -Path ${{ github.workspace }}/BuildRoot-DebuggingTools/swift-inspect -ItemType Directory -Force | Out-Null
2225-
Copy-Item ${{ github.workspace }}/BinaryCache/${{ matrix.arch }}/swift-inspect/${{ matrix.triple }}/release/swift-inspect.exe -Destination ${{ github.workspace }}/BuildRoot-DebuggingTools/swift-inspect
2249+
$SwiftInspectPath="${{ github.workspace }}/BinaryCache/${{ matrix.arch }}/swift-inspect/${{ matrix.triple }}/release/swift-inspect.exe"
2250+
Copy-Item ${SwiftInspectPath} -Destination "${{ github.workspace }}/BuildRoot-DebuggingTools/swift-inspect/"
22262251
22272252
- uses: actions/upload-artifact@v4
22282253
with:

0 commit comments

Comments
 (0)