See https://sraka.xyz/posts/hs-bindgen-introduction.html. For now, this is a shell-based workflow, rather than using Nix to build everything, i.e. `nix develop` works but `nix build` doesn't. And `cargo build` has to be called manually to create the C library, rather than `cabal` being clever enough to invoke it itself. We ran `cargo cabal init` from the `rust` directory (`nix shell github:yvan-sraka/cargo-cabal`), which generated `hsbindgen.toml` (which we use), and `Setup.lhs` (which just added `extra-lib-dirs`, and with the wrong paths, so we dspecify those statically instead in `garnet.cabal`). We also follow its advice to use `staticlib`. Also, after we ran the first `cargo build` (requiring a `mkdir rust/src` before it would run), we took the generated the Haskell file, and moved the main contents in to `Main.hs` manually.
7 lines
130 B
Rust
7 lines
130 B
Rust
use hs_bindgen::*;
|
|
|
|
#[hs_bindgen(hello :: CString -> IO (()))]
|
|
fn hello(name: &str) {
|
|
println!("Hello from Rust, {name}!");
|
|
}
|