xref: /aosp_15_r20/external/crosvm/net_util/build.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2020 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 SLIRP_LIB: &str = "libslirp.lib";
7*bb4ee6a4SAndroid Build Coastguard Worker static SLIRP_DLL: &str = "libslirp-0.dll";
8*bb4ee6a4SAndroid Build Coastguard Worker static GLIB_FILENAME: &str = "libglib-2.0.dll.a";
9*bb4ee6a4SAndroid Build Coastguard Worker 
main()10*bb4ee6a4SAndroid Build Coastguard Worker fn main() {
11*bb4ee6a4SAndroid Build Coastguard Worker     // We (the Windows crosvm maintainers) submitted upstream patches to libslirp-sys so it doesn't
12*bb4ee6a4SAndroid Build Coastguard Worker     // try to link directly on Windows. This is because linking on Windows tends to be specific
13*bb4ee6a4SAndroid Build Coastguard Worker     // to the build system that invokes Cargo (e.g. the crosvm jCI scripts that also produce the
14*bb4ee6a4SAndroid Build Coastguard Worker     // required libslirp DLL & lib). The integration here (win_slirp::main) is specific to crosvm's
15*bb4ee6a4SAndroid Build Coastguard Worker     // build process.
16*bb4ee6a4SAndroid Build Coastguard Worker     if std::env::var("CARGO_CFG_WINDOWS").is_ok() {
17*bb4ee6a4SAndroid Build Coastguard Worker         let version = std::fs::read_to_string(PREBUILTS_VERSION_FILENAME)
18*bb4ee6a4SAndroid Build Coastguard Worker             .unwrap()
19*bb4ee6a4SAndroid Build Coastguard Worker             .trim()
20*bb4ee6a4SAndroid Build Coastguard Worker             .parse::<u32>()
21*bb4ee6a4SAndroid Build Coastguard Worker             .unwrap();
22*bb4ee6a4SAndroid Build Coastguard Worker         // TODO(b:242204245) build libslirp locally on windows from build.rs.
23*bb4ee6a4SAndroid Build Coastguard Worker         let mut libs = vec![SLIRP_DLL, SLIRP_LIB];
24*bb4ee6a4SAndroid Build Coastguard Worker         if std::env::var("CARGO_CFG_TARGET_ENV") == Ok("gnu".to_string()) {
25*bb4ee6a4SAndroid Build Coastguard Worker             libs.push(GLIB_FILENAME);
26*bb4ee6a4SAndroid Build Coastguard Worker         }
27*bb4ee6a4SAndroid Build Coastguard Worker         prebuilts::download_prebuilts("libslirp", version, &libs).unwrap();
28*bb4ee6a4SAndroid Build Coastguard Worker     }
29*bb4ee6a4SAndroid Build Coastguard Worker 
30*bb4ee6a4SAndroid Build Coastguard Worker     // For unix, libslirp-sys's build script will make the appropriate linking calls to pkg_config.
31*bb4ee6a4SAndroid Build Coastguard Worker }
32