summaryrefslogtreecommitdiff
path: root/bindgen
diff options
context:
space:
mode:
Diffstat (limited to 'bindgen')
-rw-r--r--bindgen/BINDGEN.md2
-rw-r--r--bindgen/ocaml/bindings/bindings_sys.ml49
-rw-r--r--bindgen/ocaml/bindings/caml_bindings.c132
-rw-r--r--bindgen/ocaml/bindings/celeritas.h21
-rw-r--r--bindgen/ocaml/bindings/dune12
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