Skip to content

Commit 39c1728

Browse files
authored
No static libs (#95)
* don't build or copy the static filename * completely remove all cargo invocations or dependencies on compile time environment varibles. Specific the artifact path externally * first stab at modified CI script * change to how doxygen docs are built * you have to run the Java tests ATM to produce the docs * add ability to set the target triple when not building for host * don't package FFI libs into the nuget that don't have a platform string * map 2 MUSL targets to .NET rids * simplify the defaults so that it's easy to use the CI script when developing
1 parent f78827d commit 39c1728

File tree

11 files changed

+124
-241
lines changed

11 files changed

+124
-241
lines changed

.github/workflows/ci.yml

Lines changed: 18 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -79,29 +79,17 @@ jobs:
7979
toolchain: stable
8080
override: true
8181
- name: Install doxygen 1.9.3
82-
run: wget -q https://www.doxygen.nl/files/doxygen-1.9.3.linux.bin.tar.gz -O- | sudo tar --strip-components=1 -C /usr -xz doxygen-1.9.3
82+
run: wget -q https://www.doxygen.nl/files/doxygen-1.9.5.linux.bin.tar.gz -O- | sudo tar --strip-components=1 -C /usr -xz doxygen-1.9.5
8383
- name: Caching
8484
uses: Swatinem/rust-cache@v1
85-
- name: Build
86-
uses: actions-rs/cargo@v1
87-
with:
88-
command: build
89-
args: --release
85+
- name: Build FFI and JNI shared libraries
86+
run: cargo build --release -p foo-ffi -p foo-ffi-java
9087
- name: C bindings
91-
uses: actions-rs/cargo@v1
92-
with:
93-
command: run
94-
args: --release --bin foo-bindings -- --c --doxygen
88+
run: cargo run --release --bin foo-bindings -- --doxygen --c --no-tests -a ./target/release
9589
- name: .NET bindings
96-
uses: actions-rs/cargo@v1
97-
with:
98-
command: run
99-
args: --release --bin foo-bindings -- --dotnet --doxygen
90+
run: cargo run --release --bin foo-bindings -- --doxygen --dotnet --no-tests -a ./target/release
10091
- name: Java bindings
101-
uses: actions-rs/cargo@v1
102-
with:
103-
command: run
104-
args: --release --bin foo-bindings -- --java
92+
run: cargo run --release --bin foo-bindings -- --java -a ./target/release
10593
- name: Extract documentation
10694
run: |
10795
mkdir -p ~/doc
@@ -144,20 +132,11 @@ jobs:
144132
- name: Build FFI and JNI
145133
run: cargo build -p foo-ffi -p foo-ffi-java --release --target ${{ matrix.target }}
146134
- name: C bindings
147-
uses: actions-rs/cargo@v1
148-
with:
149-
command: run
150-
args: --release --target ${{ matrix.target }} --bin foo-bindings -- --c ${{ matrix.extra-params }}
135+
run: cargo run --release --bin foo-bindings -- --c ${{ matrix.extra-params }} -r ${{ matrix.target }} -a ./target/${{ matrix.target }}/release
151136
- name: .NET bindings
152-
uses: actions-rs/cargo@v1
153-
with:
154-
command: run
155-
args: --release --target ${{ matrix.target }} --bin foo-bindings -- --dotnet ${{ matrix.extra-params }}
137+
run: cargo run --release --bin foo-bindings -- --dotnet ${{ matrix.extra-params }} -r ${{ matrix.target }} -a ./target/${{ matrix.target }}/release
156138
- name: Java bindings
157-
uses: actions-rs/cargo@v1
158-
with:
159-
command: run
160-
args: --release --target ${{ matrix.target }} --bin foo-bindings -- --java ${{ matrix.extra-params }}
139+
run: cargo run --release --bin foo-bindings -- --java ${{ matrix.extra-params }} -r ${{ matrix.target }} -a ./target/${{ matrix.target }}/release
161140
- name: Upload compiled FFI modules
162141
uses: actions/upload-artifact@v2
163142
with:
@@ -190,20 +169,11 @@ jobs:
190169
- name: Build FFI and JNI
191170
run: cargo build -p foo-ffi -p foo-ffi-java --release
192171
- name: C bindings
193-
uses: actions-rs/cargo@v1
194-
with:
195-
command: run
196-
args: --release --bin foo-bindings -- --c
172+
run: cargo run --release --bin foo-bindings -- --c
197173
- name: .NET bindings
198-
uses: actions-rs/cargo@v1
199-
with:
200-
command: run
201-
args: --release --bin foo-bindings -- --dotnet
174+
run: cargo run --release --bin foo-bindings -- --dotnet
202175
- name: Java bindings
203-
uses: actions-rs/cargo@v1
204-
with:
205-
command: run
206-
args: --release --bin foo-bindings -- --java
176+
run: cargo run --release --bin foo-bindings -- --java
207177
- name: Upload compiled FFI modules
208178
uses: actions/upload-artifact@v2
209179
with:
@@ -243,20 +213,12 @@ jobs:
243213
override: true
244214
- name: Install Rust Cross
245215
run: cargo install cross
246-
- name: Build FFI and JNI
216+
- name: Build FFI and JNI shared libraries
247217
run: cross build -p foo-ffi -p foo-ffi-java --release --target ${{ matrix.target }}
248-
- name: C bindings
249-
uses: actions-rs/cargo@v1
250-
with:
251-
use-cross: true
252-
command: run
253-
args: --release --target ${{ matrix.target }} --bin foo-bindings -- --c --no-tests
254-
- name: Java bindings
255-
uses: actions-rs/cargo@v1
256-
with:
257-
use-cross: true
258-
command: run
259-
args: --release --target ${{ matrix.target }} --bin foo-bindings -- --java --no-tests
218+
- name: Generate C bindings
219+
run: cargo run --release --bin foo-bindings -- --c --no-tests -r ${{ matrix.target }} -a ./target/${{ matrix.target }}/release
220+
- name: Generate Java bindings
221+
run: cargo run --release --bin foo-bindings -- --java --no-tests -r ${{ matrix.target }} -a ./target/${{ matrix.target }}/release
260222
- name: Upload compiled FFI modules
261223
uses: actions/upload-artifact@v2
262224
with:
@@ -293,10 +255,7 @@ jobs:
293255
name: ffi-modules
294256
path: ffi-modules
295257
- name: Package all bindings
296-
uses: actions-rs/cargo@v1
297-
with:
298-
command: run
299-
args: --bin foo-bindings -- --package ./ffi-modules
258+
run: cargo run --bin foo-bindings -- --package ./ffi-modules
300259
- name: Upload .NET bindings
301260
uses: actions/upload-artifact@v2
302261
with:

ci-script/build.rs

Lines changed: 0 additions & 15 deletions
This file was deleted.

ci-script/src/builders/c.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ impl BindingBuilder for CBindingBuilder {
4242
output_dir: self.output_dir(),
4343
ffi_target_name: self.settings.ffi_target_name,
4444
ffi_name: self.settings.ffi_name,
45-
is_release: env!("PROFILE") == "release",
4645
extra_files: self.extra_files.clone(),
4746
platform_location: platform.clone(),
4847
generate_doxygen,

ci-script/src/builders/dotnet.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{BindingBuilder, BindingBuilderSettings};
22
use dotnet_oo_bindgen::TargetFramework;
3-
use oo_bindgen::backend::PlatformLocations;
3+
use oo_bindgen::backend::{logged, PlatformLocations};
44
use std::path::PathBuf;
55
use std::process::Command;
66

@@ -48,7 +48,7 @@ impl BindingBuilder for DotnetBindingBuilder {
4848
if build_dir.exists() {
4949
std::fs::remove_dir_all(&build_dir).unwrap();
5050
}
51-
std::fs::create_dir_all(&build_dir).unwrap();
51+
logged::create_dir_all(&build_dir).unwrap();
5252

5353
let config = dotnet_oo_bindgen::DotnetBindgenConfig {
5454
output_dir: build_dir,

ci-script/src/builders/java.rs

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ impl BindingBuilder for JavaBindingBuilder {
5353
"java"
5454
}
5555

56-
fn generate(&mut self, is_packaging: bool, _generate_doxygen: bool) {
56+
fn generate(&mut self, _is_packaging: bool, _generate_doxygen: bool) {
5757
let config = java_oo_bindgen::JavaBindgenConfig {
5858
java_output_dir: self.java_build_dir(),
5959
ffi_name: self.settings.ffi_name,
@@ -63,20 +63,6 @@ impl BindingBuilder for JavaBindingBuilder {
6363
platforms: self.platforms.clone(),
6464
};
6565

66-
// Generate Java JNI shared library if we are not packaging
67-
if !is_packaging {
68-
let mut cmd = Command::new("cargo");
69-
70-
cmd.args(&["build", "-p", self.settings.jni_target_name]);
71-
72-
if env!("PROFILE") == "release" {
73-
cmd.arg("--release");
74-
}
75-
76-
let result = cmd.status().unwrap();
77-
assert!(result.success());
78-
}
79-
8066
// Clear/create Java generated files
8167
let build_dir = self.java_build_dir();
8268
if build_dir.exists() {

ci-script/src/cli.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ pub(crate) struct Args {
1414
/// build the Java bindings
1515
#[arg(long = "java", default_value_t = false)]
1616
pub(crate) build_java: bool,
17+
/// Path to where the compiled FFI/JNI shared libraries reside or a directory with multiple target triple dirs if packaging.
18+
/// If not specified, ./release/target is assumed
19+
#[arg(long = "artifact-dir", short = 'a')]
20+
pub(crate) artifact_dir: Option<PathBuf>,
21+
/// Target triple to use to lookup the platform for generation, otherwise assume the HOST platform.
22+
#[arg(long = "target", short = 'r')]
23+
pub(crate) target_triple: Option<String>,
1724
/// Target .NET framework, which indirectly determines the C# language version
1825
#[arg(value_enum, short = 't', long = "target-dotnet-framework", default_value_t = TargetFramework::NetStandard2_0)]
1926
pub(crate) target_framework: TargetFramework,
@@ -24,8 +31,8 @@ pub(crate) struct Args {
2431
#[arg(long = "no-tests", default_value_t = false)]
2532
pub(crate) no_tests: bool,
2633
/// Generate package from the provided directory
27-
#[arg(long = "package")]
28-
pub(crate) package: Option<PathBuf>,
34+
#[arg(long = "package", short = 'k')]
35+
pub(crate) package_dir: Option<PathBuf>,
2936
/// Path(s) to extra files to include in the generated bindings
3037
#[arg(short = 'f', long = "extra-files")]
3138
pub(crate) extra_files: Vec<PathBuf>,

ci-script/src/lib.rs

Lines changed: 44 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use std::rc::Rc;
1111
use oo_bindgen::backend::*;
1212
use oo_bindgen::model::Library;
1313

14+
use crate::cli::Args;
1415
use clap::Parser;
1516

1617
const SUPPORTED_PLATFORMS: &[&Platform] = &[
@@ -30,18 +31,16 @@ fn is_officially_supported(p: &Platform) -> bool {
3031
}
3132

3233
pub fn run(settings: BindingBuilderSettings) {
33-
let args = crate::cli::Args::parse();
34+
let args: Args = crate::cli::Args::parse();
3435

3536
let mut run_tests = !args.no_tests;
3637

3738
// if no languages are selected, we build all of them
3839
let run_all = !args.build_c && !args.build_dotnet && !args.build_java;
3940

40-
let package = args.package.is_some();
41-
4241
let mut platforms = PlatformLocations::new();
43-
if let Some(package_src) = args.package {
44-
for entry in fs::read_dir(package_src).unwrap() {
42+
if let Some(dir) = &args.package_dir {
43+
for entry in fs::read_dir(dir).unwrap() {
4544
let entry = entry.unwrap();
4645
let path = entry.path();
4746
if path.is_dir() {
@@ -51,14 +50,40 @@ pub fn run(settings: BindingBuilderSettings) {
5150
}
5251
}
5352
} else {
54-
let current_platform =
55-
Platform::guess_current().expect("could not determine current platform");
56-
platforms.add(current_platform.clone(), ffi_path());
53+
let artifact_dir = match args.artifact_dir {
54+
Some(x) => {
55+
tracing::info!("Artifact dir is {}", x.display());
56+
x
57+
}
58+
None => {
59+
let x: PathBuf = "./target/release".into();
60+
tracing::info!("No artifact dir specified, assuming: {}", x.display());
61+
x
62+
}
63+
};
64+
65+
let platform = match args.target_triple {
66+
None => {
67+
let platform =
68+
Platform::guess_current().expect("Could not determine current platform");
69+
tracing::info!(
70+
"No target platform specified assuming target is the host platform: {}",
71+
platform
72+
);
73+
platform
74+
}
75+
Some(tt) => match Platform::find(&tt) {
76+
None => panic!("Unable to determine Platform from target triple: {}", tt),
77+
Some(x) => x,
78+
},
79+
};
80+
81+
platforms.add(platform.clone(), artifact_dir);
5782

58-
if !is_officially_supported(current_platform) {
83+
if !is_officially_supported(platform) {
5984
println!(
6085
"WARNING: building for an unsupported platform: {}",
61-
current_platform.target_triple
86+
platform.target_triple
6287
);
6388
if run_tests {
6489
println!("Skipping tests an unsupported platform");
@@ -67,15 +92,21 @@ pub fn run(settings: BindingBuilderSettings) {
6792
}
6893
}
6994

95+
let is_packaging = args.package_dir.is_some();
96+
7097
assert!(!platforms.is_empty(), "No platforms found!");
7198

99+
for p in platforms.iter() {
100+
tracing::info!("Platform {} in {}", p.platform, p.location.display());
101+
}
102+
72103
if args.build_c || run_all {
73104
let mut builder = crate::builders::c::CBindingBuilder::new(
74105
settings.clone(),
75106
platforms.clone(),
76107
&args.extra_files,
77108
);
78-
builder.run(run_tests, package, args.generate_doxygen);
109+
builder.run(run_tests, is_packaging, args.generate_doxygen);
79110
}
80111
if args.build_dotnet || run_all {
81112
let mut builder = crate::builders::dotnet::DotnetBindingBuilder::new(
@@ -84,19 +115,15 @@ pub fn run(settings: BindingBuilderSettings) {
84115
platforms.clone(),
85116
&args.extra_files,
86117
);
87-
builder.run(run_tests, package, args.generate_doxygen);
118+
builder.run(run_tests, is_packaging, args.generate_doxygen);
88119
}
89120
if args.build_java || run_all {
90121
let mut builder =
91122
crate::builders::java::JavaBindingBuilder::new(settings, platforms, &args.extra_files);
92-
builder.run(run_tests, package, args.generate_doxygen);
123+
builder.run(run_tests, is_packaging, args.generate_doxygen);
93124
}
94125
}
95126

96-
fn ffi_path() -> PathBuf {
97-
[env!("TARGET_DIR"), "deps"].iter().collect()
98-
}
99-
100127
#[derive(Clone)]
101128
pub struct BindingBuilderSettings {
102129
/// FFI target name (as specified in with `cargo build -p <...>`)

0 commit comments

Comments
 (0)