diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index e9b9bd21f0..a8d54eb1b4 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -39,7 +39,7 @@ jobs: run: sh ci/aarch64-linux-release.sh x86_64-macos: runs-on: "macos-11" - env: + env: ARCH: "x86_64" steps: - name: Checkout @@ -48,7 +48,7 @@ jobs: run: ci/x86_64-macos.sh aarch64-macos: runs-on: [self-hosted, macOS, aarch64] - env: + env: ARCH: "aarch64" steps: - name: Checkout @@ -64,3 +64,12 @@ jobs: uses: actions/checkout@v3 - name: Build and Test run: ci/x86_64-windows.ps1 + aarch64-windows: + runs-on: [self-hosted, Windows, aarch64] + env: + ARCH: "aarch64" + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Build and Test + run: ci/aarch64-windows.ps1 diff --git a/ci/aarch64-windows.ps1 b/ci/aarch64-windows.ps1 new file mode 100644 index 0000000000..5d7da61985 --- /dev/null +++ b/ci/aarch64-windows.ps1 @@ -0,0 +1,74 @@ +$TARGET = "$($Env:ARCH)-windows-gnu" +$ZIG_LLVM_CLANG_LLD_NAME = "zig+llvm+lld+clang-$TARGET-0.11.0-dev.670+f7fea080b" +$MCPU = "baseline" +$ZIG_LLVM_CLANG_LLD_URL = "https://ziglang.org/deps/$ZIG_LLVM_CLANG_LLD_NAME.zip" +$PREFIX_PATH = "$(Get-Location)\..\$ZIG_LLVM_CLANG_LLD_NAME" +$ZIG = "$PREFIX_PATH\bin\zig.exe" +$ZIG_LIB_DIR = "$(Get-Location)\lib" + +if (!(Test-Path "..\$ZIG_LLVM_CLANG_LLD_NAME.zip")) { + Write-Output "Downloading $ZIG_LLVM_CLANG_LLD_URL" + Invoke-WebRequest -Uri "$ZIG_LLVM_CLANG_LLD_URL" -OutFile "..\$ZIG_LLVM_CLANG_LLD_NAME.zip" + + Write-Output "Extracting..." + Add-Type -AssemblyName System.IO.Compression.FileSystem ; + [System.IO.Compression.ZipFile]::ExtractToDirectory("$PWD\..\$ZIG_LLVM_CLANG_LLD_NAME.zip", "$PWD\..") +} + +function CheckLastExitCode { + if (!$?) { + exit 1 + } + return 0 +} + +# Make the `zig version` number consistent. +# This will affect the `zig build` command below which uses `git describe`. +git config core.abbrev 9 +git fetch --tags + +if ((git rev-parse --is-shallow-repository) -eq "true") { + git fetch --unshallow # `git describe` won't work on a shallow repo +} + +Write-Output "Building from source..." +Remove-Item -Path 'build-release' -Recurse -Force -ErrorAction Ignore +New-Item -Path 'build-release' -ItemType Directory +Set-Location -Path 'build-release' + +# CMake gives a syntax error when file paths with backward slashes are used. +# Here, we use forward slashes only to work around this. +& cmake .. ` + -GNinja ` + -DCMAKE_INSTALL_PREFIX="stage3-release" ` + -DCMAKE_PREFIX_PATH="$($PREFIX_PATH -Replace "\\", "/")" ` + -DCMAKE_BUILD_TYPE=Release ` + -DCMAKE_C_COMPILER="$($ZIG -Replace "\\", "/");cc;-target;$TARGET;-mcpu=$MCPU" ` + -DCMAKE_CXX_COMPILER="$($ZIG -Replace "\\", "/");c++;-target;$TARGET;-mcpu=$MCPU" ` + -DCMAKE_AR="$ZIG" ` + -DCMAKE_C_ARCHIVE_CREATE=" ar qc " ` + -DCMAKE_CXX_ARCHIVE_CREATE=" ar qc " ` + -DZIG_TARGET_TRIPLE="$TARGET" ` + -DZIG_TARGET_MCPU="$MCPU" ` + -DZIG_STATIC=ON +CheckLastExitCode + +ninja install +CheckLastExitCode + +Write-Output "Main test suite..." +& "stage3-release\bin\zig.exe" build test docs ` + --zig-lib-dir "$ZIG_LIB_DIR" ` + --search-prefix "$PREFIX_PATH" ` + -Dstatic-llvm ` + -Dskip-non-native ` + -Denable-symlinks-windows +CheckLastExitCode + +Write-Output "Testing Autodocs..." +& "stage3-release\bin\zig.exe" test "..\lib\std\std.zig" ` + --zig-lib-dir "$ZIG_LIB_DIR" ` + -femit-docs ` + -fno-emit-bin +CheckLastExitCode +