1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
use std::env;
use std::path::PathBuf;
fn main() {
// To make sure the build script runs every time
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed=src/lib.rs");
println!("cargo:rerun-if-changed=src/pxl_ffi.rs");
let profile = env::var("PROFILE").unwrap();
// let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); // sdk/rs/lib/build.rs
let xparallel_cpp_lib_dir =
env::var("XPARALLEL_CPP_LIB_DIR").unwrap_or_else(|_| "/usr/local/lib".to_string());
println!("XPARALLEL_CPP_LIB_DIR: {}", xparallel_cpp_lib_dir);
println!("cargo:rustc-link-search=native={}", xparallel_cpp_lib_dir);
let manifest_dir = PathBuf::from("/home/smshin/workspace/sdk/rs/lib"); // sdk/rs/lib/build.rs
// let xparallel_cpp_dir = manifest_dir.join("cpp"); // sdk/rs/lib/cpp
// let xparallel_cpp_build_dir;
let metisx_sdk_dir = manifest_dir.join("../../"); // sdk/rs/lib/../..
// let metisx_lib_dir; // sdk/out/build/debug/metisx/sim/libmetisx.so
// let metisx_sim_lib_dir; // sdk/out/build/debug/metisx/sim/libmetisx_sim.so
// if profile == "debug" {
// xparallel_cpp_build_dir = xparallel_cpp_dir.join("_build/debug");
// metisx_lib_dir = metisx_sdk_dir.join("out/build/debug/metisx");
// } else if profile == "release" {
// xparallel_cpp_build_dir = xparallel_cpp_dir.join("_build/release");
// metisx_lib_dir = metisx_sdk_dir.join("out/build/release/metisx");
// } else {
// panic!("Unknown profile");
// }
// metisx_sim_lib_dir = metisx_lib_dir.join("sim");
// let xparallel_cpp_out_lib_dir = xparallel_cpp_build_dir.join("xparallel");
// println!(
// "cargo:rustc-link-search=native={}",
// xparallel_cpp_out_lib_dir.to_str().unwrap()
// );
println!("cargo:rustc-link-lib=static:+whole-archive=xparallel_cpp");
// println!(
// "cargo:rustc-link-search=native={}",
// metisx_lib_dir.to_str().unwrap()
// );
// println!(
// "cargo:rustc-link-search=native={}",
// metisx_sim_lib_dir.to_str().unwrap()
// );
// specify runtime link path for dynamic library
// https://doc.rust-lang.org/cargo/reference/build-scripts.html#outputs-of-the-build-script
// or set LD_LIBRARY_PATH env var
// println!(
// "cargo:rustc-link-arg=-Wl,-rpath,{}",
// metisx_lib_dir.to_str().unwrap()
// );
// println!("cargo:rustc-link-lib=dylib=metisx");
// println!("cargo:rustc-link-lib=dylib=metisx_sim");
let pxl_lib_dir = "/usr/local/lib"; // sdk/pxl/lib/libpxl.so
println!("cargo:rustc-link-search=native={}", pxl_lib_dir);
let pxl_include_dir = metisx_sdk_dir.join("pxl/include/"); // sdk/pxl/include/pxl/pxl.hpp
// let metisx_lib_dir = metisx_sdk_dir.join("metisx");
cxx_build::bridge("src/pxl_ffi.rs")
.include(pxl_include_dir)
// .include(metisx_lib_dir) // sdk/metisx/sim/sim.h
.define("_SIM_", "1")
.compile("xparallel");
// let coverage: i32 = env::var("COVERAGE")
// .unwrap_or("0".to_string())
// .parse()
// .expect("Failed to parse COVERAGE as an integer");
// if coverage != 0 {
// println!("cargo:rustc-link-lib=dylib=gcov");
// }
}