diff --git a/garnet.cabal b/garnet.cabal index 8f2aae9..c30432f 100644 --- a/garnet.cabal +++ b/garnet.cabal @@ -6,6 +6,13 @@ author: Patrick Aldis maintainer: george.thomas@obsidian.systems patrick.aldis@obsidian.systems +-- aha, nice, this does fix recompilation checking +extra-source-files: + rust/target/debug/garnet_rs.h +-- that could be problematic given file is gitignored? unfortunately this doesn't work +-- tbf, I haven't even looked up the docs, just saw the autocompletion +-- extra-tmp-files: +-- rust/target/debug/garnet_rs.h common common default-language: GHC2024 @@ -44,6 +51,9 @@ library GarnetRs.Wrapped hs-source-dirs: lib include-dirs: rust/target/debug + -- HLS gives up entirely when the header is malformed if we do this + -- and anyway, I don't think it gives us dependency tracking like `extra-source-files` does + -- includes: garnet_rs.h extra-bundled-libraries: Cgarnet_rs build-depends: hs-bindgen, diff --git a/rust/build.rs b/rust/build.rs index d93e5bb..1af4b94 100644 --- a/rust/build.rs +++ b/rust/build.rs @@ -2,6 +2,23 @@ use std::env; use std::path::PathBuf; fn main() { + // this doesn't make _much_ difference really, since this is our only Rust source file + // but it seems it's probably better than not having it + // what we really want is to tell Rust to only regenerate the header file if the Rust code actually compiles + // but we don't have that flexibility + // and it's an issue because cbindgen tries to be fault-tolerant in some ways that don't even seem to make sense + // + // e.g. mis-spell "Option" as "Option" and you get + // void print_optional(Optio x); + // instead of + // void print_optional(const int8_t *x); + // and that's only an issue because in HLS TH dependent-file watching gives up after an error + // i.e. once the containing splice has thrown an exception once, the containing file needs a manual edit to kick it + // and that's really not helped by Rust Analyzer mostly only showing diagnostics on save + // P.S. strings to stdout?! what a terrible API + // don't get me started in the discoverability of actually then using the terminal for debugging: + // println!("cargo::warning={:?}", env::var("OUT_DIR")); + println!("cargo::rerun-if-changed=lib.rs"); let crate_dir = env::var("CARGO_MANIFEST_DIR").unwrap(); let profile = env::var("PROFILE").unwrap(); cbindgen::Builder::new()