ICFP 2007 Contest: https://web.archive.org/web/20090301164728/https://save-endo.cs.uu.nl/

Use Lua instead of Python since that's what Tup does naturally

Changed files
+64 -15
-15
Tupfile
···
-
RUSTC_FLAGS = --edition=2024 -C opt-level=3 -C embed-bitcode=no -C strip=debuginfo --emit=link
-
-
run python3 generate_crate_rule.py lib dna_parsing
-
run python3 generate_crate_rule.py bin dna2rna dna_parsing
-
run python3 generate_crate_rule.py bin disassembler dna_parsing
-
run python3 generate_crate_rule.py bin rna2bmp
-
run python3 generate_crate_rule.py bin asm2dna
-
-
: foreach asm/*.asm | out/bin/asm2dna |> ./out/bin/asm2dna %f %o |> out/dna/%B.dna
-
-
: foreach out/dna/*.dna | out/bin/dna2rna |> ./out/bin/dna2rna %f task/endo.dna %o |> out/rna/%B.rna
-
-
: foreach out/rna/*.rna | out/bin/rna2bmp |> ./out/bin/rna2bmp %f %o |> out/bmp/%B.bmp
-
-
: foreach out/bmp/*.bmp |> convert %f %o |> out/png/%B.png
+64
Tupfile.lua
···
+
function define_rust_rule(name, type, deps)
+
local inputs = {}
+
for _, input in ipairs(tup.glob(name .. "/src/*.rs")) do
+
table.insert(inputs, input)
+
end
+
+
local input_rs
+
local output
+
if type == "bin" then
+
input_rs = name .. "/src/main.rs"
+
output = "out/bin/" .. name
+
else
+
input_rs = name .. "/src/lib.rs"
+
output = "out/lib/lib" .. name .. ".rlib"
+
end
+
+
local externs = {}
+
for _, dep in ipairs(deps) do
+
local rlib = "out/lib/lib" .. dep .. ".rlib"
+
table.insert(inputs, rlib)
+
table.insert(externs, "--extern " .. dep .. "=" .. rlib)
+
end
+
+
local flags = "--edition=2024 -C opt-level=3 -C embed-bitcode=no -C strip=debuginfo --emit=link"
+
local command = "rustc --crate-name " .. name .. " --crate-type=" .. type .. " " .. input_rs .. " -o %o " .. table.concat(externs, " ") .. " " .. flags
+
tup.definerule{inputs = inputs, command = command, outputs = {output}}
+
end
+
+
define_rust_rule("dna_parsing", "lib", {})
+
define_rust_rule("dna2rna", "bin", {"dna_parsing"})
+
define_rust_rule("disassembler", "bin", {"dna_parsing"})
+
define_rust_rule("rna2bmp", "bin", {})
+
define_rust_rule("asm2dna", "bin", {})
+
+
local asm = tup.glob("asm/*.asm")
+
asm.extra_inputs = {"out/bin/asm2dna"}
+
tup.foreach_rule(
+
asm,
+
"./out/bin/asm2dna %f %o",
+
{"out/dna/%B.dna"}
+
)
+
+
local dna = tup.glob("out/dna/*.dna")
+
dna.extra_inputs = {"out/bin/dna2rna"}
+
tup.foreach_rule(
+
dna,
+
"./out/bin/dna2rna %f task/endo.dna %o",
+
{"out/rna/%B.rna"}
+
)
+
+
local rna = tup.glob("out/rna/*.rna")
+
rna.extra_inputs = {"out/bin/rna2bmp"}
+
tup.foreach_rule(
+
rna,
+
"./out/bin/rna2bmp %f %o",
+
{"out/bmp/%B.bmp"}
+
)
+
+
local bmp = tup.glob("out/bmp/*.bmp")
+
tup.foreach_rule(
+
bmp,
+
"convert %f %o",
+
{"out/png/%B.png"}
+
)