diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 04feb46..aba5273 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -233,22 +233,31 @@ jobs: uses: ilammy/msvc-dev-cmd@v1.13.0 - name: build run: | - 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" + if ("${{matrix.arch}}" -eq 'x64') { # Native compilation. + $hostcc = ` + "--native-file=.github/workflows/meson-vs-${{matrix.cc}}.txt" + } else { # Cross compilation. + # The build machine compiler is always clang-cl, and it needs flags + # to specify the build machine. + $buildcc = "--native-file=.github/workflows/meson-vs-clang-cl.txt" + $buildcc_args = "--native-file=meson-vs-clang-cl-amd64.txt" + # The host compiler could be clang-cl or cl + # clang-cl needs flags to target the host machine. + # cl already targets the host machine. + $hostcc = ` + "--cross-file=.github/workflows/meson-vs-${{matrix.cc}}.txt" + if (${{matrix.cc}} -eq 'clang-cl') { + $hostcc_args = ` + "--cross-file=.github/workflows/meson-vs-clang-cl-${{matrix.arch}}.txt" + $hostcc_arch = ` + "--cross-file=.github/workflows/meson-vs-${{matrix.arch}}.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 + $buildcc_args $buildcc $host_arch $hostcc_args $hostcc meson compile -C build - name: test run: meson test -C build diff --git a/.github/workflows/meson-vs-aarch64.txt b/.github/workflows/meson-vs-ARM64.txt similarity index 100% rename from .github/workflows/meson-vs-aarch64.txt rename to .github/workflows/meson-vs-ARM64.txt diff --git a/.github/workflows/meson-vs-clang-cl-ARM64.txt b/.github/workflows/meson-vs-clang-cl-ARM64.txt new file mode 100644 index 0000000..d885e89 --- /dev/null +++ b/.github/workflows/meson-vs-clang-cl-ARM64.txt @@ -0,0 +1,2 @@ +[constants] +clang_cl_target = 'aarch64-win32-msvc' diff --git a/.github/workflows/meson-vs-clang-cl-aarch64.txt b/.github/workflows/meson-vs-clang-cl-aarch64.txt deleted file mode 100644 index 4b0eba9..0000000 --- a/.github/workflows/meson-vs-clang-cl-aarch64.txt +++ /dev/null @@ -1,3 +0,0 @@ -[binaries] -c = ['clang-cl', '--target=aarch64-win32-msvc'] -cpp = c diff --git a/.github/workflows/meson-vs-clang-cl-x64.txt b/.github/workflows/meson-vs-clang-cl-x64.txt new file mode 100644 index 0000000..35d6abc --- /dev/null +++ b/.github/workflows/meson-vs-clang-cl-x64.txt @@ -0,0 +1,2 @@ +[constants] +clang_cl_target = 'x86_64-pc-windows-msvc' diff --git a/.github/workflows/meson-vs-clang-cl.txt b/.github/workflows/meson-vs-clang-cl.txt index 2b1a020..f7198dc 100644 --- a/.github/workflows/meson-vs-clang-cl.txt +++ b/.github/workflows/meson-vs-clang-cl.txt @@ -1,5 +1,5 @@ [binaries] -c = 'clang-cl' +c = ['clang-cl', '--target=' + clang_cl_target] c_ld = 'lld-link' cpp = c cpp_ld = c_ld