xparallel 0.1.1

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 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");
    // }
}