Compare commits

..

1 Commits

Author SHA1 Message Date
George Thomas
a018cc389a Generate header in Rust build output directory 2026-02-20 09:53:12 +00:00
4 changed files with 6 additions and 73 deletions

View File

@ -5,10 +5,10 @@ packages: .
-- so we specify the equivalent commit SHAs manually instead -- so we specify the equivalent commit SHAs manually instead
source-repository-package source-repository-package
type: git type: git
location: https://github.com/georgefst/hs-bindgen location: https://github.com/well-typed/hs-bindgen
tag: 3693360bcd1f8478932c4944c70baca7c4ecf950 tag: e2a9260678d9fa76dab602a5a07927acada3be4f
subdir: c-expr-dsl c-expr-runtime hs-bindgen hs-bindgen-runtime subdir: c-expr-dsl c-expr-runtime hs-bindgen hs-bindgen-runtime
--sha256: lV2FwS80iHhJU6iie/F24W4dYV+vvmeTu6465NLnOb4= --sha256: 0nrs3iq0l5ha5kxyhqnlmvgi7734pmzyp3zf7p8s1gb21ylh4sy0
source-repository-package source-repository-package
type: git type: git
location: https://github.com/well-typed/libclang location: https://github.com/well-typed/libclang

View File

@ -19,7 +19,7 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
RUST_DIR="$SCRIPT_DIR/rust" RUST_DIR="$SCRIPT_DIR/rust"
HEADER_NAME="garnet_rs.h" HEADER_NAME="garnet_rs.h"
HEADER="$RUST_DIR/$HEADER_NAME" HEADER="$RUST_DIR/target/debug/$HEADER_NAME"
# --- Step 1: Build Rust static library --- # --- Step 1: Build Rust static library ---
echo "=== Building Rust library ===" echo "=== Building Rust library ==="
@ -66,7 +66,7 @@ echo " Patched header at $HEADER"
echo "=== Configuring Cabal ===" echo "=== Configuring Cabal ==="
cabal configure \ cabal configure \
--extra-lib-dirs="$RUST_DIR/target/debug" \ --extra-lib-dirs="$RUST_DIR/target/debug" \
--extra-include-dirs="$RUST_DIR" --extra-include-dirs="$RUST_DIR/target/debug"
echo "=== Done ===" echo "=== Done ==="
echo "Run 'cabal run' to test." echo "Run 'cabal run' to test."

View File

@ -1,7 +1,6 @@
{-# LANGUAGE CApiFFI #-} {-# LANGUAGE CApiFFI #-}
{-# LANGUAGE DerivingVia #-} {-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FieldSelectors #-} {-# LANGUAGE FieldSelectors #-}
-- {-# LANGUAGE NoFieldSelectors #-}
{-# LANGUAGE MagicHash #-} {-# LANGUAGE MagicHash #-}
{-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TemplateHaskell #-}
@ -41,10 +40,7 @@ do
<$> runIO (readProcessWithExitCode "cpp" ["-v"] "") <$> runIO (readProcessWithExitCode "cpp" ["-v"] "")
withHsBindgen withHsBindgen
def def
{ clang = def{extraIncludeDirs = Pkg "rust" : systemDirs} { clang = def{extraIncludeDirs = Pkg "rust/target/debug" : systemDirs}
-- hmm, I guess there's a reason this wasn't exported
-- , fieldNamingStrategy = EnableRecordDot
, fieldNamingStrategy = PrefixedFieldNames
} }
def def
$ hashInclude "garnet_rs.h" $ hashInclude "garnet_rs.h"

View File

@ -1,63 +0,0 @@
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
struct T {
bool a;
uint8_t b;
};
enum Shape_Tag {
Circle,
Rectangle,
};
struct Circle_Body {
double radius;
};
struct Rectangle_Body {
double width;
double height;
};
struct Shape {
enum Shape_Tag tag;
union {
struct Circle_Body circle;
struct Rectangle_Body rectangle;
} body;
};
enum BTreeC_Tag {
Leaf,
Fork,
};
struct Leaf_Body {
int64_t value;
};
struct Fork_Body {
const struct BTreeC *left;
const struct BTreeC *right;
};
struct BTreeC {
enum BTreeC_Tag tag;
union {
struct Leaf_Body leaf;
struct Fork_Body fork;
} body;
};
void hello(const char *c);
void hello_struct(struct T t);
void hello_shape(struct Shape s);
__attribute__((const)) int64_t add(int64_t a, int64_t b);
int64_t sum_tree(struct BTreeC t);