Skip to content

Commit 77346d8

Browse files
committed
Update Windows build configs
1 parent 4b9bd34 commit 77346d8

File tree

4 files changed

+103
-42
lines changed

4 files changed

+103
-42
lines changed

.github/workflows/cross.yml

Lines changed: 56 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -132,45 +132,83 @@ jobs:
132132
toolchain: stable
133133
target: aarch64-pc-windows-msvc
134134
- name: Install cargo-xwin and bindgen-cli
135-
run: cargo install cargo-xwin bindgen-cli
135+
run: cargo install --locked cargo-xwin bindgen-cli
136136
- name: cargo xwin build for `x86_64-pc-windows-msvc`
137-
run: cargo xwin build -p aws-lc-rs --release --target x86_64-pc-windows-msvc
137+
run: cargo xwin build -p aws-lc-rs --release --all-targets --target x86_64-pc-windows-msvc
138138
- name: cargo xwin build for `aarch64-pc-windows-msvc`
139-
run: cargo xwin build -p aws-lc-rs --release --target aarch64-pc-windows-msvc
139+
run: cargo xwin build -p aws-lc-rs --release --all-targets --target aarch64-pc-windows-msvc
140140

141-
aws-lc-rs-windows-mingw:
141+
aws-lc-rs-windows-gnu:
142142
if: github.repository_owner == 'aws'
143-
name: x86_64-pc-windows-gnu
143+
name: ${{ matrix.target }}
144144
runs-on: windows-latest
145+
strategy:
146+
fail-fast: false
147+
matrix:
148+
target:
149+
- 'x86_64-pc-windows-gnu'
150+
# TODO: Fails in GitHub CI. Appears to be related to bindgen.
151+
# .../base.h:61:10: fatal error: 'stdlib.h' file not found
152+
# - 'i686-pc-windows-gnu'
145153
steps:
146154
- uses: ilammy/setup-nasm@v1
147-
- uses: actions/checkout@v3
155+
- uses: actions/checkout@v4
148156
with:
149157
submodules: 'recursive'
150158
- uses: dtolnay/rust-toolchain@master
151159
id: toolchain
152160
with:
153161
toolchain: stable
154-
target: x86_64-pc-windows-gnu
155-
- name: Debug Test on `x86_64-pc-windows-gnu`
156-
run: cargo test -p aws-lc-rs --target x86_64-pc-windows-gnu --features bindgen
157-
- name: Release test on `x86_64-pc-windows-gnu`
158-
run: cargo test -p aws-lc-rs --release --target x86_64-pc-windows-gnu --features bindgen
162+
target: ${{ matrix.target }}
163+
- name: Debug Test on `${{ matrix.target }}`
164+
run: cargo test -p aws-lc-rs --target ${{ matrix.target }} --features bindgen
165+
- name: Release test on `${{ matrix.target }}`
166+
run: cargo test -p aws-lc-rs --release --target ${{ matrix.target }} --features bindgen
159167

