diff --git a/boring-sys/build/config.rs b/boring-sys/build/config.rs index 588ec8d6..12e89ffa 100644 --- a/boring-sys/build/config.rs +++ b/boring-sys/build/config.rs @@ -27,6 +27,8 @@ pub(crate) struct Env { pub(crate) source_path: Option, pub(crate) precompiled_bcm_o: Option, pub(crate) assume_patched: bool, + pub(crate) sysroot: Option, + pub(crate) compiler_external_toolchain: Option, pub(crate) debug: Option, pub(crate) opt_level: Option, pub(crate) android_ndk_home: Option, @@ -145,6 +147,9 @@ impl Env { precompiled_bcm_o: boringssl_var("BORING_BSSL_PRECOMPILED_BCM_O").map(PathBuf::from), assume_patched: boringssl_var("BORING_BSSL_ASSUME_PATCHED") .is_some_and(|v| !v.is_empty()), + sysroot: boringssl_var("BORING_BSSL_SYSROOT").map(PathBuf::from), + compiler_external_toolchain: boringssl_var("BORING_BSSL_COMPILER_EXTERNAL_TOOLCHAIN") + .map(PathBuf::from), debug: target_var("DEBUG"), opt_level: target_var("OPT_LEVEL"), android_ndk_home: target_var("ANDROID_NDK_HOME").map(Into::into), diff --git a/boring-sys/build/main.rs b/boring-sys/build/main.rs index 9adf9a45..8ddf7ff1 100644 --- a/boring-sys/build/main.rs +++ b/boring-sys/build/main.rs @@ -193,6 +193,23 @@ fn get_boringssl_cmake_config(config: &Config) -> cmake::Config { return boringssl_cmake; } + boringssl_cmake + .define("CMAKE_CROSSCOMPILING", "true") + .define("CMAKE_C_COMPILER_TARGET", &config.target) + .define("CMAKE_CXX_COMPILER_TARGET", &config.target) + .define("CMAKE_ASM_COMPILER_TARGET", &config.target); + + if let Some(sysroot) = &config.env.sysroot { + boringssl_cmake.define("CMAKE_SYSROOT", sysroot); + } + + if let Some(toolchain) = &config.env.compiler_external_toolchain { + boringssl_cmake + .define("CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN", toolchain) + .define("CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN", toolchain) + .define("CMAKE_ASM_COMPILER_EXTERNAL_TOOLCHAIN", toolchain); + } + // Add platform-specific parameters for cross-compilation. match &*config.target_os { "android" => { @@ -647,6 +664,12 @@ fn main() { .clang_arg("-I") .clang_arg(include_path.display().to_string()); + if let Some(sysroot) = &config.env.sysroot { + builder = builder + .clang_arg("--sysroot") + .clang_arg(&sysroot.display().to_string()); + } + match &*config.target { // bindgen produces alignment tests that cause undefined behavior [1] // when applied to explicitly unaligned types like OSUnalignedU64.