From 14b7a1e0da2fcca2680ca91f56c120202ba7da80 Mon Sep 17 00:00:00 2001 From: Guilherme Janczak Date: Sun, 29 Dec 2024 01:07:44 +0000 Subject: [PATCH] use clang-cl as build machine compiler --- .github/workflows/build-and-test.yml | 30 ++++++++++++------- ...eson-vs-aarch64.txt => meson-vs-ARM64.txt} | 0 .github/workflows/meson-vs-clang-cl-ARM64.txt | 2 ++ .../workflows/meson-vs-clang-cl-aarch64.txt | 3 -- .github/workflows/meson-vs-clang-cl-x64.txt | 2 ++ .github/workflows/meson-vs-clang-cl.txt | 2 +- 6 files changed, 25 insertions(+), 14 deletions(-) rename .github/workflows/{meson-vs-aarch64.txt => meson-vs-ARM64.txt} (100%) create mode 100644 .github/workflows/meson-vs-clang-cl-ARM64.txt delete mode 100644 .github/workflows/meson-vs-clang-cl-aarch64.txt create mode 100644 .github/workflows/meson-vs-clang-cl-x64.txt diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 04feb46..af83672 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -233,22 +233,32 @@ 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=.github/workflows/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