aboutsummaryrefslogblamecommitdiffstats
path: root/lib/core_functions.ml
blob: 3d1cd35e802f98e937c81d17efacd2a7fc23755d (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16















                                              



                                                                                                        

                                                                                                                                                  
                                                                                                                                       

   
(* open Ctypes *)

module Types = Types_generated

module Functions (F : Ctypes.FOREIGN) = struct
  (* 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.foreign ~from:libmerklecpp "compute_hash" (ptr char @-> Ctypes.string @-> returning void)
  let merkle_generate_root = Foreign.foreign ~from:libmerklecpp "merkle_generate_root" (ptr Ctypes.string @-> int @-> ptr char @-> returning void)
  let register_to_merkle = Foreign.foreign ~from:libmerklecpp "register_to_merkle" (Ctypes.string @-> Ctypes.string @-> returning void)

end