Skip to content

Commit

Permalink
Set aarch64 assembler
Browse files Browse the repository at this point in the history
  • Loading branch information
justsmth committed Jul 2, 2024
1 parent 8d5ed8c commit 63bd01b
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 33 deletions.
17 changes: 3 additions & 14 deletions .github/workflows/cross.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,25 +140,19 @@ jobs:

aws-lc-rs-windows-gnu:
if: github.repository_owner == 'aws'
name: ${{ matrix.target }} ${{ (matrix.ninja == '1' && 'w/ Ninja') || 'w/o Ninja'}}
name: ${{ matrix.target }}
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
target:
- 'x86_64-pc-windows-gnu'
# TODO: 'i686-pc-windows-gnu'
ninja:
- '0'
- '1'
steps:
- uses: ilammy/setup-nasm@v1
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Install ninja-build tool
if: ${{ matrix.ninja == '1' }}
uses: seanmiddleditch/gha-setup-ninja@v4
- uses: dtolnay/rust-toolchain@master
id: toolchain
with:
Expand All @@ -171,7 +165,7 @@ jobs:

aws-lc-rs-windows-msvc:
if: ${{ github.repository_owner == 'aws' }}
name: ${{ matrix.target }} ${{ (matrix.ninja == '1' && 'w/ Ninja') || 'w/o Ninja'}} - ${{ (matrix.crt_static == '1' && '/WX and crt-static') || '/WX' }}
name: ${{ matrix.target }} - ${{ (matrix.crt_static == '1' && 'crt-static and /WX') || '/WX' }}
runs-on: windows-latest
strategy:
fail-fast: false
Expand All @@ -180,9 +174,6 @@ jobs:
- 'x86_64-pc-windows-msvc'
- 'i686-pc-windows-msvc'
- 'aarch64-pc-windows-msvc'
ninja:
- '0'
- '1'
crt_static:
- '0'
- '1'
Expand All @@ -194,7 +185,7 @@ jobs:
with:
submodules: 'recursive'
- name: Install ninja-build tool
if: ${{ matrix.ninja == '1' }}
if: ${{ matrix.target == 'aarch64-pc-windows-msvc' }}
uses: seanmiddleditch/gha-setup-ninja@v4
- uses: dtolnay/rust-toolchain@master
id: toolchain
Expand All @@ -216,8 +207,6 @@ jobs:
echo "RUSTFLAGS=-Clink-arg=/WX" | Out-File -FilePath $env:GITHUB_ENV -Append
}
- name: Debug build
if: ${{ matrix.target != 'aarch64-pc-windows-msvc' || matrix.ninja == '1' }}
run: cargo ${{ env.ACTION_CARGO }} -p aws-lc-rs --all-targets --target ${{ matrix.target }} --features bindgen
- name: Release Build for ${{ matrix.target }}
if: ${{ matrix.target != 'aarch64-pc-windows-msvc' || matrix.ninja == '1' }}
run: cargo ${{ env.ACTION_CARGO }} --release -p aws-lc-rs --all-targets --target ${{ matrix.target }}
2 changes: 1 addition & 1 deletion aws-lc-fips-sys/builder/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ pub(crate) struct TestCommandResult {
status: bool,
}

