93 lines
1.6 KiB
Lua
93 lines
1.6 KiB
Lua
include("first/bison.lua")
|
|
|
|
local cggparser = bison {
|
|
name = "cggparser",
|
|
srcs = { "./cgg.y" }
|
|
}
|
|
|
|
local cgglexer = flex {
|
|
name = "cgglexer",
|
|
srcs = { "./scan.l" }
|
|
}
|
|
|
|
normalrule {
|
|
name = "keywords",
|
|
ins = {
|
|
"./make_enterkeyw_c.lua",
|
|
"./keywords",
|
|
},
|
|
outleaves = { "enterkeyw.c" },
|
|
commands = {
|
|
"$(LUA) %{ins[1]} < %{ins[2]} > %{outs[1]}"
|
|
}
|
|
}
|
|
|
|
cprogram {
|
|
name = "ncgg",
|
|
srcs = concat(
|
|
"./coerc.c",
|
|
"./emlookup.c",
|
|
"./error.c",
|
|
"./expr.c",
|
|
"./hall.c",
|
|
"./instruct.c",
|
|
"./iocc.c",
|
|
"./lookup.c",
|
|
"./main.c",
|
|
"./output.c",
|
|
"./set.c",
|
|
"./strlookup.c",
|
|
"./subr.c",
|
|
"./var.c",
|
|
matching(filenamesof(cggparser), "%.c$"),
|
|
matching(filenamesof(cgglexer), "%.c$"),
|
|
"+keywords"
|
|
),
|
|
deps = {
|
|
"./cost.h", "./expr.h", "./extern.h", "./instruct.h",
|
|
"./iocc.h", "./lookup.h", "./param.h", "./property.h",
|
|
"./pseudo.h", "./reg.h", "./regvar.h", "./set.h",
|
|
"./token.h", "./varinfo.h",
|
|
"+cggparser", -- for .h file
|
|
"+cgglexer", -- for .h file
|
|
"h+emheaders",
|
|
"modules/src/em_data+lib",
|
|
}
|
|
}
|
|
|
|
definerule("ncgg",
|
|
{
|
|
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/ncgg+ncgg",
|
|
cpptable
|
|
},
|
|
commands = {
|
|
"cd %{dir} && %{ins}",
|
|
"mv %{dir}/tables.H %{dir}/tables.h"
|
|
}
|
|
}
|
|
end
|
|
)
|