29 lines
748 B
Plaintext
29 lines
748 B
Plaintext
|
// Compiler template
|
||
|
local CCompiler = {
|
||
|
cFlags: [],
|
||
|
out: "a.out",
|
||
|
local flags_str = std.join(" ", self.cFlags),
|
||
|
local files_str = std.join(" ", self.files),
|
||
|
cmd: "%s %s %s -o %s" % [self.compiler, flags_str, files_str, self.out],
|
||
|
};
|
||
|
|
||
|
// GCC specialization
|
||
|
local Gcc = CCompiler { compiler: "gcc" };
|
||
|
|
||
|
// Another specialization
|
||
|
local Clang = CCompiler { compiler: "clang" };
|
||
|
|
||
|
// Mixins - append flags
|
||
|
local Opt = { cFlags: super.cFlags + ["-O3", "-DNDEBUG"] };
|
||
|
local Dbg = { cFlags: super.cFlags + ["-g"] };
|
||
|
|
||
|
// Output:
|
||
|
{
|
||
|
targets: [
|
||
|
Gcc { files: ["a.c", "b.c"] },
|
||
|
Clang { files: ["test.c"], out: "test" },
|
||
|
Clang + Opt { files: ["test2.c"], out: "test2" },
|
||
|
Gcc + Opt + Dbg { files: ["foo.c", "bar.c"], out: "baz" },
|
||
|
]
|
||
|
}
|