const MAX_CMD_OUTPUT_SIZE: usize = 1 << 14;
const MAX_CMD_OUTPUT_SIZE: usize = 1 << 15;
fn execute_command(executable: &OsStr, args: &[&OsStr]) -> TestCommandResult {
if let Ok(mut result) = Command::new(executable).args(args).output() {
result.stderr.truncate(MAX_CMD_OUTPUT_SIZE);
Expand Down
56 changes: 39 additions & 17 deletions aws-lc-sys/builder/cmake_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use crate::{
cargo_env, emit_warning, execute_command, is_crt_static, is_no_asm, option_env, target,
target_arch, target_env, target_os, target_underscored, target_vendor, OutputLibType,
};
use std::collections::HashMap;
use std::env;
use std::ffi::OsStr;
use std::path::PathBuf;
Expand Down Expand Up @@ -168,23 +169,26 @@ impl CmakeBuilder {
}

if target_underscored() == "aarch64_pc_windows_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 the build host is not aarch64
#[cfg(not(target_arch = "aarch64"))]
{
// Only needed when cross-compiling
cmake_cfg.define("CMAKE_SYSTEM_PROCESSOR", "ARM64");
cmake_cfg.define("CMAKE_C_FLAGS_INIT", "--target=arm64-pc-windows-msvc");
cmake_cfg.define("CMAKE_CXX_FLAGS_INIT", "--target=arm64-pc-windows-msvc");
cmake_cfg.define("CMAKE_ASM_FLAGS_INIT", "--target=arm64-pc-windows-msvc");

cmake_cfg.define("CMAKE_FIND_ROOT_PATH_MODE_PROGRAM", "NEVER");
cmake_cfg.define("CMAKE_FIND_ROOT_PATH_MODE_LIBRARY", "ONLY");
cmake_cfg.define("CMAKE_FIND_ROOT_PATH_MODE_INCLUDE", "ONLY");
cmake_cfg.define("CMAKE_FIND_ROOT_PATH_MODE_INCLUDE", "ONLY");
cmake_cfg.generator("Ninja");
cmake_cfg.define("CMAKE_ASM_COMPILER_TARGET", "arm64-pc-windows-msvc");
// Only needed when cross-compiling
let env_map = self
.collect_vcvarsall_bat()
.map_err(|x| panic!("{}", x))
.unwrap();
let mut assembler_set = false;
for (key, value) in env_map {
if key == "VCINSTALLDIR" {
cmake_cfg.define(
"CMAKE_ASM_COMPILER",
format!("{}Tools\\Llvm\\bin\\clang-cl.exe", value),
);
assembler_set = true;
}
cmake_cfg.env(key, value);
}
if !assembler_set {
panic!("No assmebler set");
}
}

Expand All @@ -210,6 +214,24 @@ impl CmakeBuilder {
.configure_arg("--no-warn-unused-cli")
.build()
}

fn collect_vcvarsall_bat(&self) -> Result<HashMap<String, String>, String> {
let mut map: HashMap<String, String> = HashMap::new();
let script_path = self.manifest_dir.join("builder").join("printenv.bat");
let result = execute_command(script_path.as_os_str(), &[]);
if !result.status {
eprintln!("{}", result.stdout);
return Err("Failed to run vcvarsall.bat.".to_owned());
}
eprintln!("{}", result.stdout);
let lines = result.stdout.lines();
for line in lines {
if let Some((var, val)) = line.split_once('=') {
map.insert(var.to_string(), val.to_string());
}
}
Ok(map)
}
}

impl crate::Builder for CmakeBuilder {
Expand Down
2 changes: 1 addition & 1 deletion aws-lc-sys/builder/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ pub(crate) struct TestCommandResult {
status: bool,
}

const MAX_CMD_OUTPUT_SIZE: usize = 1 << 12;
const MAX_CMD_OUTPUT_SIZE: usize = 1 << 15;
fn execute_command(executable: &OsStr, args: &[&OsStr]) -> TestCommandResult {
if let Ok(mut result) = Command::new(executable).args(args).output() {
result.stderr.truncate(MAX_CMD_OUTPUT_SIZE);
Expand Down
44 changes: 44 additions & 0 deletions aws-lc-sys/builder/printenv.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
@echo off
setlocal EnableDelayedExpansion

set "TOP_DIR=%ProgramFiles(x86)%\Microsoft Visual Studio"
for /f "usebackq tokens=* delims=" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -property installationPath`) do (
set "TOP_DIR=%%i"
echo VS Installation: "!TOP_DIR!"
if exist "!TOP_DIR!\VC\Auxiliary\Build\vcvarsall.bat" (
set "VS_PATH=!TOP_DIR!\VC\Auxiliary\Build\"
echo FOUND in Installation: "!VS_PATH!"
goto FoundVS
)
goto SearchVS
)

echo Visual Studio installation not found using vswhere. Searching in default directories...

:SearchVS
for /R "%TOP_DIR%" %%a in (vcvarsall.bat) do (
if exist "%%~fa" (
set "VS_PATH=%%~dpa"
echo FOUND: "!VS_PATH!"
goto FoundVS
)
)
echo vcvarsall.bat not found.
goto End

:FoundVS
call "!VS_PATH!vcvarsall.bat" x86_arm64
if !ERRORLEVEL! neq 0 (
echo Failed to set Visual Studio environment variables.
echo PATH: "!VS_PATH!vcvarsall.bat"
goto End
)
echo Visual Studio environment variables set for x64.

set
endlocal
exit /b 0

:End
endlocal
exit /b 1

0 comments on commit 63bd01b

Please sign in to comment.