Build the examples when doing a normal build; this exercises the compiler as a
authorDavid Given <dg@cowlark.com>
Sat, 20 Aug 2016 12:05:24 +0000 (14:05 +0200)
committerDavid Given <dg@cowlark.com>
Sat, 20 Aug 2016 12:05:24 +0000 (14:05 +0200)
whole and is one step further towards a proper test suite.

build.lua
examples/build.lua [new file with mode: 0644]
first/build.lua
plat/build.lua

index 24dcb39..3c5e34c 100644 (file)
--- a/build.lua
+++ b/build.lua
@@ -12,6 +12,11 @@ vars.plats = {
        "rpi",
 }
 
+local plat_packages = {}
+for _, p in ipairs(vars.plats) do
+       plat_packages[#plat_packages+1] = "plat/"..p.."+pkg"
+end
+
 installable {
        name = "ack",
        map = {
@@ -19,17 +24,14 @@ installable {
                "lang/cem/cemcom.ansi+pkg",
                "lang/m2/comp+pkg",
                "lang/pc/comp+pkg",
-               "plat/cpm+pkg",
-               "plat/linux386+pkg",
-               "plat/linux68k+pkg",
-               "plat/rpi+pkg",
-               "plat/pc86+pkg",
                "util/ack+pkg",
                "util/amisc+pkg",
                "util/arch+pkg",
                "util/led+pkg",
                "util/misc+pkg",
                "util/opt+pkg",
+               "examples+pkg",
+               plat_packages
        }
 }
 
diff --git a/examples/build.lua b/examples/build.lua
new file mode 100644 (file)
index 0000000..6317529
--- /dev/null
@@ -0,0 +1,44 @@
+include("plat/build.lua")
+
+local conly = {
+       rpi = true
+}
+
+local sourcefiles = filenamesof(
+       "./hilo.b",
+       "./hilo.c",
+       "./hilo.mod",
+       "./hilo.p",
+       "./mandelbrot.c",
+       "./paranoia.c",
+       "./startrek.c"
+)
+
+local installmap = {}
+for _, file in ipairs(sourcefiles) do
+       local b = basename(file)
+       local be = replace(b, "%.", "_")
+       local _, _, e = b:find("%.(%w*)$")
+
+       for _, plat in ipairs(vars.plats) do
+               if (e == "c") or not conly[plat] then
+                       local exe = ackprogram {
+                               name = be.."_"..plat,
+                               srcs = { file },
+                               vars = {
+                                       plat = plat,
+                                       lang = e,
+                               }
+                       }
+
+                       installmap["$(PLATIND)/examples/"..be.."."..plat] = exe
+               end
+       end
+       installmap["$(PLATIND)/examples/"..b] = file
+end
+
+installable {
+       name = "pkg",
+       map = installmap
+}
+
index 0efdadb..3240f9f 100644 (file)
@@ -216,6 +216,7 @@ definerule("cprogram",
        {
                srcs = { type="targets", default={} },
                deps = { type="targets", default={} },
+               _clibrary = { type="object", default=clibrary },
                commands = {
                        type="strings",
                        default={
@@ -229,7 +230,7 @@ definerule("cprogram",
                        for _, f in pairs(
                                matching(
                                        filenamesof(
-                                               clibrary {
+                                               e._clibrary {
                                                        name = e.name .. "/main",
                                                        cwd = e.cwd,
                                                        srcs = e.srcs,
index f46db0b..d24e5d3 100644 (file)
@@ -54,6 +54,30 @@ definerule("acklibrary",
        end
 )
 
+definerule("ackprogram",
+       {
+               srcs = { type="targets", default={} },
+               deps = { type="targets", default={} },
+       },
+       function (e)
+               return cprogram {
+                       name = e.name,
+                       srcs = e.srcs,
+                       deps = {
+                               "plat/"..e.vars.plat.."+pkg",
+                               "util/ack+pkg",
+                               "util/led+pkg",
+                               "util/amisc+pkg",
+                               e.deps
+                       },
+                       _clibrary = acklibrary,
+                       commands = {
+                               "ACKDIR=$(INSDIR) $(INSDIR)/bin/ack -m%{plat} -.%{lang} -o %{outs} %{ins}"
+                       }
+               }
+       end
+)
+
 definerule("build_plat_libs",
        {
                arch = { type="string" },