xref: /aosp_15_r20/external/crosvm/rutabaga_gfx/ffi/build.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2023 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 use std::env;
6*bb4ee6a4SAndroid Build Coastguard Worker use std::fs::File;
7*bb4ee6a4SAndroid Build Coastguard Worker use std::io::Write;
8*bb4ee6a4SAndroid Build Coastguard Worker 
main()9*bb4ee6a4SAndroid Build Coastguard Worker fn main() {
10*bb4ee6a4SAndroid Build Coastguard Worker     let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap();
11*bb4ee6a4SAndroid Build Coastguard Worker 
12*bb4ee6a4SAndroid Build Coastguard Worker     // Override prefix from environment variable (with a default)
13*bb4ee6a4SAndroid Build Coastguard Worker     let prefix = format!(
14*bb4ee6a4SAndroid Build Coastguard Worker         r##"prefix={prefix}"##,
15*bb4ee6a4SAndroid Build Coastguard Worker         prefix = env::var("PREFIX").unwrap_or_else(|_| "/usr".to_string())
16*bb4ee6a4SAndroid Build Coastguard Worker     );
17*bb4ee6a4SAndroid Build Coastguard Worker 
18*bb4ee6a4SAndroid Build Coastguard Worker     // Generate .pc file contents
19*bb4ee6a4SAndroid Build Coastguard Worker     let pc_contents = format!(
20*bb4ee6a4SAndroid Build Coastguard Worker         "{}{}",
21*bb4ee6a4SAndroid Build Coastguard Worker         prefix,
22*bb4ee6a4SAndroid Build Coastguard Worker         r###"
23*bb4ee6a4SAndroid Build Coastguard Worker exec_prefix=${prefix}
24*bb4ee6a4SAndroid Build Coastguard Worker includedir=${prefix}/include
25*bb4ee6a4SAndroid Build Coastguard Worker libdir=${exec_prefix}/lib
26*bb4ee6a4SAndroid Build Coastguard Worker 
27*bb4ee6a4SAndroid Build Coastguard Worker Name: rutabaga_gfx_ffi
28*bb4ee6a4SAndroid Build Coastguard Worker Description: C FFI bindings to Rutabaga VGI
29*bb4ee6a4SAndroid Build Coastguard Worker Version: 0.1.3
30*bb4ee6a4SAndroid Build Coastguard Worker Cflags: -I${includedir}
31*bb4ee6a4SAndroid Build Coastguard Worker Libs: -L${libdir} -lrutabaga_gfx_ffi
32*bb4ee6a4SAndroid Build Coastguard Worker "###,
33*bb4ee6a4SAndroid Build Coastguard Worker     );
34*bb4ee6a4SAndroid Build Coastguard Worker 
35*bb4ee6a4SAndroid Build Coastguard Worker     // Write the .pc file to the output directory
36*bb4ee6a4SAndroid Build Coastguard Worker     let mut pc_file = File::create(format!(
37*bb4ee6a4SAndroid Build Coastguard Worker         "{}/{}/rutabaga_gfx_ffi.pc",
38*bb4ee6a4SAndroid Build Coastguard Worker         env::var("CARGO_TARGET_DIR").as_deref().unwrap_or("target"),
39*bb4ee6a4SAndroid Build Coastguard Worker         env::var("PROFILE").unwrap()
40*bb4ee6a4SAndroid Build Coastguard Worker     ))
41*bb4ee6a4SAndroid Build Coastguard Worker     .unwrap();
42*bb4ee6a4SAndroid Build Coastguard Worker     pc_file.write_all(pc_contents.as_bytes()).unwrap();
43*bb4ee6a4SAndroid Build Coastguard Worker 
44*bb4ee6a4SAndroid Build Coastguard Worker     println!("cargo:rerun-if-changed=build.rs"); // Rebuild if build.rs changes
45*bb4ee6a4SAndroid Build Coastguard Worker 
46*bb4ee6a4SAndroid Build Coastguard Worker     if target_os.contains("linux") || target_os.contains("nto") {
47*bb4ee6a4SAndroid Build Coastguard Worker         println!("cargo:rustc-cdylib-link-arg=-Wl,-soname,librutabaga_gfx_ffi.so.0");
48*bb4ee6a4SAndroid Build Coastguard Worker     }
49*bb4ee6a4SAndroid Build Coastguard Worker }
50