Skip to content

Instantly share code, notes, and snippets.

@arbipher
Last active October 26, 2021 07:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arbipher/0db7714aee0cc1b6315183174280e798 to your computer and use it in GitHub Desktop.
Save arbipher/0db7714aee0cc1b6315183174280e798 to your computer and use it in GitHub Desktop.
OCaml z3 linking
flowchart TD
classDef alert-red fill:#f55,stroke-width:3px
subgraph z3-source
subgraph z3-c++-source[z3 C++ source]
z3-src[z3 C++ code] -->|make shared-lib| z3-libz3.so[libz3.so]
z3-src -->|make static-lib| z3-libz3.a[libz3.a]
end
subgraph z3-ocaml[z3 OCaml binding source]
z3-stub[z3.ml <br /> z3native_stub.ml <br /> z3native.ml ]
end
subgraph z3mls
z3-z3ml.cm*[z3ml.cm_]
z3-dllz3ml.so[dllz3ml.so]
z3-libz3ml.a[libz3ml.a]
z3-META[META]
end
z3-ocaml --> ocamlmklib[ocamlmklib... -dllpath <sitelib>/stublibs -ccopt -L<sitelib>/stublibs]:::alert-red
ocamlmklib --> z3mls
end
z3-libz3.a -->|ocamlfind install| sitelib-libz3.a
z3-libz3.so:::alert-red -->|ocamlfind install| sitelib-libz3.so
z3-libz3ml.a -->|ocamlfind install| sitelib-libz3ml.a
z3-dllz3ml.so -->|ocamlfind install| sitelib-dllz3ml.so
z3-META -->|ocamlfind install| sitelib-meta
z3mls -->|ocamlfind install| sitelib-z3
subgraph z3:install[z3:install into opam-sitelib]
subgraph sitelib-z3
sitelib-*.mli[*.mli]
sitelib-z3ml.cm*[z3ml.cm_]
sitelib-libz3.a[libz3.a]
sitelib-libz3ml.a[libz3ml.a]
sitelib-meta[META]
end
subgraph sitelib/stublibs
sitelib-libz3.so[libz3.so]:::alert-red
sitelib-dllz3ml.so[dllz3ml.so]:::alert-red
end
end
subgraph Hello:ml
main.ml
end
subgraph system
ld.so:::alert-red
end
subgraph bytecodes
ocaml-linker[ocaml linker]
main.ml --> ocamlc
ocamlc --> main-static.bc
ocamlc --> main-shared.bc
ocamlc -->|-custom| main-static-c.bc
ocamlc -->|-custom| main-shared-c.bc
main-static.bc
main-shared.bc
main-static-c.bc
main-shared-c.bc
end
subgraph nativecodes
main.ml --> ocamlopt
ocamlopt --> main-shared.exe
ocamlopt --> main-static.exe
ocamlopt .-> c-linker[cc linker]
%% sitelib-libz3.so ..-> c-linker
c-linker --> main-shared.exe
sitelib-libz3.a -----> main-static.exe
main-static.exe
main-shared.exe
end
sitelib-z3ml.cm* -->ocaml-linker
subgraph g-ocamlrun[ocamlrun or exec]
main-static.bc ---> ocamlrun
main-shared.bc ---> ocamlrun
main-static-c.bc ---> ocamlrun
main-shared-c.bc ---> ocamlrun
ocamlrun --> ld.so
main-shared.exe:::alert-red --> ld.so
main-static.exe --> ld.so
sitelib-dllz3ml.so --> ld.so
sitelib-libz3.so --> ld.so
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment