xparallel 0.1.3

XCENA cpp pxl wrapper Library
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_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");
    // }
}