Skip to content

Commit 1692024

Browse files
authored
Break up the monolithic lib.rs into language specific functionality (#90)
* split language builders out into their own modules * optimizations * fix lint
1 parent 23d39d6 commit 1692024

File tree

12 files changed

+436
-388
lines changed

12 files changed

+436
-388
lines changed

Cargo.lock

Lines changed: 56 additions & 34 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ci-script/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ oo-bindgen = { path = "../oo-bindgen" }
99
c-oo-bindgen = { path = "../generators/c-oo-bindgen" }
1010
dotnet-oo-bindgen = { path = "../generators/dotnet-oo-bindgen" }
1111
java-oo-bindgen = { path = "../generators/java-oo-bindgen" }
12-
clap = "2.33"
12+
clap = "3.2.17"
1313
pathdiff = "0.2"

ci-script/src/builders/c.rs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
use crate::{BindingBuilder, BindingBuilderSettings};
2+
use oo_bindgen::backend::PlatformLocations;
3+
use std::path::PathBuf;
4+
use std::process::Command;
5+
6+
pub(crate) struct CBindingBuilder {
7+
settings: BindingBuilderSettings,
8+
platforms: PlatformLocations,
9+
extra_files: Vec<PathBuf>,
10+
}
11+
12+
impl CBindingBuilder {
13+
pub(crate) fn new(
14+
settings: BindingBuilderSettings,
15+
platforms: PlatformLocations,
16+
extra_files: &[PathBuf],
17+
) -> Self {
18+
Self {
19+
settings,
20+
platforms,
21+
extra_files: extra_files.to_vec(),
22+
}
23+
}
24+
25+
fn output_dir(&self) -> PathBuf {
26+
self.settings.destination_path.join("c/generated")
27+
}
28+
29+
fn build_dir(&self) -> PathBuf {
30+
self.settings.destination_path.join("c/build")
31+
}
32+
}
33+
34+
impl BindingBuilder for CBindingBuilder {
35+
fn name() -> &'static str {
36+
"c"
37+
}
38+
39+
fn generate(&mut self, _is_packaging: bool, generate_doxygen: bool) {
40+
for platform in self.platforms.iter() {
41+
let config = c_oo_bindgen::CBindgenConfig {
42+
output_dir: self.output_dir(),
43+
ffi_target_name: self.settings.ffi_target_name,
44+
ffi_name: self.settings.ffi_name,
45+
is_release: env!("PROFILE") == "release",
46+
extra_files: self.extra_files.clone(),
47+
platform_location: platform.clone(),
48+
generate_doxygen,
49+
};
50+
51+
c_oo_bindgen::generate_c_package(&self.settings.library, &config)
52+
.expect("failed to package C lib");
53+
}
54+
}
55+
56+
fn build(&mut self) {
57+
// Clear/create build directory
58+
let build_dir = self.build_dir();
59+
if build_dir.exists() {
60+
std::fs::remove_dir_all(&build_dir).unwrap();
61+
}
62+
std::fs::create_dir_all(&build_dir).unwrap();
63+
64+
// CMake configure
65+
let result = Command::new("cmake")
66+
.current_dir(&build_dir)
67+
.arg("..")
68+
.status()
69+
.expect("cmake failed");
70+
assert!(result.success());
71+
72+
// CMake build
73+
let result = Command::new("cmake")
74+
.current_dir(&build_dir)
75+
.args(&["--build", ".", "--config", "Debug"])
76+
.status()
77+
.expect("cmake failed");
78+
assert!(result.success());
79+
}
80+
81+
fn test(&mut self) {
82+
// Run unit tests
83+
let result = Command::new("ctest")
84+
.current_dir(&self.build_dir())
85+
.args(&[".", "-C", "Debug"])
86+
.status()
87+
.unwrap();
88+
assert!(result.success());
89+
}
90+
91+
fn package(&mut self) {
92+
// Already done in generate
93+
}
94+
}

ci-script/src/builders/dotnet.rs

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
use crate::{BindingBuilder, BindingBuilderSettings};
2+
use oo_bindgen::backend::PlatformLocations;
3+
use std::path::PathBuf;
4+
use std::process::Command;
5+
6+
pub(crate) struct DotnetBindingBuilder {
7+
settings: BindingBuilderSettings,
8+
platforms: PlatformLocations,
9+
extra_files: Vec<PathBuf>,
10+
}
11+
12+
impl DotnetBindingBuilder {
13+
pub(crate) fn new(
14+
settings: BindingBuilderSettings,
15+
platforms: PlatformLocations,
16+
extra_files: &[PathBuf],
17+
) -> Self {
18+
Self {
19+
settings,
20+
platforms,
21+
extra_files: extra_files.to_vec(),
22+
}
23+
}
24+
25+
fn output_dir(&self) -> PathBuf {
26+
self.settings.destination_path.join("dotnet")
27+
}
28+
29+
fn build_dir(&self) -> PathBuf {
30+
let mut output_dir = self.output_dir();
31+
output_dir.push(self.settings.library.settings.name.to_string());
32+
output_dir
33+
}
34+
}
35+
36+
impl BindingBuilder for DotnetBindingBuilder {
37+
fn name() -> &'static str {
38+
"dotnet"
39+
}
40+
41+
fn generate(&mut self, _is_packaging: bool, generate_doxygen: bool) {
42+
// Clear/create generated files
43+
let build_dir = self.build_dir();
44+
if build_dir.exists() {
45+
std::fs::remove_dir_all(&build_dir).unwrap();
46+
}
47+
std::fs::create_dir_all(&build_dir).unwrap();
48+
49+
let config = dotnet_oo_bindgen::DotnetBindgenConfig {
50+
output_dir: build_dir,
51+
ffi_name: self.settings.ffi_name,
52+
extra_files: self.extra_files.clone(),
53+
platforms: self.platforms.clone(),
54+
generate_doxygen,
55+
};
56+
57+
dotnet_oo_bindgen::generate_dotnet_bindings(&self.settings.library, &config).unwrap();
58+
}
59+
60+
fn build(&mut self) {
61+
let result = Command::new("dotnet")
62+
.current_dir(&self.output_dir())
63+
.arg("build")
64+
.arg("--configuration")
65+
.arg("Release")
66+
.status()
67+
.unwrap();
68+
assert!(result.success());
69+
}
70+
71+
fn test(&mut self) {
72+
// Run unit tests
73+
let result = Command::new("dotnet")
74+
.current_dir(&self.output_dir())
75+
.arg("test")
76+
.arg("--configuration")
77+
.arg("Release")
78+
.status()
79+
.unwrap();
80+
assert!(result.success());
81+
}
82+
83+
fn package(&mut self) {
84+
// Produce a nupkg
85+
let result = Command::new("dotnet")
86+
.current_dir(&self.output_dir())
87+
.arg("pack")
88+
.arg("--configuration")
89+
.arg("Release")
90+
.arg("--include-symbols")
91+
.arg("--output")
92+
.arg("nupkg")
93+
.status()
94+
.unwrap();
95+
assert!(result.success());
96+
}
97+
}

0 commit comments

Comments
 (0)