ack/util/ncgg/build.lua

95 lines
1.7 KiB
Lua
Raw Normal View History

include("first/bison.lua")
2016-07-26 21:35:30 +00:00
local cggparser = bison {
2016-07-26 21:35:30 +00:00
name = "cggparser",
srcs = { "./cgg.y" }
}
local cgglexer = flex {
2016-07-26 21:35:30 +00:00
name = "cgglexer",
srcs = { "./scan.l" }
}
normalrule {
name = "keywords",
ins = {
2016-07-26 21:35:30 +00:00
"./cvtkeywords",
"util/cmisc+ed",
2016-07-26 21:35:30 +00:00
"./keywords",
matching(filenamesof(cggparser), "%.h$")
},
2016-07-26 21:35:30 +00:00
outleaves = { "enterkeyw.c" },
commands = {
"%{ins[1]} %{ins[2]} %{ins[3]} %{ins[4]} %{outs[1]}"
2016-07-26 21:35:30 +00:00
}
}
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"
),
2016-07-26 21:35:30 +00:00
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",
2016-07-26 21:35:30 +00:00
"+cggparser", -- for .h file
"+cgglexer", -- for .h file
"h+emheaders",
"modules/src/em_data+lib",
2016-07-26 21:35:30 +00:00
}
}
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
)