xref: /aosp_15_r20/external/crosvm/sandbox/build.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2022 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker 
5*bb4ee6a4SAndroid Build Coastguard Worker static PREBUILTS_VERSION_FILENAME: &str = "prebuilts_version";
6*bb4ee6a4SAndroid Build Coastguard Worker static SANDBOX_LIB: &str = "libsandbox.lib";
7*bb4ee6a4SAndroid Build Coastguard Worker 
8*bb4ee6a4SAndroid Build Coastguard Worker static BINDINGS_FILE: &str = "bindings.rs";
9*bb4ee6a4SAndroid Build Coastguard Worker 
setup_windows_prebuilts()10*bb4ee6a4SAndroid Build Coastguard Worker pub fn setup_windows_prebuilts() {
11*bb4ee6a4SAndroid Build Coastguard Worker     println!("cargo:rustc-link-lib=dbghelp");
12*bb4ee6a4SAndroid Build Coastguard Worker     println!("cargo:rustc-link-lib=gdi32");
13*bb4ee6a4SAndroid Build Coastguard Worker     println!("cargo:rustc-link-lib=oleaut32");
14*bb4ee6a4SAndroid Build Coastguard Worker     println!("cargo:rustc-link-lib=setupapi");
15*bb4ee6a4SAndroid Build Coastguard Worker     println!("cargo:rustc-link-lib=shell32");
16*bb4ee6a4SAndroid Build Coastguard Worker     println!("cargo:rustc-link-lib=user32");
17*bb4ee6a4SAndroid Build Coastguard Worker     println!("cargo:rustc-link-lib=winmm");
18*bb4ee6a4SAndroid Build Coastguard Worker 
19*bb4ee6a4SAndroid Build Coastguard Worker     if std::env::var("CARGO_CFG_DEBUG_ASSERTIONS").is_ok() {
20*bb4ee6a4SAndroid Build Coastguard Worker         println!("cargo:rustc-link-lib=ucrtd");
21*bb4ee6a4SAndroid Build Coastguard Worker     }
22*bb4ee6a4SAndroid Build Coastguard Worker 
23*bb4ee6a4SAndroid Build Coastguard Worker     println!("cargo:rustc-link-lib=libsandbox");
24*bb4ee6a4SAndroid Build Coastguard Worker 
25*bb4ee6a4SAndroid Build Coastguard Worker     println!("cargo:rerun-if-changed={}", BINDINGS_FILE);
26*bb4ee6a4SAndroid Build Coastguard Worker }
27*bb4ee6a4SAndroid Build Coastguard Worker 
main()28*bb4ee6a4SAndroid Build Coastguard Worker fn main() {
29*bb4ee6a4SAndroid Build Coastguard Worker     if std::env::var("CARGO_CFG_WINDOWS").is_ok() {
30*bb4ee6a4SAndroid Build Coastguard Worker         let version = std::fs::read_to_string(PREBUILTS_VERSION_FILENAME)
31*bb4ee6a4SAndroid Build Coastguard Worker             .unwrap()
32*bb4ee6a4SAndroid Build Coastguard Worker             .trim()
33*bb4ee6a4SAndroid Build Coastguard Worker             .parse::<u32>()
34*bb4ee6a4SAndroid Build Coastguard Worker             .unwrap();
35*bb4ee6a4SAndroid Build Coastguard Worker 
36*bb4ee6a4SAndroid Build Coastguard Worker         // TODO(b:253039132) build sandbox prebuilts locally on windows from build.rs.
37*bb4ee6a4SAndroid Build Coastguard Worker         let files = prebuilts::download_prebuilts("sandbox", version, &[SANDBOX_LIB]).unwrap();
38*bb4ee6a4SAndroid Build Coastguard Worker         println!(
39*bb4ee6a4SAndroid Build Coastguard Worker             r#"cargo:rustc-link-search={};{}"#,
40*bb4ee6a4SAndroid Build Coastguard Worker             std::env::var("PATH").unwrap(),
41*bb4ee6a4SAndroid Build Coastguard Worker             files
42*bb4ee6a4SAndroid Build Coastguard Worker                 .get(0)
43*bb4ee6a4SAndroid Build Coastguard Worker                 .unwrap()
44*bb4ee6a4SAndroid Build Coastguard Worker                 .parent()
45*bb4ee6a4SAndroid Build Coastguard Worker                 .unwrap()
46*bb4ee6a4SAndroid Build Coastguard Worker                 .as_os_str()
47*bb4ee6a4SAndroid Build Coastguard Worker                 .to_str()
48*bb4ee6a4SAndroid Build Coastguard Worker                 .unwrap()
49*bb4ee6a4SAndroid Build Coastguard Worker         );
50*bb4ee6a4SAndroid Build Coastguard Worker         setup_windows_prebuilts();
51*bb4ee6a4SAndroid Build Coastguard Worker     }
52*bb4ee6a4SAndroid Build Coastguard Worker }
53