name = "ack",
map = {
"lang/cem/cemcom.ansi+pkg",
+ "plat/pc86+pkg",
"util/ack+pkg",
"util/amisc+pkg",
"util/arch+pkg",
"util/misc+pkg",
- "plat/pc86+pkg",
+ "util/opt+pkg",
}
}
target = targets[targetname]
if not target then
- error(string.format("build file '%s' contains no rule '%s'",
+ error(string.format("build file '%s' contains no target '%s'",
filename, targetpart))
end
end
include("util/LLgen/build.lua")
+include("util/cmisc/build.lua")
normalrule {
name = "parameters",
}
normalrule {
- name = "tokenname-g",
+ name = "tokenfile-g",
ins = {
"./make.tokfile",
"./tokenname.c",
},
- outleaves = { "tokenname.g" },
+ outleaves = { "tokenfile.g" },
+ commands = {
+ "sh %{ins[1]} < %{ins[2]} > %{outs}",
+ }
+}
+
+normalrule {
+ name = "symbol2str-c",
+ ins = {
+ "./make.tokcase",
+ "./tokenname.c",
+ },
+ outleaves = { "symbol2str.c" },
commands = {
"sh %{ins[1]} < %{ins[2]} > %{outs}",
}
llgen {
name = "llgen",
srcs = {
- "+tokenname-g", -- must be first
+ "+tokenfile-g", -- must be first
"./*.g",
},
}
+tabgen {
+ name = "tabgen",
+ srcs = { "./char.tab" }
+}
+
cprogram {
name = "cemcom",
srcs = {
+ "./LLlex.c",
+ "./LLmessage.c",
+ "./arith.c",
+ "./blocks.c",
"./ch3.c",
"./ch3bin.c",
"./ch3mon.c",
"./tokenname.c",
"./type.c",
"./util.c",
+ "+symbol2str-c",
+ "+tabgen",
+ matching(filenamesof("+llgen"), "%.c$"),
},
deps = {
+ "./*.h",
"+parameters",
"+nextlib",
"+llgen",
"h+emheaders",
"modules/src/alloc+lib",
"modules/src/em_code+lib_k",
+ "modules/src/em_mes+lib",
"modules/src/flt_arith+lib",
"modules/src/idf+lib",
"modules/src/input+lib",
+ "modules/src/print+lib",
+ "modules/src/string+lib",
"modules/src/system+lib",
"modules+headers",
"util/data+em_data",
%
-hdrs = { "./src/system/system.h" },
-hdrs = { "./src/system/system.h" },
% CHARACTER CLASSES
%
% some general settings:
--- /dev/null
+for _, plat in ipairs(vars.plats) do
+ acklibrary {
+ name = "lib_"..plat,
+ srcs = {
+ "./assert/*.c",
+ },
+ hdrs = {
+ },
+ vars = { plat = plat }
+ }
+
+ ackfile {
+ name = "crt_"..plat,
+ srcs = { "./head_ac.e" },
+ vars = { plat = plat },
+ deps = {
+ "h+emheaders"
+ }
+ }
+
+ installable {
+ name = "pkg_"..plat,
+ map = {
+ ["$(PLATIND)/"..plat.."/c-ansi.o"] = "+crt_"..plat,
+ --["$(PLATIND)/"..plat.."/libc.a"] = "+lib_"..plat,
+ }
+ }
+end
+
--- /dev/null
+for _, plat in ipairs(vars.plats) do
+ acklibrary {
+ name = "lib_"..plat,
+ srcs = { "./*.s" },
+ vars = { plat = plat },
+ }
+end
+
--- /dev/null
+for _, plat in ipairs(vars.plats) do
+ acklibrary {
+ name = "lib_"..plat,
+ srcs = { "./*.s" },
+ vars = { plat = plat },
+ }
+end
+
--- /dev/null
+clibrary {
+ name = "lib",
+ srcs = { "./*.c" },
+ hdrs = { "./assert.h" },
+}
+
+
--- /dev/null
+clibrary {
+ name = "lib",
+ srcs = { "./*.c" },
+ deps = {
+ "h+emheaders",
+ "modules+headers",
+ "modules/src/em_code+em_code_ek_h",
+ "util/data+em_data",
+ }
+}
+
clibrary {
name = "lib",
- srcs = { "./*.c" },
+ srcs = {
+ "./flt_ar2flt.c",
+ "./flt_div.c",
+ "./flt_flt2ar.c",
+ "./flt_modf.c",
+ "./flt_str2fl.c",
+ "./flt_cmp.c",
+ "./flt_add.c",
+ "./b64_add.c",
+ "./flt_mul.c",
+ "./flt_nrm.c",
+ "./b64_sft.c",
+ "./flt_umin.c",
+ "./flt_chk.c",
+ "./split.c",
+ "./ucmp.c",
+ },
hdrs = { "./flt_arith.h" },
deps = {
"modules+headers"
}
}
-clibrary {
- name = "lib_ev",
- vars = {
- ["+cflags"] = {
- "-DPRIVATE=static",
- "-DEXPORT=",
- "-DNDEBUG",
- "-DCHECKING"
+local function variant(name, cflags)
+ clibrary {
+ name = name,
+ vars = {
+ ["+cflags"] = {
+ "-DPRIVATE=static",
+ "-DEXPORT=",
+ "-DNDEBUG",
+ "-DCHECKING",
+ unpack(cflags)
+ },
},
- },
- srcs = {
- "./EM_vars.c",
- "./read_em.c",
- "./mkcalls.c",
- },
- hdrs = {
- "./em_comp.h",
- },
- deps = {
- "+c_mnem_h",
- "+c_mnem_narg_h",
- "h+emheaders",
- "modules+headers",
- "modules/src/alloc+lib",
- "modules/src/em_code+em_code_ek_h",
- "modules/src/system+lib",
- "util/data+em_data",
+ srcs = {
+ "./EM_vars.c",
+ "./read_em.c",
+ "./mkcalls.c",
+ },
+ hdrs = {
+ "./em_comp.h",
+ },
+ deps = {
+ "+c_mnem_h",
+ "+c_mnem_narg_h",
+ "h+emheaders",
+ "modules+headers",
+ "modules/src/alloc+lib",
+ "modules/src/em_code+em_code_ek_h",
+ "modules/src/system+lib",
+ "util/data+em_data",
+ }
}
-}
+end
+variant("lib_ev", {})
+variant("lib_kv", { "-DCOMPACT" })
name = e.name,
srcs = e.srcs,
deps = {
+ "lang/cem/cpp.ansi+pkg",
"plat/"..plat.."+tools",
"util/ack+pkg",
- "lang/cem/cpp.ansi+pkg",
+ "util/misc+pkg",
e.deps
},
commands = {
_cfile = ackfile,
commands = {
"rm -f %{outs[1]}",
- "ACKDIR=$(INSDIR) $(INSDIR)/bin/aal q %{outs[1]} %{ins}"
+ "ACKDIR=$(INSDIR) $(INSDIR)/bin/aal qc %{outs[1]} %{ins}"
}
}
end
["$(PLATDEP)/"..e.plat.."/as"] = as,
["$(PLATDEP)/"..e.plat.."/ncg"] = ncg,
["$(PLATIND)/descr/"..e.plat] = descr,
+ "util/opt+pkg",
}
}
end
return installable {
name = e.name,
map = {
- ["$(PLATIND)/"..e.plat.."/libend.a"] = "mach/"..e.arch.."/libend+lib_"..e.plat
+ ["$(PLATIND)/"..e.plat.."/libend.a"] = "mach/"..e.arch.."/libend+lib_"..e.plat,
+ ["$(PLATIND)/"..e.plat.."/libem.a"] = "mach/"..e.arch.."/libem+lib_"..e.plat,
+ ["$(PLATIND)/"..e.plat.."/libsys.a"] = "mach/"..e.arch.."/libsys+lib_"..e.plat,
+ "lang/cem/libcc.ansi+pkg_"..e.plat,
}
}
end
include("plat/build.lua")
+include("lang/build.lua")
build_plat_tools {
name = "tools",
}
}
+cprogram {
+ name = "decode",
+ 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_kv",
+ "modules/src/string+lib",
+ "modules/src/system+lib",
+ "util/data+em_data",
+ }
+}
+
installable {
name = "pkg",
map = {
["$(PLATDEP)/em_encode"] = "+encode",
+ ["$(PLATDEP)/em_decode"] = "+decode",
["$(INSDIR)/bin/esize"] = "+esize",
["$(PLATIND)/man/man1/esize.1"] = "./esize.1",
["$(PLATIND)/man/man6/em_decode.6"] = "./em_decode.6"
--- /dev/null
+include("first/yacc.lua")
+
+yacc {
+ name = "yacc",
+ srcs = { "./mktab.y" }
+}
+
+flex {
+ name = "flex",
+ srcs = { "./scan.l" }
+}
+
+cprogram {
+ name = "mktab",
+ srcs = {
+ matching(filenamesof("+yacc"), "%.c$"),
+ matching(filenamesof("+flex"), "%.c$"),
+ },
+ deps = {
+ "+flex",
+ "+yacc",
+ "util/data+em_data",
+ }
+}
+
+normalrule {
+ name = "pattern_c",
+ ins = {
+ "+mktab",
+ "./patterns",
+ "lang/cem/cpp.ansi+cpp"
+ },
+ outleaves = { "pattern.c" },
+ commands = {
+ "%{ins[3]} < %{ins[2]} | %{ins[1]} > %{outs}"
+ }
+}
+
+normalrule {
+ name = "pop_push_c",
+ ins = {
+ "./pop_push.awk",
+ "h/em_table"
+ },
+ outleaves = { "pop_push.c" },
+ commands = {
+ "awk -f %{ins[1]} < %{ins[2]} > %{outs}"
+ }
+}
+
+local function variant(name, cflags)
+ cprogram {
+ name = name,
+ srcs = {
+ "+pattern_c",
+ "+pop_push_c",
+ "./*.c",
+ },
+ deps = {
+ "./*.h",
+ "h+emheaders",
+ "modules/src/alloc+lib",
+ "modules/src/print+lib",
+ "modules/src/string+lib",
+ "modules/src/system+lib",
+ "util/data+em_data",
+ },
+ vars = {
+ ["+cflags"] = cflags
+ }
+ }
+end
+
+variant("em_opt", {})
+variant("em_opt2", {"-DGLOBAL_OPT"})
+
+installable {
+ name = "pkg",
+ map = {
+ ["$(PLATDEP)/em_opt"] = "+em_opt",
+ ["$(PLATDEP)/em_opt2"] = "+em_opt2",
+ ["$(INSDIR)/share/man/man6/em_opt.6"] = "./em_opt.6",
+ }
+}
+