return i
end,
+ boolean = function(propname, i)
+ if (type(i) ~= "boolean") then
+ error(string.format("property '%s' must be a boolean", propname))
+ end
+ return i
+ end,
+
string = function(propname, i)
if (type(i) ~= "string") then
error(string.format("property '%s' must be a string", propname))
local args = {}
for propname, typespec in pairs(types) do
if not e[propname] then
- if not typespec.optional and not typespec.default then
+ if not typespec.optional and (typespec.default == nil) then
error(string.format("missing mandatory property '%s'", propname))
end
end
hdrpaths = uniquify(hdrpaths)
- for _, f in pairs(filenamesof(hdeps)) do
- hsrcs[#hsrcs+1] = f
- end
-
local outleaf = basename(csrcs[1]):gsub("%.c$", ".o")
return normalrule {
end
)
+definerule("cppfile",
+ {
+ srcs = { type="targets" },
+ deps = { type="targets", default={} },
+ outleaf = { type="string" },
+ cflags = { type="strings", default={} },
+ commands = {
+ type="strings",
+ default={
+ "$(CC) -E -P -o %{outs[1]} %{hdrpaths} %{cflags} -x c %{ins}"
+ }
+ },
+ },
+ function (e)
+ if (#e.srcs ~= 1) then
+ error("you must have exactly one input file")
+ end
+
+ local hdrpaths = {}
+ for _, t in pairs(e.deps) do
+ hdrpaths[#hdrpaths+1] = "-I"..t.dir
+ end
+ hdrpaths = uniquify(hdrpaths)
+
+ return normalrule {
+ name = e.name,
+ cwd = e.cwd,
+ ins = e.srcs,
+ deps = e.deps,
+ outleaves = {e.outleaf},
+ label = e.label,
+ commands = e.commands,
+ vars = {
+ hdrpaths = hdrpaths,
+ cflags = e.cflags,
+ }
+ }
+ end
+)
+
definerule("bundle",
{
srcs = { type="targets" },
--- /dev/null
+include("first/yacc.lua")
+
+definerule("build_as",
+ {
+ arch = { type="string" }
+ },
+ function(e)
+ -- Remember this is executed from the caller's directory; local
+ -- target names will resolve there
+ local archlib = clibrary {
+ name = e.name.."/archlib",
+ srcs = {},
+ hdrs = { "mach/"..e.arch.."/as/mach*.c" }
+ }
+
+ local preprocessedy = cppfile {
+ name = e.name.."/yaccinput",
+ srcs = { "mach/proto/as/comm2.y" },
+ outleaf = "comm2.y",
+ deps = {
+ "h+emheaders",
+ archlib,
+ },
+ }
+
+ local yaccfiles = yacc {
+ name = e.name.."/yacc",
+ srcs = { preprocessedy }
+ }
+
+ return cprogram {
+ name = e.name,
+ srcs = {
+ "mach/proto/as/*.c",
+ yaccfiles, -- for .c file
+ },
+ deps = {
+ "h+emheaders",
+ "modules/src/object+lib",
+ archlib,
+ yaccfiles, -- for .h file
+ }
+ }
+ end
+)
+
--- /dev/null
+cprogram {
+ name = "esize",
+ srcs = { "./esize.c" },
+}
+
+cprogram {
+ name = "encode",
+ srcs = { "./convert.c" },
+ deps = {
+ "h+emheaders",
+ "modules+headers",
+ "modules/src/alloc+lib",
+ "modules/src/em_code+lib_k",
+ "modules/src/print+lib",
+ "modules/src/read_em+lib_ev",
+ "modules/src/string+lib",
+ "modules/src/system+lib",
+ "util/data+em_data",
+ }
+}
+
+installable {
+ name = "pkg",
+ map = {
+ ["$(PLATDEP)/em_encode"] = "+encode",
+ ["$(INSDIR)/bin/esize"] = "+esize",
+ ["$(PLATIND)/man/man1/esize.1"] = "./esize.1",
+ ["$(PLATIND)/man/man6/em_decode.6"] = "./em_decode.6"
+ }
+}
+
+--[[
+D := util/misc
+
+define build-misc-impl
+ $(call reset)
+ $(call cfile, $D/esize.c)
+ $(call cprogram, $(BINDIR)/esize)
+ $(call installto, $(INSDIR)/bin/esize)
+
+ $(call reset)
+ $(eval q := $D/esize.1)
+ $(call installto, $(INSDIR)/share/man/man1/esize.1)
+
+ $(call reset)
+ $(eval objdir := encode)
+ $(call cfile, $D/convert.c)
+ $(eval $q: $(INCDIR)/em_comp.h $(INCDIR)/em_codeEK.h)
+ $(call rawfile, $(LIBREAD_EMEV))
+ $(call rawfile, $(LIBEMK))
+ $(call rawfile, $(LIBEM_DATA))
+ $(call rawfile, $(LIBALLOC))
+ $(call rawfile, $(LIBPRINT))
+ $(call rawfile, $(LIBSTRING))
+ $(call rawfile, $(LIBSYSTEM))
+ $(call cprogram, $(BINDIR)/em_encode)
+ $(call installto, $(PLATDEP)/em_encode)
+ $(eval EM_ENCODE := $o)
+ $(eval ACK_CORE_TOOLS += $o)
+
+ $(call reset)
+ $(eval objdir := decode)
+ $(call cfile, $D/convert.c)
+ $(eval $q: $(INCDIR)/em_comp.h $(INCDIR)/em_codeEK.h)
+ $(call rawfile, $(LIBREAD_EMKV))
+ $(call rawfile, $(LIBEME))
+ $(call rawfile, $(LIBEM_DATA))
+ $(call rawfile, $(LIBALLOC))
+ $(call rawfile, $(LIBPRINT))
+ $(call rawfile, $(LIBSTRING))
+ $(call rawfile, $(LIBSYSTEM))
+ $(call cprogram, $(BINDIR)/em_decode)
+ $(call installto, $(PLATDEP)/em_decode)
+ $(eval EM_DECODE := $o)
+
+ $(call reset)
+ $(eval q := $D/em_decode.6)
+ $(call installto, $(INSDIR)/share/man/man6/em_decode.6)
+endef
+
+$(eval $(build-misc-impl))
+--]]