Mirror of BoringSSL (grpc依赖)
https://boringssl.googlesource.com/boringssl
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
4.3 KiB
139 lines
4.3 KiB
/* Copyright 2021 The BoringSSL Authors |
|
* |
|
* Permission to use, copy, modify, and/or distribute this software for any |
|
* purpose with or without fee is hereby granted, provided that the above |
|
* copyright notice and this permission notice appear in all copies. |
|
* |
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY |
|
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION |
|
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN |
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|
*/ |
|
|
|
use std::env; |
|
use std::path::Path; |
|
use std::path::PathBuf; |
|
|
|
// Keep in sync with the list in include/openssl/opensslconf.h |
|
const OSSL_CONF_DEFINES: &[&str] = &[ |
|
"OPENSSL_NO_ASYNC", |
|
"OPENSSL_NO_BF", |
|
"OPENSSL_NO_BLAKE2", |
|
"OPENSSL_NO_BUF_FREELISTS", |
|
"OPENSSL_NO_CAMELLIA", |
|
"OPENSSL_NO_CAPIENG", |
|
"OPENSSL_NO_CAST", |
|
"OPENSSL_NO_CMS", |
|
"OPENSSL_NO_COMP", |
|
"OPENSSL_NO_CT", |
|
"OPENSSL_NO_DANE", |
|
"OPENSSL_NO_DEPRECATED", |
|
"OPENSSL_NO_DGRAM", |
|
"OPENSSL_NO_DYNAMIC_ENGINE", |
|
"OPENSSL_NO_EC_NISTP_64_GCC_128", |
|
"OPENSSL_NO_EC2M", |
|
"OPENSSL_NO_EGD", |
|
"OPENSSL_NO_ENGINE", |
|
"OPENSSL_NO_GMP", |
|
"OPENSSL_NO_GOST", |
|
"OPENSSL_NO_HEARTBEATS", |
|
"OPENSSL_NO_HW", |
|
"OPENSSL_NO_IDEA", |
|
"OPENSSL_NO_JPAKE", |
|
"OPENSSL_NO_KRB5", |
|
"OPENSSL_NO_MD2", |
|
"OPENSSL_NO_MDC2", |
|
"OPENSSL_NO_OCB", |
|
"OPENSSL_NO_OCSP", |
|
"OPENSSL_NO_RC2", |
|
"OPENSSL_NO_RC5", |
|
"OPENSSL_NO_RFC3779", |
|
"OPENSSL_NO_RIPEMD", |
|
"OPENSSL_NO_RMD160", |
|
"OPENSSL_NO_SCTP", |
|
"OPENSSL_NO_SEED", |
|
"OPENSSL_NO_SM2", |
|
"OPENSSL_NO_SM3", |
|
"OPENSSL_NO_SM4", |
|
"OPENSSL_NO_SRP", |
|
"OPENSSL_NO_SSL_TRACE", |
|
"OPENSSL_NO_SSL2", |
|
"OPENSSL_NO_SSL3", |
|
"OPENSSL_NO_SSL3_METHOD", |
|
"OPENSSL_NO_STATIC_ENGINE", |
|
"OPENSSL_NO_STORE", |
|
"OPENSSL_NO_WHIRLPOOL", |
|
]; |
|
|
|
fn get_bssl_build_dir() -> PathBuf { |
|
println!("cargo:rerun-if-env-changed=BORINGSSL_BUILD_DIR"); |
|
if let Some(build_dir) = env::var_os("BORINGSSL_BUILD_DIR") { |
|
return PathBuf::from(build_dir); |
|
} |
|
|
|
let crate_dir = env::var_os("CARGO_MANIFEST_DIR").unwrap(); |
|
return Path::new(&crate_dir).join("../../build"); |
|
} |
|
|
|
fn get_cpp_runtime_lib() -> Option<String> { |
|
println!("cargo:rerun-if-env-changed=BORINGSSL_RUST_CPPLIB"); |
|
|
|
if let Ok(cpp_lib) = env::var("BORINGSSL_RUST_CPPLIB") { |
|
return Some(cpp_lib); |
|
} |
|
|
|
if env::var_os("CARGO_CFG_UNIX").is_some() { |
|
match env::var("CARGO_CFG_TARGET_OS").unwrap().as_ref() { |
|
"macos" => Some("c++".into()), |
|
_ => Some("stdc++".into()), |
|
} |
|
} else { |
|
None |
|
} |
|
} |
|
|
|
fn main() { |
|
let bssl_build_dir = get_bssl_build_dir(); |
|
let bssl_sys_build_dir = bssl_build_dir.join("rust/bssl-sys"); |
|
let target = env::var("TARGET").unwrap(); |
|
let out_dir = env::var("OUT_DIR").unwrap(); |
|
let bindgen_out_file = Path::new(&out_dir).join("bindgen.rs"); |
|
|
|
// Find the bindgen generated target platform bindings file and put it into |
|
// OUT_DIR/bindgen.rs. |
|
let bindgen_source_file = bssl_sys_build_dir.join(format!("wrapper_{}.rs", target)); |
|
std::fs::copy(&bindgen_source_file, &bindgen_out_file).expect(&format!( |
|
"Could not copy bindings from '{}' to '{}'", |
|
bindgen_source_file.display(), |
|
bindgen_out_file.display() |
|
)); |
|
println!("cargo:rerun-if-changed={}", bindgen_source_file.display()); |
|
|
|
// Statically link libraries. |
|
println!( |
|
"cargo:rustc-link-search=native={}", |
|
bssl_build_dir.join("crypto").display() |
|
); |
|
println!("cargo:rustc-link-lib=static=crypto"); |
|
|
|
println!( |
|
"cargo:rustc-link-search=native={}", |
|
bssl_build_dir.join("ssl").display() |
|
); |
|
println!("cargo:rustc-link-lib=static=ssl"); |
|
|
|
println!( |
|
"cargo:rustc-link-search=native={}", |
|
bssl_sys_build_dir.display() |
|
); |
|
println!("cargo:rustc-link-lib=static=rust_wrapper"); |
|
|
|
if let Some(cpp_lib) = get_cpp_runtime_lib() { |
|
println!("cargo:rustc-link-lib={}", cpp_lib); |
|
} |
|
|
|
println!("cargo:conf={}", OSSL_CONF_DEFINES.join(",")); |
|
}
|
|
|