diff --git a/services/tunnelbroker/build.rs b/services/tunnelbroker/build.rs new file mode 100644 --- /dev/null +++ b/services/tunnelbroker/build.rs @@ -0,0 +1,54 @@ +use cxx_build::CFG; +use glob::glob; +use std::fs; +use std::path::Path; + +fn get_cpp_sources(path: &str) -> Vec { + let mut sources = vec![]; + let files = glob(String::from(path.to_owned() + "/**/*.cpp").as_str()) + .expect("Error gathering .cpp file paths"); + for entry in files { + sources.push(entry.unwrap().display().to_string()); + } + sources +} + +fn add_import_path(import_path: &str) { + let shared_headers_import_path = + fs::canonicalize(import_path).expect("Error getting full import path"); + CFG.exported_header_dirs.push(&shared_headers_import_path); +} + +fn main() { + add_import_path("../lib/src"); + add_import_path("src/libcpp/src"); + add_import_path("src/libcpp/src/Amqp"); + add_import_path("src/libcpp/src/Database"); + add_import_path("src/libcpp/src/DeliveryBroker"); + add_import_path("src/libcpp/src/Tools"); + + cxx_build::bridge("src/main.rs") + .files(get_cpp_sources("../lib/src")) + .files(get_cpp_sources("src/libcpp/src")) + .file(Path::new("src/libcpp/Tunnelbroker.cpp")) + .flag_if_supported("-std=c++17") + .flag_if_supported("-w") + .compile("tunnelbroker"); + + println!("cargo:rustc-link-lib=boost_program_options"); + println!("cargo:rustc-link-lib=boost_system"); + println!("cargo:rustc-link-lib=folly"); + println!("cargo:rustc-link-lib=double-conversion"); + println!("cargo:rustc-link-lib=gflags"); + println!("cargo:rustc-link-lib=amqpcpp"); + println!("cargo:rustc-link-lib=glog"); + println!("cargo:rustc-link-lib=cryptopp"); + println!("cargo:rustc-link-lib=ssl"); + println!("cargo:rustc-link-lib=uv"); + println!("cargo:rustc-link-lib=aws-cpp-sdk-core"); + println!("cargo:rustc-link-lib=aws-cpp-sdk-dynamodb"); + + println!("cargo:rerun-if-changed=src/main.rs"); + println!("cargo:rerun-if-changed=src/libcpp/Tunnelbroker.h"); + println!("cargo:rerun-if-changed=src/libcpp/Tunnelbroker.cpp"); +}