From 262c5fedcf72af4904baef131c4b8a7c0fe94048 Mon Sep 17 00:00:00 2001 From: David Given Date: Sun, 14 Aug 2016 01:39:40 +0200 Subject: [PATCH] Biggish refactor to break cycles; my build rules were full of them. cpm builds, which requires top and topgen. --- build.lua | 4 ++- lang/cem/cpp.ansi/build.lua | 1 + mach/i80/libem/build.lua | 8 +++++ mach/i80/libend/build.lua | 8 +++++ mach/proto/top/build.lua | 19 ++++++++++++ plat/build.lua | 39 +++-------------------- plat/cpm/build-headers.lua | 11 +++++++ plat/cpm/build-pkg.lua | 24 ++++++++++++++ plat/cpm/build-tools.lua | 27 ++++++++++++++++ plat/pc86/build-headers.lua | 10 ++++++ plat/pc86/{build.lua => build-pkg.lua} | 15 --------- plat/pc86/build-tools.lua | 21 +++++++++++++ util/topgen/build.lua | 43 ++++++++++++++++++++++++++ util/topgen/main.c | 8 +++-- 14 files changed, 185 insertions(+), 53 deletions(-) create mode 100644 mach/i80/libem/build.lua create mode 100644 mach/i80/libend/build.lua create mode 100644 mach/proto/top/build.lua create mode 100644 plat/cpm/build-headers.lua create mode 100644 plat/cpm/build-pkg.lua create mode 100644 plat/cpm/build-tools.lua create mode 100644 plat/pc86/build-headers.lua rename plat/pc86/{build.lua => build-pkg.lua} (54%) create mode 100644 plat/pc86/build-tools.lua create mode 100644 util/topgen/build.lua diff --git a/build.lua b/build.lua index 30da3e902..c5a59a135 100644 --- a/build.lua +++ b/build.lua @@ -5,7 +5,8 @@ vars.ackcflags = { "-O" } vars.plats = { - "pc86" + "pc86", + "cpm", } installable { @@ -15,6 +16,7 @@ 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", diff --git a/lang/cem/cpp.ansi/build.lua b/lang/cem/cpp.ansi/build.lua index 1f22fe88f..be124530f 100644 --- a/lang/cem/cpp.ansi/build.lua +++ b/lang/cem/cpp.ansi/build.lua @@ -1,4 +1,5 @@ include("util/cmisc/build.lua") +include("util/LLgen/build.lua") local allocd_header = definerule(nil, { diff --git a/mach/i80/libem/build.lua b/mach/i80/libem/build.lua new file mode 100644 index 000000000..ca5a13c65 --- /dev/null +++ b/mach/i80/libem/build.lua @@ -0,0 +1,8 @@ +for _, plat in ipairs(vars.plats) do + acklibrary { + name = "lib_"..plat, + srcs = { "./*.s" }, + vars = { plat = plat }, + } +end + diff --git a/mach/i80/libend/build.lua b/mach/i80/libend/build.lua new file mode 100644 index 000000000..ca5a13c65 --- /dev/null +++ b/mach/i80/libend/build.lua @@ -0,0 +1,8 @@ +for _, plat in ipairs(vars.plats) do + acklibrary { + name = "lib_"..plat, + srcs = { "./*.s" }, + vars = { plat = plat }, + } +end + diff --git a/mach/proto/top/build.lua b/mach/proto/top/build.lua new file mode 100644 index 000000000..56ee652b9 --- /dev/null +++ b/mach/proto/top/build.lua @@ -0,0 +1,19 @@ +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 +) diff --git a/plat/build.lua b/plat/build.lua index 05f746fea..deb2e4647 100644 --- a/plat/build.lua +++ b/plat/build.lua @@ -1,5 +1,6 @@ include("mach/proto/as/build.lua") include("mach/proto/ncg/build.lua") +include("mach/proto/top/build.lua") definerule("ackfile", { @@ -53,36 +54,6 @@ definerule("acklibrary", 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" }, @@ -93,15 +64,13 @@ definerule("build_plat_libs", 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 ) - diff --git a/plat/cpm/build-headers.lua b/plat/cpm/build-headers.lua new file mode 100644 index 000000000..eb3cc8fbb --- /dev/null +++ b/plat/cpm/build-headers.lua @@ -0,0 +1,11 @@ +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", + } +} + diff --git a/plat/cpm/build-pkg.lua b/plat/cpm/build-pkg.lua new file mode 100644 index 000000000..1dace45f3 --- /dev/null +++ b/plat/cpm/build-pkg.lua @@ -0,0 +1,24 @@ +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" + } +} + diff --git a/plat/cpm/build-tools.lua b/plat/cpm/build-tools.lua new file mode 100644 index 000000000..383cf8c17 --- /dev/null +++ b/plat/cpm/build-tools.lua @@ -0,0 +1,27 @@ +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", + } +} diff --git a/plat/pc86/build-headers.lua b/plat/pc86/build-headers.lua new file mode 100644 index 000000000..8b326df8d --- /dev/null +++ b/plat/pc86/build-headers.lua @@ -0,0 +1,10 @@ +include("plat/build.lua") + +acklibrary { + name = "headers", + hdrs = { + ["ack/config.h"] = "./include/ack/config.h", + ["unistd.h"] = "./include/unistd.h", + } +} + diff --git a/plat/pc86/build.lua b/plat/pc86/build-pkg.lua similarity index 54% rename from plat/pc86/build.lua rename to plat/pc86/build-pkg.lua index 002f66a54..667d62f23 100644 --- a/plat/pc86/build.lua +++ b/plat/pc86/build-pkg.lua @@ -1,11 +1,4 @@ include("plat/build.lua") -include("lang/build.lua") - -build_plat_tools { - name = "tools", - arch = "i86", - plat = "pc86", -} ackfile { name = "boot", @@ -13,14 +6,6 @@ ackfile { 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", diff --git a/plat/pc86/build-tools.lua b/plat/pc86/build-tools.lua new file mode 100644 index 000000000..fbb34bd3a --- /dev/null +++ b/plat/pc86/build-tools.lua @@ -0,0 +1,21 @@ +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", + } +} diff --git a/util/topgen/build.lua b/util/topgen/build.lua new file mode 100644 index 000000000..715632211 --- /dev/null +++ b/util/topgen/build.lua @@ -0,0 +1,43 @@ +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 +) + diff --git a/util/topgen/main.c b/util/topgen/main.c index dd6c4c8a2..2f211f837 100644 --- a/util/topgen/main.c +++ b/util/topgen/main.c @@ -22,13 +22,17 @@ char *inpfile; 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); -- 2.34.1