file "ast.txt" => ["src.rb", "parse.rb", "ast-def.rb"] do |t| ruby "parse.rb", t.prerequisites[0], t.name end file "seq.txt" => ["ast.txt", "serialize.rb"] do |t| ruby "serialize.rb", t.prerequisites[0], t.name end file "alpha.txt" => ["seq.txt", "alpha.rb"] do |t| ruby "alpha.rb", t.prerequisites[0], t.name end file "reg.txt" => ["alpha.txt", "register.rb"] do |t| ruby "register.rb", t.prerequisites[0], t.name end file "raw.txt" => ["reg.txt", "assemble.rb", "machine.rb"] do |t| ruby "assemble.rb", t.prerequisites[0], t.name end file "main.c" => ["raw.txt", "link.rb", "machine.rb", "vm.c"] do |t| ruby "link.rb", t.prerequisites[0], t.name end file "prog.c" => ["main.c", "gen-prog.rb", "prog-tmpl.c"] do |t| ruby "gen-prog.rb", t.prerequisites[0], t.name end file "prog" => "prog.c" do |t| sh "gcc", "-Wall", "-W", "-Wextra", "-Wno-misleading-indentation", "-o", t.name, t.prerequisites[0] end task :test => :default do sh "./prog > m.c && gcc -Wall -W -Wextra -o m m.c" sh "./m ABCDEabcde0123456789 | ruby qr-png.rb && zbarimg -q t.png" sh "./m | ruby qr-png.rb && zbarimg -q t.png > t.c" sh "echo -n QR-Code: > t2.c && cat m.c >> t2.c && diff t.c t2.c && echo && echo OK && echo" sh "cat prog.c | ./iocccsize -i; wc -c prog.c" sh "cat m.c | ./iocccsize -i; wc -c m.c" end task :default => "prog"