xref: /aosp_15_r20/external/boringssl/src/rust/bssl-sys/build.rs (revision 8fb009dc861624b67b6cdb62ea21f0f22d0c584b)
1*8fb009dcSAndroid Build Coastguard Worker /* Copyright (c) 2021, Google Inc.
2*8fb009dcSAndroid Build Coastguard Worker  *
3*8fb009dcSAndroid Build Coastguard Worker  * Permission to use, copy, modify, and/or distribute this software for any
4*8fb009dcSAndroid Build Coastguard Worker  * purpose with or without fee is hereby granted, provided that the above
5*8fb009dcSAndroid Build Coastguard Worker  * copyright notice and this permission notice appear in all copies.
6*8fb009dcSAndroid Build Coastguard Worker  *
7*8fb009dcSAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8*8fb009dcSAndroid Build Coastguard Worker  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9*8fb009dcSAndroid Build Coastguard Worker  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10*8fb009dcSAndroid Build Coastguard Worker  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11*8fb009dcSAndroid Build Coastguard Worker  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12*8fb009dcSAndroid Build Coastguard Worker  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13*8fb009dcSAndroid Build Coastguard Worker  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14*8fb009dcSAndroid Build Coastguard Worker  */
15*8fb009dcSAndroid Build Coastguard Worker 
16*8fb009dcSAndroid Build Coastguard Worker use std::env;
17*8fb009dcSAndroid Build Coastguard Worker use std::path::Path;
18*8fb009dcSAndroid Build Coastguard Worker use std::path::PathBuf;
19*8fb009dcSAndroid Build Coastguard Worker 
20*8fb009dcSAndroid Build Coastguard Worker // Keep in sync with the list in include/openssl/opensslconf.h
21*8fb009dcSAndroid Build Coastguard Worker const OSSL_CONF_DEFINES: &[&str] = &[
22*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_ASYNC",
23*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_BF",
24*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_BLAKE2",
25*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_BUF_FREELISTS",
26*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_CAMELLIA",
27*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_CAPIENG",
28*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_CAST",
29*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_CMS",
30*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_COMP",
31*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_CT",
32*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_DANE",
33*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_DEPRECATED",
34*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_DGRAM",
35*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_DYNAMIC_ENGINE",
36*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_EC_NISTP_64_GCC_128",
37*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_EC2M",
38*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_EGD",
39*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_ENGINE",
40*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_GMP",
41*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_GOST",
42*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_HEARTBEATS",
43*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_HW",
44*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_IDEA",
45*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_JPAKE",
46*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_KRB5",
47*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_MD2",
48*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_MDC2",
49*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_OCB",
50*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_OCSP",
51*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_RC2",
52*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_RC5",
53*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_RFC3779",
54*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_RIPEMD",
55*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_RMD160",
56*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_SCTP",
57*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_SEED",
58*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_SM2",
59*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_SM3",
60*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_SM4",
61*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_SRP",
62*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_SSL_TRACE",
63*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_SSL2",
64*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_SSL3",
65*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_SSL3_METHOD",
66*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_STATIC_ENGINE",
67*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_STORE",
68*8fb009dcSAndroid Build Coastguard Worker     "OPENSSL_NO_WHIRLPOOL",
69*8fb009dcSAndroid Build Coastguard Worker ];
70*8fb009dcSAndroid Build Coastguard Worker 
get_bssl_build_dir() -> PathBuf71*8fb009dcSAndroid Build Coastguard Worker fn get_bssl_build_dir() -> PathBuf {
72*8fb009dcSAndroid Build Coastguard Worker     println!("cargo:rerun-if-env-changed=BORINGSSL_BUILD_DIR");
73*8fb009dcSAndroid Build Coastguard Worker     if let Some(build_dir) = env::var_os("BORINGSSL_BUILD_DIR") {
74*8fb009dcSAndroid Build Coastguard Worker         return PathBuf::from(build_dir);
75*8fb009dcSAndroid Build Coastguard Worker     }
76*8fb009dcSAndroid Build Coastguard Worker 
77*8fb009dcSAndroid Build Coastguard Worker     let crate_dir = env::var_os("CARGO_MANIFEST_DIR").unwrap();
78*8fb009dcSAndroid Build Coastguard Worker     return Path::new(&crate_dir).join("../../build");
79*8fb009dcSAndroid Build Coastguard Worker }
80*8fb009dcSAndroid Build Coastguard Worker 
get_cpp_runtime_lib() -> Option<String>81*8fb009dcSAndroid Build Coastguard Worker fn get_cpp_runtime_lib() -> Option<String> {
82*8fb009dcSAndroid Build Coastguard Worker     println!("cargo:rerun-if-env-changed=BORINGSSL_RUST_CPPLIB");
83*8fb009dcSAndroid Build Coastguard Worker 
84*8fb009dcSAndroid Build Coastguard Worker     if let Ok(cpp_lib) = env::var("BORINGSSL_RUST_CPPLIB") {
85*8fb009dcSAndroid Build Coastguard Worker         return Some(cpp_lib);
86*8fb009dcSAndroid Build Coastguard Worker     }
87*8fb009dcSAndroid Build Coastguard Worker 
88*8fb009dcSAndroid Build Coastguard Worker     if env::var_os("CARGO_CFG_UNIX").is_some() {
89*8fb009dcSAndroid Build Coastguard Worker         match env::var("CARGO_CFG_TARGET_OS").unwrap().as_ref() {
90*8fb009dcSAndroid Build Coastguard Worker             "macos" => Some("c++".into()),
91*8fb009dcSAndroid Build Coastguard Worker             _ => Some("stdc++".into()),
92*8fb009dcSAndroid Build Coastguard Worker         }
93*8fb009dcSAndroid Build Coastguard Worker     } else {
94*8fb009dcSAndroid Build Coastguard Worker         None
95*8fb009dcSAndroid Build Coastguard Worker     }
96*8fb009dcSAndroid Build Coastguard Worker }
97*8fb009dcSAndroid Build Coastguard Worker 
main()98*8fb009dcSAndroid Build Coastguard Worker fn main() {
99*8fb009dcSAndroid Build Coastguard Worker     let bssl_build_dir = get_bssl_build_dir();
100*8fb009dcSAndroid Build Coastguard Worker     let bssl_sys_build_dir = bssl_build_dir.join("rust/bssl-sys");
101*8fb009dcSAndroid Build Coastguard Worker     let target = env::var("TARGET").unwrap();
102*8fb009dcSAndroid Build Coastguard Worker 
103*8fb009dcSAndroid Build Coastguard Worker     // Find the bindgen generated target platform bindings file and set BINDGEN_RS_FILE
104*8fb009dcSAndroid Build Coastguard Worker     let bindgen_file = bssl_sys_build_dir.join(format!("wrapper_{}.rs", target));
105*8fb009dcSAndroid Build Coastguard Worker     println!("cargo:rustc-env=BINDGEN_RS_FILE={}", bindgen_file.display());
106*8fb009dcSAndroid Build Coastguard Worker 
107*8fb009dcSAndroid Build Coastguard Worker     // Statically link libraries.
108*8fb009dcSAndroid Build Coastguard Worker     println!(
109*8fb009dcSAndroid Build Coastguard Worker         "cargo:rustc-link-search=native={}",
110*8fb009dcSAndroid Build Coastguard Worker         bssl_build_dir.join("crypto").display()
111*8fb009dcSAndroid Build Coastguard Worker     );
112*8fb009dcSAndroid Build Coastguard Worker     println!("cargo:rustc-link-lib=static=crypto");
113*8fb009dcSAndroid Build Coastguard Worker 
114*8fb009dcSAndroid Build Coastguard Worker     println!(
115*8fb009dcSAndroid Build Coastguard Worker         "cargo:rustc-link-search=native={}",
116*8fb009dcSAndroid Build Coastguard Worker         bssl_build_dir.join("ssl").display()
117*8fb009dcSAndroid Build Coastguard Worker     );
118*8fb009dcSAndroid Build Coastguard Worker     println!("cargo:rustc-link-lib=static=ssl");
119*8fb009dcSAndroid Build Coastguard Worker 
120*8fb009dcSAndroid Build Coastguard Worker     println!(
121*8fb009dcSAndroid Build Coastguard Worker         "cargo:rustc-link-search=native={}",
122*8fb009dcSAndroid Build Coastguard Worker         bssl_sys_build_dir.display()
123*8fb009dcSAndroid Build Coastguard Worker     );
124*8fb009dcSAndroid Build Coastguard Worker     println!("cargo:rustc-link-lib=static=rust_wrapper");
125*8fb009dcSAndroid Build Coastguard Worker 
126*8fb009dcSAndroid Build Coastguard Worker     if let Some(cpp_lib) = get_cpp_runtime_lib() {
127*8fb009dcSAndroid Build Coastguard Worker         println!("cargo:rustc-link-lib={}", cpp_lib);
128*8fb009dcSAndroid Build Coastguard Worker     }
129*8fb009dcSAndroid Build Coastguard Worker 
130*8fb009dcSAndroid Build Coastguard Worker     println!("cargo:conf={}", OSSL_CONF_DEFINES.join(","));
131*8fb009dcSAndroid Build Coastguard Worker }
132