diff options
author | omniscient <17525998+omnisci3nce@users.noreply.github.com> | 2024-10-27 16:25:27 +1100 |
---|---|---|
committer | omniscient <17525998+omnisci3nce@users.noreply.github.com> | 2024-10-27 16:25:27 +1100 |
commit | c2812d1a79a1d790b2c549abdfe9344d4fb4f4d2 (patch) | |
tree | 58cb7b3e05b8327f6b2395ee0df38a0d4b674af0 /bindgen | |
parent | 7577b6d51c5180ec23f93cec79a5c77e54130558 (diff) |
removing old ocaml glue code
Diffstat (limited to 'bindgen')
-rw-r--r-- | bindgen/BINDGEN.md | 2 | ||||
-rw-r--r-- | bindgen/ocaml/bindings/bindings_sys.ml | 49 | ||||
-rw-r--r-- | bindgen/ocaml/bindings/caml_bindings.c | 132 | ||||
-rw-r--r-- | bindgen/ocaml/bindings/celeritas.h | 21 | ||||
-rw-r--r-- | bindgen/ocaml/bindings/dune | 12 |
5 files changed, 2 insertions, 214 deletions
diff --git a/bindgen/BINDGEN.md b/bindgen/BINDGEN.md index 6d32cdf..b8b8fc5 100644 --- a/bindgen/BINDGEN.md +++ b/bindgen/BINDGEN.md @@ -2,5 +2,5 @@ This is where we host code generation tools for generating bindings to `celerita Planned languages are: -- OCaml (due to fairly different semantics we may have an extra high-level wrapper around the C bindings for convenience) - Rust +- OCaml (due to fairly different semantics we may have an extra high-level wrapper around the C bindings for convenience) diff --git a/bindgen/ocaml/bindings/bindings_sys.ml b/bindgen/ocaml/bindings/bindings_sys.ml deleted file mode 100644 index 1c100e9..0000000 --- a/bindgen/ocaml/bindings/bindings_sys.ml +++ /dev/null @@ -1,49 +0,0 @@ -(* automatically generated by ocaml-bindgen 0.0.1 *) - -type lifetime = - | Function - (** The value can live for the lifetime of the function call, which upon return will signal that the - value can be dropped (finalizer?) *) - | Ocaml (** The value is managed by the OCaml runtime *) - | C - (** The value is allocated and passed to C which is then in charge of cleaning it up *) - -type 'a cptr = { lifetime : lifetime; addr : nativeint } - -external bindgen_alloc : size:int -> nativeint = "bindgen_alloc" -external bindgen_free : nativeint -> unit = "bindgen_free" -external bindgen_alloc_string : string -> nativeint = "bindgen_alloc_string" - -let sizeof _ = 4 (* TODO: how to handle different types? *) - -let create_ptr (value : 'a) : 'a cptr = - let addr = bindgen_alloc ~size:(sizeof value) in - print_endline ("Addr: " ^ Nativeint.to_string addr); - Gc.finalise bindgen_free addr; - { lifetime = Ocaml; addr } - -let make_cstr (s: string) : char cptr = - let addr = bindgen_alloc_string s in - { lifetime = Ocaml; addr } - -type nonrec core -type nonrec glfwwindow -external get_global_core : unit -> core cptr = "caml_get_global_core" -external core_Bringup : - optional_window:unit cptr -> unit = "caml_core_Bringup" -external frame_Begin : unit -> unit = "caml_frame_Begin" -external frame_Draw : unit -> unit = "caml_frame_Draw" -external frame_End : unit -> unit = "caml_frame_End" -type nonrec vec2 = { - x: float ; - y: float } -type nonrec vec3 = { - x: float ; - y: float ; - z: float } -type nonrec vec4 = { - x: float ; - y: float ; - z: float ; - w: float } -external vec3_add : b:vec3 -> a:vec3 -> vec3 = "caml_vec3_add" diff --git a/bindgen/ocaml/bindings/caml_bindings.c b/bindgen/ocaml/bindings/caml_bindings.c deleted file mode 100644 index 4a7dc70..0000000 --- a/bindgen/ocaml/bindings/caml_bindings.c +++ /dev/null @@ -1,132 +0,0 @@ -/* automatically generated by ocaml-bindgen 0.0.1 */ - -#include "celeritas.h" -#include <caml/alloc.h> -#include <caml/callback.h> -#include <caml/fail.h> -#include <caml/memory.h> -#include <caml/mlvalues.h> -#include <caml/unixsupport.h> -Core* caml_get_global_core() { - CAMLparam0(); - CAMLlocal1(result); - result = get_global_core(); - CAMLreturn(result); -} - -void caml_core_Bringup(value caml_optional_window) { - CAMLparam1(caml_optional_window); - void* optional_window = Nativeint_val(Field(caml_optional_window, 1)); - core_Bringup(optional_window); - CAMLreturn0; -} - -void caml_frame_Begin() { - CAMLparam0(); - frame_Begin(); - CAMLreturn0; -} - -void caml_frame_Draw() { - CAMLparam0(); - frame_Draw(); - CAMLreturn0; -} - -void caml_frame_End() { - CAMLparam0(); - frame_End(); - CAMLreturn0; -} - -Vec2* caml_Vec2_of_value(value caml_x) { - Vec2* x = malloc(sizeof(struct Vec2)); - x->x = Double_val(Field(caml_x, 0)); - x->y = Double_val(Field(caml_x, 1)); - return x; -} - -value caml_Vec2_to_value(struct Vec2* x) { - CAMLparam0(); - CAMLlocal1(caml_x); - caml_x = caml_alloc_tuple(2); - Store_field(caml_x, 0, caml_copy_double(x->x)); - Store_field(caml_x, 1, caml_copy_double(x->y)); - CAMLreturn(caml_x); -} - -Vec3* caml_Vec3_of_value(value caml_x) { - Vec3* x = malloc(sizeof(struct Vec3)); - x->x = Double_val(Field(caml_x, 0)); - x->y = Double_val(Field(caml_x, 1)); - x->z = Double_val(Field(caml_x, 2)); - return x; -} - -value caml_Vec3_to_value(struct Vec3* x) { - CAMLparam0(); - CAMLlocal1(caml_x); - caml_x = caml_alloc_tuple(3); - Store_field(caml_x, 0, caml_copy_double(x->x)); - Store_field(caml_x, 1, caml_copy_double(x->y)); - Store_field(caml_x, 2, caml_copy_double(x->z)); - CAMLreturn(caml_x); -} - -Vec4* caml_Vec4_of_value(value caml_x) { - Vec4* x = malloc(sizeof(struct Vec4)); - x->x = Double_val(Field(caml_x, 0)); - x->y = Double_val(Field(caml_x, 1)); - x->z = Double_val(Field(caml_x, 2)); - x->w = Double_val(Field(caml_x, 3)); - return x; -} - -value caml_Vec4_to_value(struct Vec4* x) { - CAMLparam0(); - CAMLlocal1(caml_x); - caml_x = caml_alloc_tuple(4); - Store_field(caml_x, 0, caml_copy_double(x->x)); - Store_field(caml_x, 1, caml_copy_double(x->y)); - Store_field(caml_x, 2, caml_copy_double(x->z)); - Store_field(caml_x, 3, caml_copy_double(x->w)); - CAMLreturn(caml_x); -} - -Vec3 caml_vec3_add(value caml_a, value caml_b) { - CAMLparam2(caml_a, caml_b); - CAMLlocal1(result); - Vec3 a = caml_Vec3_of_value(caml_a); - Vec3 b = caml_Vec3_of_value(caml_b); - result = vec3_add(a, b); - CAMLreturn(result); -} - - -#include <stdlib.h> -value bindgen_alloc(value caml_size) { - CAMLparam1(caml_size); - - // Convert OCaml integer to C size - size_t size = Int_val(caml_size); - printf("Allocated size %ld \n", size); - - void* ptr = malloc(sizeof(size)); - if (ptr == NULL) { - // TODO: handle allocation failure - CAMLreturn(Val_unit); - } - - // Wrap the pointer as an OCaml value - CAMLreturn(caml_copy_nativeint(ptr)); -} - -void bindgen_free(value caml_addr) { - free(Nativeint_val(caml_addr)); -} - -value bindgen_alloc_string(value caml_string) { - CAMLparam1(caml_string); - char* str = String_val(caml_string); - CAMLreturn(caml_copy_nativeint((intnat)str)); -} diff --git a/bindgen/ocaml/bindings/celeritas.h b/bindgen/ocaml/bindings/celeritas.h deleted file mode 100644 index fce4d62..0000000 --- a/bindgen/ocaml/bindings/celeritas.h +++ /dev/null @@ -1,21 +0,0 @@ -/* The Goal of this file is to test ocaml-bindgen on it to start moving development over into OCaml */ - -// #include <stdbool.h> -// #include <stdint.h> - -typedef struct Core Core; -typedef struct GLFWwindow GLFWwindow; - -Core* get_global_core(); -void core_Bringup(void* optional_window); - -void frame_Begin(); -void frame_Draw(); -void frame_End(); - - -struct Vec2 { float x; float y; }; -typedef struct Vec3 { float x; float y; float z; } Vec3; -struct Vec4 { float x; float y; float z; float w; }; - -Vec3 vec3_add(Vec3 a, Vec3 b);
\ No newline at end of file diff --git a/bindgen/ocaml/bindings/dune b/bindgen/ocaml/bindings/dune index 673491d..5f109ff 100644 --- a/bindgen/ocaml/bindings/dune +++ b/bindgen/ocaml/bindings/dune @@ -1,13 +1,3 @@ (library (name bindings) - (libraries bindgen)) - -(rule - (alias gen_bindings) - (deps celeritas.h) - (targets bindings_sys.ml caml_bindings.c) - (action - (run - %{bin:ocaml-bindgen} celeritas.h bindings) - ) - (mode (promote (until-clean))))
\ No newline at end of file + (libraries ))
\ No newline at end of file |