Initial version allows for tests that actually run!
parent
c6eb7e3519
commit
a1604f49f0
|
@ -1,3 +1,5 @@
|
||||||
/target
|
/target
|
||||||
**/*.rs.bk
|
**/*.rs.bk
|
||||||
Cargo.lock
|
Cargo.lock
|
||||||
|
|
||||||
|
.idea/
|
||||||
|
|
13
Cargo.toml
13
Cargo.toml
|
@ -1,9 +1,16 @@
|
||||||
[package]
|
[package]
|
||||||
name = "aeron-driver-sys"
|
name = "libaeron_driver-sys"
|
||||||
version = "0.1.0"
|
version = "0.1.0+1.21.2"
|
||||||
authors = ["Bradlee Speice <bradlee@speice.io>"]
|
authors = ["Bradlee Speice <bradlee@speice.io>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
links = "aeron-driver"
|
links = "aeron_driver"
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
bindgen = "0.51"
|
||||||
|
cmake = "0.1"
|
||||||
|
|
||||||
|
[features]
|
||||||
|
static = []
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <aeronmd.h>
|
|
@ -0,0 +1,62 @@
|
||||||
|
use cmake::Config;
|
||||||
|
|
||||||
|
use std::env;
|
||||||
|
use std::path::{Path, PathBuf};
|
||||||
|
use std::fs::canonicalize;
|
||||||
|
|
||||||
|
pub enum LinkType {
|
||||||
|
Dynamic,
|
||||||
|
Static
|
||||||
|
}
|
||||||
|
|
||||||
|
impl LinkType {
|
||||||
|
fn detect() -> LinkType {
|
||||||
|
if cfg!(feature = "static") {
|
||||||
|
LinkType::Static
|
||||||
|
} else {
|
||||||
|
LinkType::Dynamic
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn link_lib(&self) -> &'static str {
|
||||||
|
match self {
|
||||||
|
LinkType::Dynamic => "dylib=",
|
||||||
|
LinkType::Static => "static="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn target_name(&self) -> &'static str {
|
||||||
|
match self {
|
||||||
|
LinkType::Dynamic => "aeron_driver",
|
||||||
|
LinkType::Static => "aeron_driver_static"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
println!("cargo:rerun-if-changed=build.rs");
|
||||||
|
println!("cargo:rerun-if-changed=bindings.h");
|
||||||
|
|
||||||
|
let aeron_path = canonicalize(Path::new("./aeron")).unwrap();
|
||||||
|
let header_path = aeron_path.join("aeron-driver/src/main/c");
|
||||||
|
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
|
||||||
|
|
||||||
|
let link_type = LinkType::detect();
|
||||||
|
println!("cargo:rustc-link-lib={}{}", link_type.link_lib(), link_type.target_name());
|
||||||
|
let lib_dir = Config::new(&aeron_path)
|
||||||
|
.build_target(link_type.target_name())
|
||||||
|
.build();
|
||||||
|
println!("cargo:rustc-link-search=native={}", lib_dir.join("build/lib").display());
|
||||||
|
|
||||||
|
println!("cargo:include={}", header_path.display());
|
||||||
|
let bindings = bindgen::Builder::default()
|
||||||
|
.clang_arg(&format!("-I{}", header_path.display()))
|
||||||
|
.header("bindings.h")
|
||||||
|
.whitelist_function("aeron_version_.*")
|
||||||
|
.generate()
|
||||||
|
.expect("Unable to generate aeron_driver bindings");
|
||||||
|
|
||||||
|
bindings
|
||||||
|
.write_to_file(out_path.join("bindings.rs"))
|
||||||
|
.expect("Couldn't write bindings!");
|
||||||
|
}
|
16
src/lib.rs
16
src/lib.rs
|
@ -1,7 +1,19 @@
|
||||||
|
#![allow(non_upper_case_globals)]
|
||||||
|
#![allow(non_camel_case_types)]
|
||||||
|
#![allow(non_snake_case)]
|
||||||
|
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn it_works() {
|
fn version_check() {
|
||||||
assert_eq!(2 + 2, 4);
|
let major = unsafe { crate::aeron_version_major() };
|
||||||
|
let minor = unsafe { crate::aeron_version_minor() };
|
||||||
|
let patch = unsafe { crate::aeron_version_patch() };
|
||||||
|
assert_eq!(major, 1);
|
||||||
|
assert_eq!(minor, 21);
|
||||||
|
assert_eq!(patch, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue