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 Workerfn 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