aboutsummaryrefslogtreecommitdiffstats
path: root/lib/core_functions.ml
blob: 6919f2f407960e0010cc831eec83347a9579195d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
(* 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)
end