hbs_builder/
lib.rs

1extern crate cmake;
2extern crate pkg_config;
3
4use cmake::Config;
5use std::env;
6use std::path::PathBuf;
7
8pub fn find_or_build(lib: &str) {
9    match pkg_config::find_library(lib) {
10        Ok(_) => (),
11        Err(_) => {
12            let src = PathBuf::from(concat!(env!("CARGO_MANIFEST_DIR"), "/heartbeats-simple"));
13            let mut config = Config::new(&src);
14            config.define("BUILD_SHARED_LIBS", "false");
15
16            // check for Android
17            let target: String = env::var("TARGET").unwrap();
18            let target_parts: Vec<&str> = target.split('-').collect();
19            if target_parts[target_parts.len() - 1].starts_with("android") {
20                config.define("CMAKE_TOOLCHAIN_FILE",
21                              src.join("cmake-toolchain").join("android.toolchain.cmake"));
22            }
23
24            // build/install everything - the build is fast and portable enough
25            // cmake crate makes it too troublesome to do individual targets since it expects to install
26            let dst: PathBuf = config.build();
27            // none of the libraries have transitive dependencies
28            println!("cargo:rustc-link-lib=static={}", lib);
29            println!("cargo:rustc-link-search=native={}", dst.join("lib").display());
30        },
31    }
32}