Introduce BORING_BSSL_SYSROOT and BORING_BSSL_EXTERNAL_TOOLCHAIN
These variables let us configure CMAKE_SYSROOT and
CMAKE_{C,CXX,ASM}_EXTERNAL_TOOLCHAIN from env variables
without needing an error-prone custom toolchain file.
Most users won't need BORING_BSSL_EXTERNAL_TOOLCHAIN, but some
packages (such as Homebrew package
messense/macos-cross-toolchains/x86_64-unknown-linux-gnu) don't
install the sysroot at the root of the GCC installation, so clang-12
cannot find crt1.o and crti.o.
Finally, we also set up CMAKE_CROSSCOMPILING and
CMAKE_{C,CXX,ASM}_COMPILER_TARGET to make cross compilation work
with compilers that have cross-compiling drivers (i.e. clang).
We can now cross build boring-sys from macOS to Linux with
fips feature turned on:
brew tap nox/misc
brew install llvm@12.0.0
export PATH="$(brew --prefix llvm@12.0.0)/bin:$PATH"
brew tap messense/macos-cross-toolchains
brew install x86_64-unknown-linux-gnu
export BORING_BSSL_FIPS_EXTERNAL_TOOLCHAIN="$(brew --prefix x86_64-unknown-linux-gnu)/toolchain"
export BORING_BSSL_FIPS_SYSROOT="$BORING_BSSL_FIPS_EXTERNAL_TOOLCHAIN/x86_unknown-linux-gnu/sysroot"
cargo build --target x86_64-unknown-linux-gnu -p boring-sys --features fips
This commit is contained in:
parent
ba0ea33ab4
commit
7434e35faa
|
|
@ -27,6 +27,8 @@ pub(crate) struct Env {
|
|||
pub(crate) source_path: Option<PathBuf>,
|
||||
pub(crate) precompiled_bcm_o: Option<PathBuf>,
|
||||
pub(crate) assume_patched: bool,
|
||||
pub(crate) sysroot: Option<PathBuf>,
|
||||
pub(crate) compiler_external_toolchain: Option<PathBuf>,
|
||||
pub(crate) debug: Option<OsString>,
|
||||
pub(crate) opt_level: Option<OsString>,
|
||||
pub(crate) android_ndk_home: Option<PathBuf>,
|
||||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Reference in New Issue