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