ICFP 2007 Contest: https://web.archive.org/web/20090301164728/https://save-endo.cs.uu.nl/
at main 1.8 kB view raw
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)