160-
aws-lc-rs-windows-arm64:
161-
if: github.repository_owner == 'aws'
162-
name: aarch64-pc-windows-msvc
168+
aws-lc-rs-windows-msvc:
169+
if: ${{ github.repository_owner == 'aws' }}
170+
name: ${{ matrix.target }} - ${{ (matrix.crt_static == '1' && 'crt-static and /WX') || '/WX' }}
163171
runs-on: windows-latest
172+
strategy:
173+
fail-fast: false
174+
matrix:
175+
target:
176+
- 'x86_64-pc-windows-msvc'
177+
- 'i686-pc-windows-msvc'
178+
- 'aarch64-pc-windows-msvc'
179+
crt_static:
180+
- '0'
181+
- '1'
164182
steps:
165-
- uses: actions/checkout@v3
183+
- name: Install NASM
184+
if: ${{ matrix.target == 'x86_64-pc-windows-msvc' || matrix.target == 'i686-pc-windows-msvc' }}
185+
uses: ilammy/setup-nasm@v1
186+
- uses: actions/checkout@v4
166187
with:
167188
submodules: 'recursive'
168189
- name: Install ninja-build tool
190+
if: ${{ matrix.target == 'aarch64-pc-windows-msvc' }}
169191
uses: seanmiddleditch/gha-setup-ninja@v4
170192
- uses: dtolnay/rust-toolchain@master
171193
id: toolchain
172194
with:
173195
toolchain: stable
174-
target: aarch64-pc-windows-msvc
175-
- name: Build for `aarch64-pc-windows-msvc`
176-
run: cargo build -p aws-lc-rs --target aarch64-pc-windows-msvc --features bindgen
196+
target: ${{ matrix.target }}
197+
- name: Set ACTION_CARGO
198+
run: |
199+
if ('${{ matrix.target }}' -like '*aarch64*') {
200+
echo "ACTION_CARGO=build" | Out-File -FilePath $env:GITHUB_ENV -Append
201+
} else {
202+
echo "ACTION_CARGO=test" | Out-File -FilePath $env:GITHUB_ENV -Append
203+
}
204+
- name: Set RUSTFLAGS
205+
run: |
206+
if ('${{ matrix.crt_static }}' -eq '1') {
207+
echo "RUSTFLAGS=-Clink-arg=/WX -Ctarget-feature=+crt-static" | Out-File -FilePath $env:GITHUB_ENV -Append
208+
} else {
209+
echo "RUSTFLAGS=-Clink-arg=/WX" | Out-File -FilePath $env:GITHUB_ENV -Append
210+
}
211+
- name: Debug build
212+
run: cargo ${{ env.ACTION_CARGO }} -p aws-lc-rs --all-targets --target ${{ matrix.target }} --features bindgen
213+
- name: Release Build for ${{ matrix.target }}
214+
run: cargo ${{ env.ACTION_CARGO }} --release -p aws-lc-rs --all-targets --target ${{ matrix.target }}

aws-lc-fips-sys/builder/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ pub(crate) struct TestCommandResult {
144144
status: bool,
145145
}
146146

