-
Notifications
You must be signed in to change notification settings - Fork 1
/
build.ml
85 lines (77 loc) · 1.96 KB
/
build.ml
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
let start = Unix.gettimeofday ();;
open List;;
open Typs;;
open Utils;;
open State;;
open Helpers;;
let jobs, targets, dodeplist, dotarlist = getopt ();;
let get key msg =
match getval key with | None -> failwith msg | Some s -> s
;;
let getdef key def =
match getval key with | None -> def | Some s -> s
;;
let srcdir = get "src" "no source dir";;
let cc = getdef "cc" "cc";;
let ccopt = getdef "ccopt" "";;
let boc flags src =
let o = src ^ ".o" in
let c = src ^ ".c" in
ocaml
"ocamlc.opt"
("-cc '" ^ cc ^ "' -ccopt '" ^ flags ^ " " ^ ccopt ^ " -o " ^ o ^ "'")
o
(StrSet.singleton o)
[Filename.concat srcdir c]
(
if src = "skin" || src = "skinvp"
then
(StrSet.add (Filename.concat srcdir "pgl.h")
(StrSet.singleton (Filename.concat srcdir "vec.c")))
else StrSet.empty
)
;
;;
let bso name objs =
let so = name ^ ".so" in
(* let so = Filename.concat (Sys.getcwd ()) so in *)
let o = List.map (fun s -> s ^ ".o") objs in
ocaml
cc
("-shared -o " ^ so)
so
(StrSet.singleton so)
o
StrSet.empty
;
so
;;
let _ =
List.iter (fun src ->
cmopp ~flags:"-g -I +lablGL -thread" ~dirname:srcdir src)
["xff"; "nto"; "nmo"; "slice"; "rend"; "vec"; "skb"; "qtr"; "anb"
;"skin"; "imgv"]
;
boc "-g" "swizzle";
boc "-g" "skin";
boc "-g" "skinvp";
let so = bso "swizzle" ["swizzle"] in
let so1 = bso "skin" ["skin"; "skinvp"] in
let prog name cmos =
ocaml
"ocamlc.opt"
("-g -I +lablGL lablgl.cma lablglut.cma unix.cma -dllpath " ^ Sys.getcwd ())
name
(StrSet.singleton name)
(State.dep_sort cmos)
StrSet.empty
in
prog "dormin" ["slice.cmo"; "xff.cmo"; "nto.cmo"; "skin.cmo"; "rend.cmo";
"vec.cmo"; "anb.cmo"; "skb.cmo"; "nmo.cmo"; "qtr.cmo";
so; so1];
prog "imgv" ["slice.cmo"; "xff.cmo"; "nto.cmo"; "imgv.cmo"; so; so1];
()
;;
let () =
Helpers.run start jobs targets dodeplist dotarlist
;;