diff options
Diffstat (limited to '')
| -rw-r--r-- | lib/core_functions.ml | 24 |
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 |
