C build tool of the 21st century
1type path = Eio.Fs.dir_ty Eio.Path.t
2
3module String_set = Set.Make (String)
4module String_map = Map.Make (String)
5
6module Path_set = Set.Make (struct
7 type t = path
8
9 let compare a b =
10 let a = Eio.Path.native_exn a in
11 let b = Eio.Path.native_exn b in
12 String.compare a b
13end)
14
15module Source_file = struct
16 type t = { path : path; flags : Flags.t; root : path }
17
18 let v ?flags ~root path =
19 { path; flags = Option.value ~default:(Flags.v ()) flags; root }
20
21 let ext { path; _ } = Util.ext path
22end
23
24module Object_file = struct
25 type t = { source : Source_file.t; path : path; flags : Flags.t }
26
27 let v ?flags ~source path =
28 { source; path; flags = Option.value ~default:(Flags.v ()) flags }
29
30 let of_source ?flags ~root ~build_name ~build_dir source =
31 let obj_file = Util.relative_to root source.Source_file.path ^ ".o" in
32 v ?flags ~source @@ Eio.Path.(build_dir / build_name / obj_file)
33end