(library
 (name flan)
 (libraries unix)
 ; Running a macro means dlopening it into the compiler, and OCaml has no
 ; dlopen for ELF -- Dynlink loads OCaml. These are the stubs for it, and the
 ; only C the compiler itself is built from. See lib/dynload_stubs.c.
 (foreign_stubs
  (language c)
  (names dynload_stubs))
 (c_library_flags (-ldl)))

; The host shim is Flan's, not the user's, so the compiler carries it rather
; than looking for it in an install directory. Generated from the real .c files
; so there is only ever one copy to edit. flan_dev.c goes into a dev build
; only — it is the run-time name lookup a REPL needs and a release build has
; no use for.
(rule
 (target runtime_src.ml)
 (deps
  %{workspace_root}/runtime/flan_rt.c
  %{workspace_root}/runtime/flan_dev.c)
 (action
  (with-stdout-to
   runtime_src.ml
   (progn
    (echo "let source = {c|\n")
    (cat %{workspace_root}/runtime/flan_rt.c)
    (echo "|c}\n\nlet dev_source = {c|\n")
    (cat %{workspace_root}/runtime/flan_dev.c)
    (echo "|c}\n")))))
