diff --git a/SetupHooks.hs b/SetupHooks.hs new file mode 100644 index 0000000..742f21c --- /dev/null +++ b/SetupHooks.hs @@ -0,0 +1,33 @@ +{-# LANGUAGE DisambiguateRecordFields #-} +{-# LANGUAGE DuplicateRecordFields #-} +{-# LANGUAGE NoFieldSelectors #-} + +module SetupHooks (setupHooks) where + +import Distribution.Simple.SetupHooks +import Distribution.Utils.Path +import System.Directory + +setupHooks :: SetupHooks +setupHooks = + noSetupHooks + { configureHooks = + noConfigureHooks + { preConfComponentHook = Just addRustLibDir + } + } + +addRustLibDir :: PreConfComponentInputs -> IO PreConfComponentOutputs +addRustLibDir inputs = do + cwd <- getCurrentDirectory + pure + (noPreConfComponentOutputs inputs :: PreConfComponentOutputs) + { componentDiff = + buildInfoComponentDiff + (componentName (component inputs)) + emptyBuildInfo + { extraLibDirs = + [ makeSymbolicPath $ cwd "rust" "target" "debug" + ] + } + } diff --git a/garnet.cabal b/garnet.cabal index 6987f64..83380ac 100644 --- a/garnet.cabal +++ b/garnet.cabal @@ -1,4 +1,4 @@ -cabal-version: 3.0 +cabal-version: 3.14 name: garnet version: 0.1.0.0 license: BSD-3-Clause @@ -6,6 +6,14 @@ author: Patrick Aldis maintainer: george.thomas@obsidian.systems patrick.aldis@obsidian.systems +build-type: Hooks + +custom-setup + setup-depends: + base, + Cabal-hooks, + Cabal-syntax, + directory, common common default-language: GHC2024 @@ -40,6 +48,7 @@ library GarnetRs.Raw GarnetRs.Wrapped hs-source-dirs: lib + include-dirs: rust/target/debug extra-bundled-libraries: garnet_rs build-depends: base, diff --git a/generate-bindings b/generate-bindings index 9f20e90..d2ce772 100755 --- a/generate-bindings +++ b/generate-bindings @@ -9,12 +9,11 @@ set -euo pipefail # 1. cargo build - build the Rust static library # 2. cbindgen - generate a C header from the Rust source # 3. awk - patch the header for hs-bindgen compatibility -# 4. cabal configure - point Cabal at the Rust build artifacts # # System include paths (needed by libclang on NixOS) are detected # automatically at TH compile time by GarnetRs.Raw — no env vars needed. # -# Prerequisites: run inside the Nix dev shell (provides gcc, cabal, cbindgen). +# Prerequisites: run inside the Nix dev shell (provides gcc, cbindgen). SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" RUST_DIR="$SCRIPT_DIR/rust" @@ -58,15 +57,5 @@ awk ' echo " Patched header at $HEADER" -# --- Step 4: Configure Cabal --- -# -# Point Cabal at the Rust static library and C header. This writes -# cabal.project.local (gitignored) with absolute paths derived from -# the current working directory, avoiding hardcoded paths in cabal.project. -echo "=== Configuring Cabal ===" -cabal configure \ - --extra-lib-dirs="$RUST_DIR/target/debug" \ - --extra-include-dirs="$RUST_DIR/target/debug" - echo "=== Done ===" echo "Run 'cabal run' to test."