ICFP 2007 Contest: https://web.archive.org/web/20090301164728/https://save-endo.cs.uu.nl/
1function define_rust_rule(name, type, deps)
2 local inputs = {}
3 for _, input in ipairs(tup.glob(name .. "/src/*.rs")) do
4 table.insert(inputs, input)
5 end
6
7 local input_rs
8 local output
9 if type == "bin" then
10 input_rs = name .. "/src/main.rs"
11 output = "out/bin/" .. name
12 else
13 input_rs = name .. "/src/lib.rs"
14 output = "out/lib/lib" .. name .. ".rlib"
15 end
16
17 local externs = {}
18 for _, dep in ipairs(deps) do
19 local rlib = "out/lib/lib" .. dep .. ".rlib"
20 table.insert(inputs, rlib)
21 table.insert(externs, "--extern " .. dep .. "=" .. rlib)
22 end
23
24 local flags = "--edition=2024 -C opt-level=3 -C embed-bitcode=no -C strip=debuginfo --emit=link"
25 local command = "rustc --crate-name " .. name .. " --crate-type=" .. type .. " " .. input_rs .. " -o %o " .. table.concat(externs, " ") .. " " .. flags
26 tup.definerule{inputs = inputs, command = command, outputs = {output}}
27end
28
29define_rust_rule("dna_parsing", "lib", {})
30define_rust_rule("dna2rna", "bin", {"dna_parsing"})
31define_rust_rule("disassembler", "bin", {"dna_parsing"})
32define_rust_rule("rna2bmp", "bin", {})
33define_rust_rule("asm2dna", "bin", {})
34
35local asm = tup.glob("asm/*.asm")
36asm.extra_inputs = {"out/bin/asm2dna"}
37tup.foreach_rule(
38 asm,
39 "./out/bin/asm2dna %f %o",
40 {"out/dna/%B.dna"}
41)
42
43local dna = tup.glob("out/dna/*.dna")
44dna.extra_inputs = {"out/bin/dna2rna"}
45tup.foreach_rule(
46 dna,
47 "./out/bin/dna2rna %f task/endo.dna %o",
48 {"out/rna/%B.rna"}
49)
50
51local rna = tup.glob("out/rna/*.rna")
52rna.extra_inputs = {"out/bin/rna2bmp"}
53tup.foreach_rule(
54 rna,
55 "./out/bin/rna2bmp %f %o",
56 {"out/bmp/%B.bmp"}
57)
58
59local bmp = tup.glob("out/bmp/*.bmp")
60tup.foreach_rule(
61 bmp,
62 "convert %f %o",
63 {"out/png/%B.png"}
64)