diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index dc14041..c981992 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -226,26 +226,45 @@ jobs: strategy: matrix: cc: [cl, clang-cl] + arch: [x64, ARM64] steps: - uses: actions/setup-python@v5.3.0 - - run: pip install meson ninja + - run: | + pip install meson + choco install ninja -y - uses: actions/checkout@v4.2.2 - - uses: ilammy/msvc-dev-cmd@v1.13.0 + - name: Enable ARM64 Developer Command Prompt + if: matrix.arch == 'ARM64' + uses: ilammy/msvc-dev-cmd@v1.13.0 + with: + arch: amd64_arm64 + - name: Enable x64 Developer Command Prompt + if: matrix.arch == 'x64' + uses: ilammy/msvc-dev-cmd@v1.13.0 - name: build run: | - pwsh -c { - $env:CC="${{ matrix.cc }}"; - # Don't do debug builds because that triggers a Windows bug: - # https://developercommunity.visualstudio.com/t/_setmaxstdio-hangs-the-program-if-the/10164855?space=62&q=setmaxstdio&viewtype=all - meson setup build --buildtype=release -Dtest_system=true + if ("${{matrix.arch}}" -eq 'ARM64') { + $buildcc = "--native-file=.github/workflows/meson-vs-gcc.txt" + $hostarch = "--cross-file=.github/workflows/meson-vs-aarch64.txt" + $hostcc = "--cross-file=.github/workflows/meson-vs-${{matrix.cc}}.txt" + # clang-cl needs extra args to target a particular architecture. + $hostcc_args = if (${{matrix.cc}} -eq 'clang-cl') { + "--cross-file=.github/workflows/meson-vs-clang-cl-aarch64.txt" + } + } else { + $hostcc = "--native-file=.github/workflows/meson-vs-${{matrix.cc}}.txt" } + # Don't do debug builds because that triggers a Windows bug: + # https://developercommunity.visualstudio.com/t/_setmaxstdio-hangs-the-program-if-the/10164855?space=62&q=setmaxstdio&viewtype=all + meson setup build -Dtest_system=true -Dbuildtype=release ` + $buildcc $hostarch $hostcc $hostcc_args meson compile -C build - name: test run: meson test --no-suite system -C build - - name: test_system - run: meson test --suite system -C build || true + - name: test system + run: meson test --suite system -C build - uses: actions/upload-artifact@v4.5.0 if: always() with: - name: meson-logs-vs-${{matrix.cc}} + name: meson-logs-vs-${{matrix.cc}}-${{matrix.arch}} path: build/meson-logs diff --git a/.github/workflows/meson-vs-aarch64.txt b/.github/workflows/meson-vs-aarch64.txt new file mode 100644 index 0000000..d49cd23 --- /dev/null +++ b/.github/workflows/meson-vs-aarch64.txt @@ -0,0 +1,5 @@ +[host_machine] +system = 'windows' +cpu_family = 'aarch64' +cpu = 'armv8' +endian = 'little' diff --git a/.github/workflows/meson-vs-cl.txt b/.github/workflows/meson-vs-cl.txt new file mode 100644 index 0000000..9be7df8 --- /dev/null +++ b/.github/workflows/meson-vs-cl.txt @@ -0,0 +1,6 @@ +[binaries] +c = 'cl' +c_ld = 'link' +cpp = c +cpp_ld = c_ld +ar = 'lib' diff --git a/.github/workflows/meson-vs-clang-cl-aarch64.txt b/.github/workflows/meson-vs-clang-cl-aarch64.txt new file mode 100644 index 0000000..4b0eba9 --- /dev/null +++ b/.github/workflows/meson-vs-clang-cl-aarch64.txt @@ -0,0 +1,3 @@ +[binaries] +c = ['clang-cl', '--target=aarch64-win32-msvc'] +cpp = c diff --git a/.github/workflows/meson-vs-clang-cl.txt b/.github/workflows/meson-vs-clang-cl.txt new file mode 100644 index 0000000..2b1a020 --- /dev/null +++ b/.github/workflows/meson-vs-clang-cl.txt @@ -0,0 +1,7 @@ +[binaries] +c = 'clang-cl' +c_ld = 'lld-link' +cpp = c +cpp_ld = c_ld +ar = 'llvm-lib' +strip = 'llvm-strip' diff --git a/.github/workflows/meson-vs-gcc.txt b/.github/workflows/meson-vs-gcc.txt new file mode 100644 index 0000000..4c5fe6a --- /dev/null +++ b/.github/workflows/meson-vs-gcc.txt @@ -0,0 +1,7 @@ +[binaries] +c = 'gcc' +c_ld = 'bfd' +cpp = 'g++' +cpp_ld = c_ld +ar = 'ar' +strip = 'strip'