summaryrefslogtreecommitdiffstats
path: root/ocamlbuild/examples/example_with_C/myocamlbuild.ml
diff options
context:
space:
mode:
Diffstat (limited to 'ocamlbuild/examples/example_with_C/myocamlbuild.ml')
-rw-r--r--ocamlbuild/examples/example_with_C/myocamlbuild.ml35
1 files changed, 35 insertions, 0 deletions
diff --git a/ocamlbuild/examples/example_with_C/myocamlbuild.ml b/ocamlbuild/examples/example_with_C/myocamlbuild.ml
new file mode 100644
index 000000000..f53df7e10
--- /dev/null
+++ b/ocamlbuild/examples/example_with_C/myocamlbuild.ml
@@ -0,0 +1,35 @@
+open Ocamlbuild_plugin;;
+open Command;;
+
+let cc = A"cc";;
+let ar = A"ar";;
+
+dispatch begin function
+| After_rules ->
+ let libasmrun = !*Ocamlbuild_pack.Ocaml_utils.stdlib_dir/"libasmrun.a" in
+
+ flag ["ocaml"; "link"; "output_obj"] (A"-output-obj");
+
+ rule "output C obj"
+ ~deps:["%.cmx"; "%.o"]
+ ~prod:"%caml.o"
+ (Ocamlbuild_pack.Ocaml_compiler.native_link "%.cmx" "%caml.o");
+
+ rule "build C lib"
+ ~deps:["%wrap.o"; "%caml.o"]
+ ~prod:"lib%.a"
+ begin fun env _ ->
+ let wrap_o = env "%wrap.o" and caml_o = env "%caml.o"
+ and lib_a = env "lib%.a" in
+ Seq[cp libasmrun lib_a;
+ Cmd(S[ar; A"r"; Px lib_a; P caml_o; P wrap_o])]
+ end;
+ rule "build main"
+ ~deps:["libfib.a"; "main.o"]
+ ~prod:"main"
+ begin fun _ _ ->
+ Cmd(S[cc; P"main.o"; P"libfib.a"; A"-o"; Px"main"])
+ end;
+| _ -> ()
+end
+