147-
const MAX_CMD_OUTPUT_SIZE: usize = 1 << 14;
147+
const MAX_CMD_OUTPUT_SIZE: usize = 1 << 15;
148148
fn execute_command(executable: &OsStr, args: &[&OsStr]) -> TestCommandResult {
149149
if let Ok(mut result) = Command::new(executable).args(args).output() {
150150
result.stderr.truncate(MAX_CMD_OUTPUT_SIZE);

aws-lc-sys/builder/cmake_builder.rs

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
use crate::OutputLib::{Crypto, RustWrapper, Ssl};
55
use crate::{
6-
cargo_env, emit_warning, execute_command, is_no_asm, option_env, target, target_arch,
7-
target_env, target_os, target_underscored, target_vendor, OutputLibType,
6+
cargo_env, emit_warning, execute_command, is_crt_static, is_no_asm, option_env, target,
7+
target_arch, target_env, target_os, target_underscored, target_vendor, OutputLibType,
88
};
99
use std::env;
1010
use std::ffi::OsStr;
@@ -70,6 +70,7 @@ impl CmakeBuilder {
7070
cmake::Config::new(&self.manifest_dir)
7171
}
7272

73+
#[allow(clippy::too_many_lines)]
7374
fn prepare_cmake_build(&self) -> cmake::Config {
7475
let mut cmake_cfg = self.get_cmake_config();
7576

@@ -134,6 +135,11 @@ impl CmakeBuilder {
134135
return cmake_cfg;
135136
}
136137

138+
// See issue: https://github.com/aws/aws-lc-rs/issues/453
139+
if target_os() == "windows" {
140+
Self::configure_windows(&mut cmake_cfg);
141+
}
142+
137143
// If the build environment vendor is Apple
138144
#[cfg(target_vendor = "apple")]
139145
{
@@ -157,33 +163,45 @@ impl CmakeBuilder {
157163
cmake_cfg.define("CMAKE_THREAD_LIBS_INIT", "-lpthread");
158164
}
159165

160-
if (target_env() != "msvc") && test_ninja_command() {
161-
// Use Ninja if available
162-
cmake_cfg.generator("Ninja");
163-
}
164-
165-
if target_underscored() == "aarch64_pc_windows_msvc" {
166-
cmake_cfg.generator("Ninja");
167-
cmake_cfg.define("CMAKE_C_COMPILER", "clang-cl");
168-
cmake_cfg.define("CMAKE_CXX_COMPILER", "clang-cl");
169-
cmake_cfg.define("CMAKE_ASM_COMPILER", "clang-cl");
170-
// If the build host is not aarch64
171-
#[cfg(not(target_arch = "aarch64"))]
172-
{
173-
// Only needed when cross-compiling
174-
cmake_cfg.define("CMAKE_C_COMPILER_TARGET", "arm64-pc-windows-msvc");
175-
cmake_cfg.define("CMAKE_CXX_COMPILER_TARGET", "arm64-pc-windows-msvc");
176-
cmake_cfg.define("CMAKE_ASM_COMPILER_TARGET", "arm64-pc-windows-msvc");
177-
}
178-
}
179-
180166
if target_env() == "ohos" {
181167
Self::configure_open_harmony(&mut cmake_cfg);
182168
}
183169

184170
cmake_cfg
185171
}
186172

173+
fn configure_windows(cmake_cfg: &mut cmake::Config) {
174+
match (target_env().as_str(), target_arch().as_str()) {
175+
("msvc", "aarch64") => {
176+
cmake_cfg.generator_toolset(format!(
177+
"ClangCL{}",
178+
if cfg!(target_arch = "x86_64") {
179+
",host=x64"
180+
} else {
181+
""
182+
}
183+
));
184+
cmake_cfg.static_crt(is_crt_static());
185+
cmake_cfg.define("CMAKE_GENERATOR_PLATFORM", "ARM64");
186+
cmake_cfg.define("CMAKE_SYSTEM_NAME", "Windows");
187+
cmake_cfg.define("CMAKE_SYSTEM_PROCESSOR", "ARM64");
188+
}
189+
("msvc", "x86") => {
190+
cmake_cfg.static_crt(is_crt_static());
191+
cmake_cfg.define("CMAKE_SYSTEM_NAME", "");
192+
cmake_cfg.define("CMAKE_SYSTEM_PROCESSOR", "");
193+
}
194+
("msvc", _) => {
195+
cmake_cfg.static_crt(is_crt_static());
196+
}
197+
("gnu", "x86") => {
198+
cmake_cfg.define("CMAKE_SYSTEM_NAME", "Windows");
199+
cmake_cfg.define("CMAKE_SYSTEM_PROCESSOR", "x86");
200+
}
201+
_ => {}
202+
}
203+
}
204+
187205
fn configure_open_harmony(cmake_cfg: &mut cmake::Config) {
188206
const OHOS_NDK_HOME: &str = "OHOS_NDK_HOME";
189207
if let Ok(ndk) = env::var(OHOS_NDK_HOME) {

aws-lc-sys/builder/main.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ pub(crate) struct TestCommandResult {
142142
status: bool,
143143
}
144144

145-
const MAX_CMD_OUTPUT_SIZE: usize = 1 << 12;
145+
const MAX_CMD_OUTPUT_SIZE: usize = 1 << 15;
146146
fn execute_command(executable: &OsStr, args: &[&OsStr]) -> TestCommandResult {
147147
if let Ok(mut result) = Command::new(executable).args(args).output() {
148148
result.stderr.truncate(MAX_CMD_OUTPUT_SIZE);
@@ -392,6 +392,11 @@ fn prepare_cargo_cfg() {
392392
*/
393393
}
394394

395+
fn is_crt_static() -> bool {
396+
let features = cargo_env("CARGO_CFG_TARGET_FEATURE");
397+
features.contains("crt-static")
398+
}
399+
395400
fn main() {
396401
initialize();
397402
prepare_cargo_cfg();

0 commit comments

Comments
 (0)