From 95850c62872c3d2c1f9a04f1669279a80df4c409 Mon Sep 17 00:00:00 2001 From: Marijn Suijten Date: Thu, 4 Jan 2024 15:29:21 +0100 Subject: [PATCH] Support cross-compiling to aarch64 on MSVC Ship the binaries in our minimal prebuilt package and generalize the library paths to support `aarch64-pc-windows-msvc` cross-compiles. --- .github/workflows/sdk.yml | 2 +- xbuild/src/cargo/mod.rs | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/sdk.yml b/.github/workflows/sdk.yml index de775e9b..fb275b5d 100644 --- a/.github/workflows/sdk.yml +++ b/.github/workflows/sdk.yml @@ -66,7 +66,7 @@ jobs: - name: Install rust toolchain uses: hecrj/setup-rust-action@v1 - run: cargo install xwin - - run: xwin --accept-license splat --output Windows.sdk + - run: xwin --accept-license --arch aarch64,x86_64 splat --output Windows.sdk - run: tar --zstd -cf Windows.sdk.tar.zst Windows.sdk - run: gh release upload $TAG Windows.sdk.tar.zst -R rust-mobile/xbuild env: diff --git a/xbuild/src/cargo/mod.rs b/xbuild/src/cargo/mod.rs index adb91766..a185c4c9 100644 --- a/xbuild/src/cargo/mod.rs +++ b/xbuild/src/cargo/mod.rs @@ -317,9 +317,13 @@ impl CargoBuild { self.add_include_dir(&path.join("sdk").join("include").join("um")); self.add_include_dir(&path.join("sdk").join("include").join("ucrt")); self.add_include_dir(&path.join("sdk").join("include").join("shared")); - self.add_lib_dir(&path.join("crt").join("lib").join("x86_64")); - self.add_lib_dir(&path.join("sdk").join("lib").join("um").join("x86_64")); - self.add_lib_dir(&path.join("sdk").join("lib").join("ucrt").join("x86_64")); + let arch_folder = match self.target.arch() { + crate::Arch::Arm64 => "aarch64", + crate::Arch::X64 => "x86_64", + }; + self.add_lib_dir(&path.join("crt").join("lib").join(arch_folder)); + self.add_lib_dir(&path.join("sdk").join("lib").join("um").join(arch_folder)); + self.add_lib_dir(&path.join("sdk").join("lib").join("ucrt").join(arch_folder)); Ok(()) }