91 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| include("first/yacc.lua")
 | |
| 
 | |
| flex {
 | |
| 	name = "flex",
 | |
| 	srcs = { "./*.l" },
 | |
| }
 | |
| 
 | |
| yacc {
 | |
| 	name = "yacc",
 | |
| 	srcs = { "./*.y" },
 | |
| }
 | |
| 
 | |
| normalrule {
 | |
| 	name = "ircodes",
 | |
| 	outleaves = { "ircodes-dyn.h", "ircodes.c" },
 | |
| 	ins = {
 | |
| 		"./ircodes.sh",
 | |
| 		"./ir.dat"
 | |
| 	},
 | |
| 	commands = {
 | |
| 		"%{ins[1]} %{ins[2]} %{outs[1]} %{outs[2]}"
 | |
| 	}
 | |
| }
 | |
| 
 | |
| clibrary {
 | |
| 	name = "lib",
 | |
| 	srcs = {
 | |
| 		matching(filenamesof("+ircodes"), "%.c$"),
 | |
| 	},
 | |
| 	deps = {
 | |
| 		"+ircodes",
 | |
| 		"./ircodes.h"
 | |
| 	},
 | |
| 	hdrs = {
 | |
| 		matching(filenamesof("+ircodes"), "%.h$"),
 | |
| 		"./ircodes.h",
 | |
| 		"./mcgg.h"
 | |
| 	}
 | |
| }
 | |
| 
 | |
| cprogram {
 | |
| 	name = "mcgg",
 | |
| 	srcs = {
 | |
| 		"./*.c",
 | |
| 		matching(filenamesof("+flex"), "%.c$"),
 | |
| 		matching(filenamesof("+yacc"), "%.c$")
 | |
| 	},
 | |
| 	deps = {
 | |
| 		"./iburg.h",
 | |
| 		"+lib",
 | |
| 		"+yacc",
 | |
| 		"modules/src/data+lib",
 | |
| 		"modules+headers",
 | |
| 	}
 | |
| }
 | |
| 	
 | |
| definerule("mcgg",
 | |
| 	{
 | |
| 		srcs = { type="targets" }
 | |
| 	},
 | |
| 	function(e)
 | |
| 		-- Remember this is executed from the caller's directory; local
 | |
| 		-- target names will resolve there
 | |
| 		if (#e.srcs ~= 1) then
 | |
| 			error("you must supply exactly one input file")
 | |
| 		end
 | |
| 
 | |
| 		local cpptable = cppfile {
 | |
| 			name = e.name.."/cpptable",
 | |
| 			outleaf = "cpptable",
 | |
| 			srcs = e.srcs
 | |
| 		}
 | |
| 
 | |
| 		return normalrule {
 | |
| 			name = e.name,
 | |
| 			cwd = e.cwd,
 | |
| 			outleaves = {
 | |
| 				"tables.c",
 | |
| 				"tables.h",
 | |
| 			},
 | |
| 			ins = {
 | |
| 				"util/mcgg+mcgg",
 | |
| 				cpptable
 | |
| 			},
 | |
| 			commands = {
 | |
| 				"%{ins[1]} -i %{ins[2]} -o %{outs[1]} -h %{outs[2]}",
 | |
| 			}
 | |
| 		}
 | |
| 	end
 | |
| )
 | |
| 
 |