From b35eca8e5c9e194b071423f990f81a1450a2fe0b Mon Sep 17 00:00:00 2001 From: Justin Smith Date: Fri, 31 Jan 2025 09:04:19 -0500 Subject: [PATCH 1/4] Avoid fips MacOS failure due to -Woverriding-option --- aws-lc-fips-sys/builder/cmake_builder.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/aws-lc-fips-sys/builder/cmake_builder.rs b/aws-lc-fips-sys/builder/cmake_builder.rs index a9ef4ab42a9..1eb711c5971 100644 --- a/aws-lc-fips-sys/builder/cmake_builder.rs +++ b/aws-lc-fips-sys/builder/cmake_builder.rs @@ -207,12 +207,13 @@ impl CmakeBuilder { return cmake_cfg; } - // If the build environment vendor is Apple - #[cfg(target_vendor = "apple")] - { - const NO_OVERRIDE_T_OPTION: &str = "-Wno-overriding-t-option"; - if let Ok(true) = cc_build.is_flag_supported(NO_OVERRIDE_T_OPTION) { - cmake_cfg.cflag(NO_OVERRIDE_T_OPTION); + if target_vendor() == "apple" { + let disable_warnings: [&str; 2] = + ["-Wno-overriding-t-option", "-Wno-overriding-option"]; + for disabler in disable_warnings { + if let Ok(true) = cc_build.is_flag_supported(disabler) { + cmake_cfg.cflag(disabler); + } } if target_arch() == "aarch64" { cmake_cfg.define("CMAKE_OSX_ARCHITECTURES", "arm64"); @@ -222,12 +223,11 @@ impl CmakeBuilder { cmake_cfg.define("CMAKE_OSX_ARCHITECTURES", "x86_64"); cmake_cfg.define("CMAKE_SYSTEM_PROCESSOR", "x86_64"); } - } - - if target_vendor() == "apple" && target_os().trim() == "ios" { - cmake_cfg.define("CMAKE_SYSTEM_NAME", "iOS"); - if target().trim().ends_with("-ios-sim") { - cmake_cfg.define("CMAKE_OSX_SYSROOT", "iphonesimulator"); + if target_os().trim() == "ios" { + cmake_cfg.define("CMAKE_SYSTEM_NAME", "iOS"); + if target().trim().ends_with("-ios-sim") { + cmake_cfg.define("CMAKE_OSX_SYSROOT", "iphonesimulator"); + } } } From 11b80550d2e5d0b6b8f7d8dc5d37e779e152a4f9 Mon Sep 17 00:00:00 2001 From: Justin Smith Date: Fri, 31 Jan 2025 09:09:22 -0500 Subject: [PATCH 2/4] Also fix for aws-lc-sys --- aws-lc-sys/builder/cc_builder.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/aws-lc-sys/builder/cc_builder.rs b/aws-lc-sys/builder/cc_builder.rs index ea8e6c32bcf..1eb5700184f 100644 --- a/aws-lc-sys/builder/cc_builder.rs +++ b/aws-lc-sys/builder/cc_builder.rs @@ -194,6 +194,7 @@ impl CcBuilder { // clang: error: overriding '-mmacosx-version-min=13.7' option with '--target=x86_64-apple-macosx14.2' [-Werror,-Woverriding-t-option] // ``` cc_build.flag_if_supported("-Wno-overriding-t-option"); + cc_build.flag_if_supported("-Wno-overriding-option"); } cc_build From 85eeb67810514f2eba5de3bb10026b34ece9be13 Mon Sep 17 00:00:00 2001 From: Justin Smith Date: Mon, 3 Feb 2025 10:10:20 -0500 Subject: [PATCH 3/4] Map ???-alpine-linux-musl to an effective target --- aws-lc-fips-sys/builder/cmake_builder.rs | 10 +++++----- aws-lc-fips-sys/builder/main.rs | 20 +++++++++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/aws-lc-fips-sys/builder/cmake_builder.rs b/aws-lc-fips-sys/builder/cmake_builder.rs index 1eb711c5971..f61a4d79112 100644 --- a/aws-lc-fips-sys/builder/cmake_builder.rs +++ b/aws-lc-fips-sys/builder/cmake_builder.rs @@ -3,9 +3,9 @@ use crate::OutputLib::{Crypto, RustWrapper, Ssl}; use crate::{ - cargo_env, emit_rustc_cfg, emit_warning, execute_command, is_cpu_jitter_entropy, is_no_asm, - option_env, target, target_arch, target_env, target_family, target_os, target_underscored, - target_vendor, OutputLibType, TestCommandResult, + cargo_env, effective_target, emit_rustc_cfg, emit_warning, execute_command, + is_cpu_jitter_entropy, is_no_asm, option_env, target_arch, target_env, target_family, + target_os, target_underscored, target_vendor, OutputLibType, TestCommandResult, }; use std::collections::HashMap; use std::env; @@ -225,7 +225,7 @@ impl CmakeBuilder { } if target_os().trim() == "ios" { cmake_cfg.define("CMAKE_SYSTEM_NAME", "iOS"); - if target().trim().ends_with("-ios-sim") { + if effective_target().trim().ends_with("-ios-sim") { cmake_cfg.define("CMAKE_OSX_SYSROOT", "iphonesimulator"); } } @@ -307,7 +307,7 @@ impl CmakeBuilder { ); let mut cflags = vec!["-Wno-unused-command-line-argument"]; let mut asmflags = vec![]; - match target().as_str() { + match effective_target().as_str() { "aarch64-unknown-linux-ohos" => {} "armv7-unknown-linux-ohos" => { const ARM7_FLAGS: [&str; 6] = [ diff --git a/aws-lc-fips-sys/builder/main.rs b/aws-lc-fips-sys/builder/main.rs index 7f95dd365da..9f4de1cdf8c 100644 --- a/aws-lc-fips-sys/builder/main.rs +++ b/aws-lc-fips-sys/builder/main.rs @@ -212,7 +212,7 @@ fn prefix_string() -> String { #[cfg(feature = "bindgen")] fn target_platform_prefix(name: &str) -> String { - format!("{}_{}", target().replace('-', "_"), name) + format!("{}_{}", effective_target().replace('-', "_"), name) } pub(crate) struct TestCommandResult { @@ -327,6 +327,16 @@ fn target_vendor() -> String { cargo_env("CARGO_CFG_TARGET_VENDOR") } +#[allow(unused)] +fn effective_target() -> String { + let target = target(); + match target.as_str() { + "x86_64-alpine-linux-musl" => "x86_64-unknown-linux-musl".to_string(), + "aarch64-alpine-linux-musl" => "aarch64-unknown-linux-musl".to_string(), + _ => target, + } +} + #[allow(unused)] fn target() -> String { cargo_env("TARGET") @@ -334,7 +344,7 @@ fn target() -> String { #[allow(unused)] fn target_underscored() -> String { - target().replace('-', "_") + effective_target().replace('-', "_") } fn out_dir() -> PathBuf { @@ -386,7 +396,7 @@ fn initialize() { || is_pregenerating_bindings() { // We only set the PREGENERATED flag when we know pregenerated bindings are available. - let target = target(); + let target = effective_target(); let supported_platform = match target.as_str() { "x86_64-unknown-linux-gnu" | "aarch64-unknown-linux-gnu" @@ -470,7 +480,7 @@ bindgen_available!( if internal_bindgen_supported() && !is_external_bindgen() { emit_warning(&format!( "Generating bindings - internal bindgen. Platform: {}", - target() + effective_target() )); let gen_bindings_path = out_dir().join("bindings.rs"); generate_bindings(manifest_dir, prefix, &gen_bindings_path); @@ -703,7 +713,7 @@ fn invoke_external_bindgen( verify_bindgen()?; emit_warning(&format!( "Generating bindings - external bindgen. Platform: '{}' Prefix: '{:?}'", - target(), + effective_target(), &options.build_prefix )); From c8844bf8bc62ca37c39615a2bc582fbcdc9d16c0 Mon Sep 17 00:00:00 2001 From: Justin Smith Date: Mon, 3 Feb 2025 10:21:14 -0500 Subject: [PATCH 4/4] Allow environment to set crate-specific compiler --- aws-lc-fips-sys/builder/cmake_builder.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/aws-lc-fips-sys/builder/cmake_builder.rs b/aws-lc-fips-sys/builder/cmake_builder.rs index f61a4d79112..f491848c65c 100644 --- a/aws-lc-fips-sys/builder/cmake_builder.rs +++ b/aws-lc-fips-sys/builder/cmake_builder.rs @@ -111,6 +111,15 @@ impl CmakeBuilder { emit_rustc_cfg("cpu_jitter_entropy"); } + if let Some(cc) = option_env!("AWS_LC_FIPS_SYS_CC") { + env::set_var("CC", cc); + emit_warning(&format!("Setting CC: {}", cc)); + } + if let Some(cxx) = option_env!("AWS_LC_FIPS_SYS_CXX") { + env::set_var("CXX", cxx); + emit_warning(&format!("Setting CXX: {}", cxx)); + } + let cc_build = cc::Build::new(); let opt_level = cargo_env("OPT_LEVEL"); if opt_level.ne("0") { @@ -268,6 +277,7 @@ impl CmakeBuilder { if major > 13 { // TODO: Update when FIPS GCC 14 build is fixed emit_warning("WARNING: FIPS build is known to fail on GCC >= 14. See: https://github.com/aws/aws-lc-rs/issues/569"); + emit_warning("Consider specifying a different compiler in your environment by setting `CC` or: `export AWS_LC_FIPS_SYS_CC=clang`"); return Some(false); } }