which requires top and topgen.
"-O"
}
vars.plats = {
- "pc86"
+ "pc86",
+ "cpm",
}
installable {
"lang/cem/cemcom.ansi+pkg",
"lang/m2/comp+pkg",
"lang/pc/comp+pkg",
+ "plat/cpm+pkg",
"plat/pc86+pkg",
"util/ack+pkg",
"util/amisc+pkg",
include("util/cmisc/build.lua")
+include("util/LLgen/build.lua")
local allocd_header = definerule(nil,
{
--- /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
+include("util/topgen/build.lua")
+
+definerule("build_top",
+ {
+ arch = { type="string" },
+ },
+ function(e)
+ local t = topgen {
+ name = e.name.."_topgen",
+ srcs = { "mach/"..e.arch.."/top/table" }
+ }
+
+ return cprogram {
+ name = e.name,
+ srcs = { "mach/proto/top/*.c", },
+ deps = { t },
+ }
+ end
+)
include("mach/proto/as/build.lua")
include("mach/proto/ncg/build.lua")
+include("mach/proto/top/build.lua")
definerule("ackfile",
{
end
)
-definerule("build_plat_tools",
- {
- arch = { type="string" },
- plat = { type="string" },
- },
- function(e)
- local descr = "plat/"..e.plat.."/descr"
-
- local as = build_as {
- name = "as",
- arch = e.arch
- }
-
- local ncg = build_ncg {
- name = "ncg",
- arch = e.arch,
- }
-
- return installable {
- name = e.name,
- map = {
- ["$(PLATDEP)/"..e.plat.."/as"] = as,
- ["$(PLATDEP)/"..e.plat.."/ncg"] = ncg,
- ["$(PLATIND)/descr/"..e.plat] = descr,
- "util/opt+pkg",
- }
- }
- end
-)
-
definerule("build_plat_libs",
{
arch = { type="string" },
name = e.name,
map = {
"lang/basic/lib+pkg_"..e.plat,
- "lang/cem/libcc.ansi+pkg_"..e.plat,
- "lang/m2/libm2+pkg_"..e.plat,
- "lang/pc/libpc+pkg_"..e.plat,
+ --"lang/cem/libcc.ansi+pkg_"..e.plat,
+ --"lang/m2/libm2+pkg_"..e.plat,
+ --"lang/pc/libpc+pkg_"..e.plat,
["$(PLATIND)/"..e.plat.."/libem.a"] = "mach/"..e.arch.."/libem+lib_"..e.plat,
["$(PLATIND)/"..e.plat.."/libend.a"] = "mach/"..e.arch.."/libend+lib_"..e.plat,
- ["$(PLATIND)/"..e.plat.."/libsys.a"] = "mach/"..e.arch.."/libsys+lib_"..e.plat,
}
}
end
)
-
--- /dev/null
+include("plat/build.lua")
+
+acklibrary {
+ name = "headers",
+ hdrs = {
+ ["ack/config.h"] = "./include/ack/config.h",
+ ["unistd.h"] = "./include/unistd.h",
+ ["cpm.h"] = "./include/cpm.h",
+ }
+}
+
--- /dev/null
+include("plat/build.lua")
+include("lang/build.lua")
+
+ackfile {
+ name = "boot",
+ srcs = { "./boot.s" },
+ vars = { plat = "cpm" }
+}
+
+build_plat_libs {
+ name = "libs",
+ arch = "i80",
+ plat = "cpm",
+}
+
+installable {
+ name = "pkg",
+ map = {
+ "+tools",
+ "+libs",
+ ["$(PLATIND)/cpm/boot.o"] = "+boot"
+ }
+}
+
--- /dev/null
+include("plat/build.lua")
+
+build_as {
+ name = "as",
+ arch = "i80",
+}
+
+build_ncg {
+ name = "ncg",
+ arch = "i80",
+}
+
+build_top {
+ name = "top",
+ arch = "i80",
+}
+
+return installable {
+ name = "tools",
+ map = {
+ ["$(PLATDEP)/cpm/as"] = "+as",
+ ["$(PLATDEP)/cpm/ncg"] = "+ncg",
+ ["$(PLATDEP)/cpm/top"] = "+top",
+ ["$(PLATIND)/descr/cpm"] = "./descr",
+ "util/opt+pkg",
+ }
+}
--- /dev/null
+include("plat/build.lua")
+
+acklibrary {
+ name = "headers",
+ hdrs = {
+ ["ack/config.h"] = "./include/ack/config.h",
+ ["unistd.h"] = "./include/unistd.h",
+ }
+}
+
include("plat/build.lua")
-include("lang/build.lua")
-
-build_plat_tools {
- name = "tools",
- arch = "i86",
- plat = "pc86",
-}
ackfile {
name = "boot",
vars = { plat = "pc86" }
}
-acklibrary {
- name = "headers",
- hdrs = {
- ["ack/config.h"] = "./include/ack/config.h",
- ["unistd.h"] = "./include/unistd.h",
- }
-}
-
build_plat_libs {
name = "libs",
arch = "i86",
--- /dev/null
+include("plat/build.lua")
+
+build_as {
+ name = "as",
+ arch = "i86",
+}
+
+build_ncg {
+ name = "ncg",
+ arch = "i86",
+}
+
+return installable {
+ name = "tools",
+ map = {
+ ["$(PLATDEP)/pc86/as"] = "+as",
+ ["$(PLATDEP)/pc86/ncg"] = "+ncg",
+ ["$(PLATIND)/descr/pc86"] = "./descr",
+ "util/opt+pkg",
+ }
+}
--- /dev/null
+include("util/LLgen/build.lua")
+
+llgen {
+ name = "llgen",
+ srcs = { "./*.g" }
+}
+
+cprogram {
+ name = "topgen",
+ srcs = {
+ "./*.c",
+ matching(filenamesof("+llgen"), "%.c$"),
+ },
+ deps = {
+ "+llgen",
+ }
+}
+
+definerule("topgen",
+ {
+ srcs = { type="targets" },
+ },
+ function(e)
+ -- Remember this is executed from the caller's directory; local
+ -- target names will resolve there
+
+ return normalrule {
+ name = e.name,
+ outleaves = {
+ "gen.c",
+ "gen.h",
+ },
+ ins = {
+ "util/topgen+topgen",
+ e.srcs,
+ },
+ commands = {
+ "%{ins[1]} %{ins[2]} %{dir}"
+ }
+ }
+ end
+)
+
main(argc,argv) char *argv[]; {
newline = 1;
- if (argc != 2) {
- fprintf(stderr,"Usage : %s targetoptimizerdescription\n",argv[0]);
+ if (argc != 3) {
+ fprintf(stderr,"Usage : %s targetoptimizerdescription outputdir\n",argv[0]);
exit(1);
}
if ((input = fopen(argv[1],"r")) == NULL) {
fprintf(stderr,"Fatal error : couldn't open %s\n",argv[1]);
exit(1);
+ }
+ if (chdir(argv[2]) != 0) {
+ fprintf(stderr,"Fatal error : couldn't chdir to %s\n",argv[2]);
+ exit(1);
}
if ((genc = fopen("gen.c","w")) == NULL) {
fputs("Fatal error : couldn't open gen.c\n",stderr);