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
# without a hash.
- 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.
- 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
# without a hash.
- 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.
- 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"
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]]
name = "autocfg"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80"
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
version = "2.5.0"
@@ -64,25 +47,6 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
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]]
name = "cfg-if"
version = "1.0.0"
@@ -116,21 +80,6 @@ dependencies = [
"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]]
name = "clap"
version = "4.5.4"
@@ -147,16 +96,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4"
dependencies = [
"anstyle",
"clap_lex 0.7.0",
]
[[package]]
name = "clap_lex"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
dependencies = [
"os_str_bytes",
"clap_lex",
]
[[package]]
@@ -183,7 +123,7 @@ dependencies = [
"anes",
"cast",
"ciborium",
"clap 4.5.4",
"clap",
"criterion-plot",
"is-terminal",
"itertools",
@@ -307,50 +247,19 @@ dependencies = [
"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]]
name = "hermit-abi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
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]]
name = "is-terminal"
version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b"
dependencies = [
"hermit-abi 0.3.9",
"hermit-abi",
"libc",
"windows-sys",
]
@@ -415,7 +324,6 @@ dependencies = [
name = "loot-condition-interpreter-ffi"
version = "3.1.0"
dependencies = [
"cbindgen",
"libc",
"loot-condition-interpreter",
]
@@ -469,12 +377,6 @@ version = "11.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
[[package]]
name = "os_str_bytes"
version = "6.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1"
[[package]]
name = "pelite"
version = "0.10.0"
@@ -595,7 +497,7 @@ version = "0.38.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
dependencies = [
"bitflags 2.5.0",
"bitflags",
"errno",
"libc",
"linux-raw-sys",
@@ -634,7 +536,7 @@ checksum = "11bd257a6541e141e42ca6d24ae26f7714887b47e89aa739099104c7e4d3b7fc"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.60",
"syn",
]
[[package]]
@@ -648,23 +550,6 @@ dependencies = [
"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]]
name = "syn"
version = "2.0.60"
@@ -688,21 +573,6 @@ dependencies = [
"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]]
name = "tinytemplate"
version = "1.2.1"
@@ -713,15 +583,6 @@ dependencies = [
"serde_json",
]
[[package]]
name = "toml"
version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
dependencies = [
"serde",
]
[[package]]
name = "unicase"
version = "2.7.0"
@@ -774,7 +635,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
"syn 2.0.60",
"syn",
"wasm-bindgen-shared",
]
@@ -796,7 +657,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.60",
"syn",
"wasm-bindgen-backend",
"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
```
To generate a C++ header file as part of the build, instead run:
```
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:
Use [cbindgen](https://github.com/eqrion/cbindgen) to generate a C++ header file:
```
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"
authors = ["Oliver Hamlet <oliver@ortham.io>"]
license = "MIT"
build = "build.rs"
edition = "2018"
[dependencies]
@@ -13,10 +12,3 @@ libc = "0.2"
[lib]
name = "loot_condition_interpreter_ffi"
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();
}