7 let jobs, targets
, dodeplist
, dotarlist
= getopt
();;
10 match getval
"src" with
11 | None
-> failwith
"no source dir"
16 cmo
"-g -I +lablGL -thread" [srcdir] srcdir "apc";
18 "-ccopt '-Wall -o ml_apc.o'"
20 (StrSet.singleton
"ml_apc.o")
21 [Filename.concat
srcdir "ml_apc.c"]
26 "-Wall -Werror -g -c" ""
28 [Filename.concat
srcdir (base ^
".c")]
39 "-custom -thread -g -I +lablGL lablgl.cma lablglut.cma unix.cma threads.cma"
41 (StrSet.singleton
"apc")
42 ["ml_apc.o"; "apc.cmo"]
46 let moddir = Filename.concat
srcdir "mod" in
47 let modconts = Sys.readdir
moddir in
48 let deps = Array.fold_left
(fun deps s
->
49 if String.length s
> 0 && s
.[0] != '
.'
51 let src = Filename.concat
moddir s
in
52 add_target s
(StrSet.singleton
src) (StrSet.singleton s
) (StrSet.singleton
src);
54 let c = [Run
("cp " ^
Filename.quote
src ^
" " ^
Filename.quote s
)] in
57 State.put_build_info s
build;
61 ) StrSet.empty
modconts
64 let c = [Run
("make")] in
67 add_phony
"mod" deps [];
68 State.put_build_info
"mod" build;
74 let start = Unix.gettimeofday
() in
78 List.iter
State.print_deps targets
82 let built = Unix.handle_unix_error
Build.path path
in
86 then print_endline
(path ^
" has been built")
87 else print_endline
("nothing to be done for " ^ path
)
94 let rec loop i tids
= if i
= jobs then tids
else
95 let tid = Thread.create
(fun () -> iter
build targets
) () in
96 loop (succ i
) (tid :: tids
)
98 let tids = loop 0 [] in
102 Cache.save
!State.Config.cache
;
103 let stop = Unix.gettimeofday
() in
104 Format.eprintf
"build took %f seconds@." (stop -. start);