-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathocaml.ml
More file actions
69 lines (56 loc) · 1.9 KB
/
ocaml.ml
File metadata and controls
69 lines (56 loc) · 1.9 KB
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
open Makeomatic
module M = Make(struct
let extra_args =
[
"*", "-I utils -I parsing -I typing -I bytecomp -I asmcomp -I driver \
-I toplevel";
"ocamlc.opt", "asmrun/meta.o asmrun/dynlink.o";
"asmrun/*.c", "-DNATIVE_CODE";
"*.c", "-I byterun";
]
let packs =
[ ]
let execs =
[ "ocamlc", ["driver/main"] ]
let extra_args =
let extra = List.map (fun (re,f) -> compile_glob re, f) extra_args in
fun fn ->
let args =
List.fold_left (fun accu (re,f) -> if re fn then f::accu else accu)
[] extra in
String.concat " " args
let ocaml cmd ~native args = match native,cmd with
| false, `Compile src ->
let args = extra_args src ^ " " ^ args in
Printf.sprintf "ocamlc %s -c %s" args src
| false, `Pack (obj,comps) ->
let args = extra_args obj ^ " " ^ args in
Printf.sprintf "ocamlc %s -pack -o %s %s" args obj comps
| false, `Link (obj,comps) ->
let args = extra_args obj ^ " " ^ args in
Printf.sprintf "ocamlc %s -o %s %s" args obj comps
| true, `Compile src ->
let args = extra_args src ^ " " ^ args in
Printf.sprintf "ocamlopt %s -c %s" args src
| true, `Pack (obj,comps) ->
let args = extra_args obj ^ " " ^ args in
Printf.sprintf "ocamlopt %s -pack -o %s %s" args obj comps
| true, `Link (obj,comps) ->
let args = extra_args obj ^ " " ^ args in
Printf.sprintf "ocamlopt %s -o %s %s" args obj comps
let gcc src =
let args = extra_args src in
Printf.sprintf "gcc -c -o %s %s %s" (Filename.chop_extension src ^ ".o")
args src
let rules =
[ function
| "bytecomp/opcodes.ml"
| "utils/config.ml"
| "bytecomp/runtimedef.ml"
| "byterun/primitives"
as f -> Some (Printf.sprintf "rm -f %s && make %s" f f)
| "asmrun/meta.c" | "asmrun/dynlink.c" as f
-> Some (Printf.sprintf "rm -f %s && cd asmrun && make %s"
f (Filename.basename f))
| _ -> None ]
end)