diff --git a/build.lua b/build.lua index 0b1637f63..028e6f0ab 100644 --- a/build.lua +++ b/build.lua @@ -11,8 +11,9 @@ vars.plats = { installable { name = "ack", map = { - "lang/cem/cemcom.ansi+pkg", "lang/basic/src+pkg", + "lang/cem/cemcom.ansi+pkg", + "lang/m2/comp+pkg", "plat/pc86+pkg", "util/ack+pkg", "util/amisc+pkg", diff --git a/lang/m2/comp/build.lua b/lang/m2/comp/build.lua new file mode 100644 index 000000000..b17eb31ff --- /dev/null +++ b/lang/m2/comp/build.lua @@ -0,0 +1,133 @@ +normalrule { + name = "tokenfile_g", + ins = { + "./make.tokfile", + "./tokenname.c" + }, + outleaves = { "tokenfile.g" }, + commands = { + "sh %{ins[1]} < %{ins[2]} > %{outs}" + } +} + +llgen { + name = "llgen", + srcs = { + -- order here is important + "+tokenfile_g", + "./*.g", + } +} + +normalrule { + name = "parameters_h", + ins = { + "./make.parameters", + "./BigPars", + }, + outleaves = { "parameters.h" }, + commands = { + "sh %{ins[1]} < %{ins[2]} > %{outs}" + } +} + +for _, f in ipairs(filenamesof("./*.H")) do + local name = replace(basename(f), "%.H$", "") + normalrule { + name = name.."_h", + ins = { + "./make.allocd", + f + }, + outleaves = { name..".h" }, + commands = { + "%{ins[1]} < %{ins[2]} > %{outs}" + } + } +end + +for _, f in ipairs(filenamesof("./*.C")) do + local name = replace(basename(f), "%.C$", "") + normalrule { + name = name.."_c", + ins = { + "./make.allocd", + f + }, + outleaves = { name..".c" }, + commands = { + "%{ins[1]} < %{ins[2]} > %{outs}" + } + } +end + +normalrule { + name = "next_c", + ins = { + "./make.next", + "./*.H", + }, + outleaves = { "next.c" }, + commands = { + "sh %{ins} > %{outs}" + } +} + +normalrule { + name = "symbol2str_c", + ins = { + "./make.tokcase", + "./tokenname.c", + }, + outleaves = { "symbol2str.c" }, + commands = { + "%{ins[1]} < %{ins[2]} > %{outs}" + } +} + +tabgen { + name = "chartab_c", + srcs = { "./char.tab" }, +} + +cprogram { + name = "em_m2", + srcs = { + "./*.c", + "+casestat_c", + "+next_c", + "+scope_c", + "+symbol2str_c", + "+tmpvar_c", + "+chartab_c", + matching(filenamesof("+llgen"), "%.c$"), + }, + deps = { + "+def_h", + "+llgen", + "+node_h", + "+parameters_h", + "+real_h", + "+type_h", + "h+emheaders", + "modules+headers", + "modules/src/alloc+lib", + "modules/src/em_code+lib_k", + "modules/src/flt_arith+lib", + "modules/src/idf+lib", + "modules/src/input+lib", + "modules/src/string+lib", + "modules/src/system+lib", + "modules/src/print+lib", + "modules/src/em_mes+lib", + "util/data+em_data", + } +} + +installable { + name = "pkg", + map = { + ["$(PLATDEP)/em_m2"] = "+em_m2", + ["$(INSDIR)/share/man/man6/em_m2.6"] = "./em_m2.6" + } +} diff --git a/lang/m2/comp/make.parameters b/lang/m2/comp/make.parameters new file mode 100755 index 000000000..3c9a515c5 --- /dev/null +++ b/lang/m2/comp/make.parameters @@ -0,0 +1,7 @@ +#!/bin/sh + +echo '#ifndef PARAMETERS_H' +echo '#define PARAMETERS_H' +grep -v '^!' +echo '#endif' +