diff --git a/.github/workflows/cross.yml b/.github/workflows/cross.yml index 21bc49da6c8..6bd4a05855a 100644 --- a/.github/workflows/cross.yml +++ b/.github/workflows/cross.yml @@ -114,3 +114,21 @@ jobs: target: x86_64-pc-windows-gnu - name: Test on `x86_64-pc-windows-gnu` run: cargo test -p aws-lc-rs --target x86_64-pc-windows-gnu --features bindgen + + aws-lc-rs-windows-arm64: + if: github.repository_owner == 'aws' + name: aarch64-pc-windows-msvc + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 + with: + submodules: 'recursive' + - name: Install ninja-build tool + uses: seanmiddleditch/gha-setup-ninja@v2 + - uses: dtolnay/rust-toolchain@master + id: toolchain + with: + toolchain: stable + target: aarch64-pc-windows-msvc + - name: Build for `aarch64-pc-windows-msvc` + run: cargo build -p aws-lc-rs --target aarch64-pc-windows-msvc --features bindgen \ No newline at end of file diff --git a/aws-lc-sys/aws-lc b/aws-lc-sys/aws-lc index e7572ee050b..8ba3ae3e988 160000 --- a/aws-lc-sys/aws-lc +++ b/aws-lc-sys/aws-lc @@ -1 +1 @@ -Subproject commit e7572ee050b470b2d90e458ee32b8949e76193d5 +Subproject commit 8ba3ae3e988fcf3a15bb686e6ce188d55dd6515e diff --git a/aws-lc-sys/builder/cmake_builder.rs b/aws-lc-sys/builder/cmake_builder.rs index c95cb2d64e1..52bbb3fa3e2 100644 --- a/aws-lc-sys/builder/cmake_builder.rs +++ b/aws-lc-sys/builder/cmake_builder.rs @@ -2,7 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 OR ISC use crate::OutputLib::{Crypto, RustWrapper, Ssl}; -use crate::{target, target_arch, target_os, target_vendor, test_command, OutputLibType}; +use crate::{ + target, target_arch, target_env, target_os, target_vendor, test_command, OutputLibType, +}; use std::env; use std::ffi::OsStr; use std::path::PathBuf; @@ -14,6 +16,11 @@ pub(crate) struct CmakeBuilder { output_lib_type: OutputLibType, } +fn test_ninja_command() -> bool { + test_command("ninja".as_ref(), &["--version".as_ref()]).status + || test_command("ninja-build".as_ref(), &["--version".as_ref()]).status +} + fn test_nasm_command() -> bool { test_command("nasm".as_ref(), &["-version".as_ref()]).status } @@ -118,6 +125,13 @@ impl CmakeBuilder { } } + if target_os() == "windows" && target_arch() == "aarch64" && target_env() == "msvc" { + cmake_cfg.generator("Ninja"); + cmake_cfg.define("CMAKE_C_COMPILER", "clang-cl"); + cmake_cfg.define("CMAKE_CXX_COMPILER", "clang-cl"); + cmake_cfg.define("CMAKE_ASM_COMPILER", "clang-cl"); + } + if cfg!(feature = "asan") { env::set_var("CC", "clang"); env::set_var("CXX", "clang++"); @@ -146,9 +160,15 @@ impl crate::Builder for CmakeBuilder { eprintln!("Missing dependency: cmake"); missing_dependency = true; }; - if target_os() == "windows" && target_arch() == "x86_64" && !test_nasm_command() { - eprintln!("Missing dependency: nasm"); - missing_dependency = true; + if target_os() == "windows" { + if target_arch() == "x86_64" && !test_nasm_command() { + eprintln!("Missing dependency: nasm"); + missing_dependency = true; + } + if target_arch() == "aarch64" && target_env() == "msvc" && !test_ninja_command() { + eprintln!("Missing dependency: ninja"); + missing_dependency = true; + } } if missing_dependency {