aboutsummaryrefslogtreecommitdiffstats
path: root/lib/core_functions.ml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/core_functions.ml')
-rw-r--r--lib/core_functions.ml24
1 files changed, 20 insertions, 4 deletions
diff --git a/lib/core_functions.ml b/lib/core_functions.ml
index 083e0cf..059cd14 100644
--- a/lib/core_functions.ml
+++ b/lib/core_functions.ml
@@ -1,11 +1,27 @@
+(* open Ctypes *)
+
module Types = Types_generated
module Functions (F : Ctypes.FOREIGN) = struct
- open F
+ (* open F *)
+ open Ctypes_static
+
+ let os_extension =
+ if Sys.os_type = "Unix" then
+ let ic = Unix.open_process_in "uname" in
+ let uname = input_line ic in
+ let () = close_in ic in
+ if uname = "Darwin" then "dylib" else "so"
+ else "dll"
+
+ let libmerklecpp =
+ Dl.dlopen ~flags:[ RTLD_GLOBAL; RTLD_NOW ]
+ ~filename:
+ (Sys.getenv "LIBRELATIONAL_ENGINE_LIB_PATH"
+ ^ "/librelational_engine." ^ os_extension)
let compute_hash =
- foreign "compute_hash"
- (F.(@->) (Ctypes.ptr Ctypes.char)
- (F.(@->) Ctypes.string (F.returning Ctypes.void)))
+ Foreign.foreign ~from:libmerklecpp "compute_hash"
+ (ptr char @-> Ctypes.string @-> returning void)
end