Remove the ffi-headers feature

Rely on a separate cbindgen instance instead, which is less self-contained but more practical.
This commit is contained in:
Oliver Hamlet
2024-04-30 23:29:31 +01:00
parent adeac2317c
commit c508533d4b
5 changed files with 14 additions and 191 deletions
+6 -2
View File
@@ -59,7 +59,9 @@ jobs:
# Need to rebuild the FFI wrapper so that its binary is given a filename # Need to rebuild the FFI wrapper so that its binary is given a filename
# without a hash. # without a hash.
- name: Build FFI wrapper - name: Build FFI wrapper
run: cargo build --manifest-path ffi/Cargo.toml --features ffi-headers run: |
cargo build --manifest-path ffi/Cargo.toml
cbindgen ffi/ -o ffi/include/loot_condition_interpreter.h
# Use bash because PowerShell doesn't fail if one command fails. # Use bash because PowerShell doesn't fail if one command fails.
- name: Build and run C++ tests - name: Build and run C++ tests
@@ -120,7 +122,9 @@ jobs:
# Need to rebuild the FFI wrapper so that its binary is given a filename # Need to rebuild the FFI wrapper so that its binary is given a filename
# without a hash. # without a hash.
- name: Build FFI wrapper - name: Build FFI wrapper
run: cargo build --manifest-path ffi/Cargo.toml --features ffi-headers run: |
cargo build --manifest-path ffi/Cargo.toml
cbindgen ffi/ -o ffi/include/loot_condition_interpreter.h
# Use bash because PowerShell doesn't fail if one command fails. # Use bash because PowerShell doesn't fail if one command fails.
- name: Build and run C++ tests - name: Build and run C++ tests
Generated
+7 -146
View File
@@ -23,29 +23,12 @@ version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc"
[[package]]
name = "atty"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
"hermit-abi 0.1.19",
"libc",
"winapi",
]
[[package]] [[package]]
name = "autocfg" name = "autocfg"
version = "1.2.0" version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80"
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "2.5.0" version = "2.5.0"
@@ -64,25 +47,6 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
[[package]]
name = "cbindgen"
version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da6bc11b07529f16944307272d5bd9b22530bc7d05751717c9d416586cedab49"
dependencies = [
"clap 3.2.25",
"heck",
"indexmap",
"log",
"proc-macro2",
"quote",
"serde",
"serde_json",
"syn 1.0.109",
"tempfile",
"toml",
]
[[package]] [[package]]
name = "cfg-if" name = "cfg-if"
version = "1.0.0" version = "1.0.0"
@@ -116,21 +80,6 @@ dependencies = [
"half", "half",
] ]
[[package]]
name = "clap"
version = "3.2.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
dependencies = [
"atty",
"bitflags 1.3.2",
"clap_lex 0.2.4",
"indexmap",
"strsim",
"termcolor",
"textwrap",
]
[[package]] [[package]]
name = "clap" name = "clap"
version = "4.5.4" version = "4.5.4"
@@ -147,16 +96,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4"
dependencies = [ dependencies = [
"anstyle", "anstyle",
"clap_lex 0.7.0", "clap_lex",
]
[[package]]
name = "clap_lex"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
dependencies = [
"os_str_bytes",
] ]
[[package]] [[package]]
@@ -183,7 +123,7 @@ dependencies = [
"anes", "anes",
"cast", "cast",
"ciborium", "ciborium",
"clap 4.5.4", "clap",
"criterion-plot", "criterion-plot",
"is-terminal", "is-terminal",
"itertools", "itertools",
@@ -307,50 +247,19 @@ dependencies = [
"crunchy", "crunchy",
] ]
[[package]]
name = "hashbrown"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "heck"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "hermit-abi"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
dependencies = [
"libc",
]
[[package]] [[package]]
name = "hermit-abi" name = "hermit-abi"
version = "0.3.9" version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
[[package]]
name = "indexmap"
version = "1.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
dependencies = [
"autocfg",
"hashbrown",
]
[[package]] [[package]]
name = "is-terminal" name = "is-terminal"
version = "0.4.12" version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b"
dependencies = [ dependencies = [
"hermit-abi 0.3.9", "hermit-abi",
"libc", "libc",
"windows-sys", "windows-sys",
] ]
@@ -415,7 +324,6 @@ dependencies = [
name = "loot-condition-interpreter-ffi" name = "loot-condition-interpreter-ffi"
version = "3.1.0" version = "3.1.0"
dependencies = [ dependencies = [
"cbindgen",
"libc", "libc",
"loot-condition-interpreter", "loot-condition-interpreter",
] ]
@@ -469,12 +377,6 @@ version = "11.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
[[package]]
name = "os_str_bytes"
version = "6.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1"
[[package]] [[package]]
name = "pelite" name = "pelite"
version = "0.10.0" version = "0.10.0"
@@ -595,7 +497,7 @@ version = "0.38.34"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
dependencies = [ dependencies = [
"bitflags 2.5.0", "bitflags",
"errno", "errno",
"libc", "libc",
"linux-raw-sys", "linux-raw-sys",
@@ -634,7 +536,7 @@ checksum = "11bd257a6541e141e42ca6d24ae26f7714887b47e89aa739099104c7e4d3b7fc"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.60", "syn",
] ]
[[package]] [[package]]
@@ -648,23 +550,6 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "strsim"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "syn"
version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.60" version = "2.0.60"
@@ -688,21 +573,6 @@ dependencies = [
"windows-sys", "windows-sys",
] ]
[[package]]
name = "termcolor"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
dependencies = [
"winapi-util",
]
[[package]]
name = "textwrap"
version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9"
[[package]] [[package]]
name = "tinytemplate" name = "tinytemplate"
version = "1.2.1" version = "1.2.1"
@@ -713,15 +583,6 @@ dependencies = [
"serde_json", "serde_json",
] ]
[[package]]
name = "toml"
version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "unicase" name = "unicase"
version = "2.7.0" version = "2.7.0"
@@ -774,7 +635,7 @@ dependencies = [
"once_cell", "once_cell",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.60", "syn",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
@@ -796,7 +657,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.60", "syn",
"wasm-bindgen-backend", "wasm-bindgen-backend",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
+1 -10
View File
@@ -27,16 +27,7 @@ To build the Rust and C FFI libraries, run:
cargo build --release --package loot-condition-interpreter-ffi cargo build --release --package loot-condition-interpreter-ffi
``` ```
To generate a C++ header file as part of the build, instead run: Use [cbindgen](https://github.com/eqrion/cbindgen) to generate a C++ header file:
```
cargo build --release --package loot-condition-interpreter-ffi --all-features
```
This will create a file at `ffi/include/loot_condition_interpreter.h`.
However, this involves building [cbindgen](https://github.com/eqrion/cbindgen)
as a dependency, which is relatively slow. If you have cbindgen installed
separately, it's faster to generate the headers using its CLI:
``` ```
cbindgen ffi/ -o ffi/include/loot_condition_interpreter.h cbindgen ffi/ -o ffi/include/loot_condition_interpreter.h
-8
View File
@@ -3,7 +3,6 @@ name = "loot-condition-interpreter-ffi"
version = "3.1.0" version = "3.1.0"
authors = ["Oliver Hamlet <oliver@ortham.io>"] authors = ["Oliver Hamlet <oliver@ortham.io>"]
license = "MIT" license = "MIT"
build = "build.rs"
edition = "2018" edition = "2018"
[dependencies] [dependencies]
@@ -13,10 +12,3 @@ libc = "0.2"
[lib] [lib]
name = "loot_condition_interpreter_ffi" name = "loot_condition_interpreter_ffi"
crate-type = ["staticlib"] crate-type = ["staticlib"]
[features]
default = []
ffi-headers = ["cbindgen"]
[build-dependencies]
cbindgen = { version = "0.26", optional = true }
-25
View File
@@ -1,25 +0,0 @@
#[cfg(feature = "ffi-headers")]
mod ffi_headers {
extern crate cbindgen;
use std::env;
use std::fs;
use self::cbindgen::generate;
pub fn generate_headers() {
let crate_dir = env::var("CARGO_MANIFEST_DIR")
.expect("could not get value of CARGO_MANIFEST_DIR env var");
fs::create_dir_all("include").expect("could not create include directory");
generate(&crate_dir)
.expect("could not generate C/C++ header file")
.write_to_file("include/loot_condition_interpreter.h");
}
}
fn main() {
#[cfg(feature = "ffi-headers")]
ffi_headers::generate_headers();
}