From aa874292e340b7b003eaef28f9bd40c688142422 Mon Sep 17 00:00:00 2001 From: Guilherme Janczak Date: Sun, 29 Dec 2024 05:08:19 +0000 Subject: [PATCH] expand Visual Studio CI with code from dictpw --- .github/workflows/build-and-test.yml | 40 ++++++++++++++----- .github/workflows/meson-vs-aarch64.txt | 5 +++ .github/workflows/meson-vs-cl.txt | 6 +++ .../workflows/meson-vs-clang-cl-aarch64.txt | 3 ++ .github/workflows/meson-vs-clang-cl.txt | 7 ++++ .github/workflows/meson-vs-gcc.txt | 7 ++++ 6 files changed, 58 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/meson-vs-aarch64.txt create mode 100644 .github/workflows/meson-vs-cl.txt create mode 100644 .github/workflows/meson-vs-clang-cl-aarch64.txt create mode 100644 .github/workflows/meson-vs-clang-cl.txt create mode 100644 .github/workflows/meson-vs-gcc.txt diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index dc14041..0c84238 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -226,26 +226,46 @@ 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 -Dbuildtype=release ` + -Db_vscrt=static_from_buildtype ` + $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'