Built a make bootstrap that runs either make or ninja depending on which is
authorDavid Given <dg@cowlark.com>
Sat, 16 Jul 2016 12:58:29 +0000 (14:58 +0200)
committerDavid Given <dg@cowlark.com>
Sat, 16 Jul 2016 12:58:29 +0000 (14:58 +0200)
installed.

Makefile
first/ackbuilder.lua
first/build.ninja [new file with mode: 0644]

index 0a2e7ca..4cdb47e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -27,10 +27,15 @@ BUILDDIR = $(ACK_TEMP_DIR)/ack-build
 CFLAGS = -g
 LDFLAGS = 
 
+# Various commands.
+
+AR = ar
+CC = gcc
+
 # ======================================================================= #
 #                         END OF CONFIGURATION                            #
 # ======================================================================= #
-#
+
 # You shouldn't need to change anything below this point unless you are
 # actually developing ACK.
 
@@ -43,107 +48,160 @@ INSDIR = $(BUILDDIR)/staging
 PLATIND = $(INSDIR)/share/ack
 PLATDEP = $(INSDIR)/lib/ack
 
-CC = gcc
-AR = ar
-RM = rm -f
-CP = cp
-
-hide = @
-
-CFLAGS += \
-       -I$(INCDIR) \
-       -Imodules/h \
-       -Ih
-
-LDFLAGS +=
-
-ACKFLAGS = -Ih
-
-all: installables
-
-.DELETE_ON_ERROR:
-
-include first/core.mk
-
-include modules/src/object/build.mk
-include modules/src/alloc/build.mk
-include modules/src/input/build.mk
-include modules/src/idf/build.mk
-include modules/src/system/build.mk
-include modules/src/string/build.mk
-include modules/src/print/build.mk
-include modules/src/flt_arith/build.mk
-include modules/src/em_code/build.mk
-include modules/src/em_mes/build.mk
-include modules/src/read_em/build.mk
-
-include util/amisc/build.mk
-include util/cmisc/build.mk
-include util/ack/build.mk
-include util/LLgen/build.mk
-include util/data/build.mk
-include util/opt/build.mk
-include util/ncgg/build.mk
-include util/arch/build.mk
-include util/misc/build.mk
-include util/led/build.mk
-include util/topgen/build.mk
-include util/ego/build.mk
-
-include lang/cem/build.mk
-include lang/basic/build.mk
-include lang/pc/build.mk
-include lang/m2/build.mk
-
-include mach/proto/as/build.mk
-include mach/proto/ncg/build.mk
-include mach/proto/top/build.mk
-
-include plat/linux/liblinux/build.mk
-
-include mach/i80/build.mk
-include mach/i386/build.mk
-include mach/i86/build.mk
-include mach/m68020/build.mk
-# include mach/powerpc/build.mk
-include mach/vc4/build.mk
-
-include plat/build.mk
-include plat/pc86/build.mk
-include plat/cpm/build.mk
-include plat/linux386/build.mk
-include plat/linux68k/build.mk
-# include plat/linuxppc/build.mk
-include plat/rpi/build.mk
-
-.PHONY: installables
-installables: $(INSTALLABLES)
-       @echo ""
-       @echo "Build completed successfully."
-
-.PHONY: install
-install: installables
-       @echo INSTALLING into $(PREFIX)
-       $(hide) tar cf - -C $(INSDIR) . | tar xvf - -C $(PREFIX)
-
-.PHONY: clean
+MAKECMDGOALS ?= +ack
+BUILD_FILES = $(shell find * -name build.lua)
+
+NINJA := $(shell which ninja)
+ifneq ($(findstring +, $(MAKECMDGOALS)),)
+ifneq ($(NINJA),)
+
+$(MAKECMDGOALS): $(BUILDDIR)/build.ninja $(BUILDDIR)/rules.ninja
+       @ninja -f $(BUILDDIR)/build.ninja $(MAKECMDGOALS)
+
+$(BUILDDIR)/build.ninja: Makefile
+       @mkdir -p $(BUILDDIR)
+       echo "OBJDIR = $(OBJDIR)" > $@
+       echo "BINDIR = $(BINDIR)" >> $@
+       echo "LIBDIR = $(LIBDIR)" >> $@
+       echo "INCDIR = $(INCDIR)" >> $@
+       echo "INSDIR = $(INSDIR)" >> $@
+       echo "PLATIND = $(PLATIND)" >> $@
+       echo "PLATDEP = $(PLATDEP)" >> $@
+       echo "AR = $(AR)" >> $@
+       echo "CC = $(CC)" >> $@
+       echo "subninja $(BUILDDIR)/rules.ninja" >> $@
+
+else
+
+$(MAKECMDGOALS): $(BUILDDIR)/rules.mk
+       make -r -f $(BUILDDIR)/rules.mk $@ \
+               $(MAKEFLAGS) \
+               OBJDIR=$(OBJDIR) \
+               BINDIR=$(BINDIR) \
+               LIBDIR=$(LIBDIR) \
+               INCDIR=$(INCDIR) \
+               INSDIR=$(INSDIR) \
+               PLATIND=$(PLATIND) \
+               PLATDEP=$(PLATDEP) \
+               AR=$(AR) \
+               CC=$(CC)
+
+endif
+endif
+
+$(BUILDDIR)/rules.ninja: first/ackbuilder.lua $(BUILD_FILES)
+       @mkdir -p $(BUILDDIR)
+       lua5.2 first/ackbuilder.lua first/build.lua build.lua --ninja > $(BUILDDIR)/rules.ninja
+
+$(BUILDDIR)/rules.mk: first/ackbuilder.lua $(BUILD_FILES)
+       @mkdir -p $(BUILDDIR)
+       lua5.2 first/ackbuilder.lua first/build.lua build.lua --make > $(BUILDDIR)/rules.mk
+
 clean:
-       @echo CLEAN
-       $(hide) $(RM) $(CLEANABLES)
-
-$(INCDIR)/local.h:
-       @echo LOCAL
-       @mkdir -p $(dir $@)
-       $(hide) echo '#define VERSION 3' > $@
-       $(hide) echo '#define ACKM "$(DEFAULT_PLATFORM)"' >> $@
-       $(hide) echo '#define BIGMACHINE 1' >> $@
-       $(hide) echo '#define SYS_5' >> $@
-
-$(INCDIR)/em_path.h:
-       @echo EM_PATH
-       @mkdir -p $(dir $@)
-       $(hide) echo '#define TMP_DIR "$(ACK_TEMP_DIR)"' > $@
-       $(hide) echo '#define EM_DIR "$(PREFIX)"' >> $@
-       $(hide) echo '#define ACK_PATH "share/ack/descr"' >> $@
-
--include $(DEPENDS)
+       @rm -rf $(BUILDDIR)
+
+#
+#CC = gcc
+#AR = ar
+#RM = rm -f
+#CP = cp
+#
+#hide = @
+#
+#CFLAGS += \
+#      -I$(INCDIR) \
+#      -Imodules/h \
+#      -Ih
+#
+#LDFLAGS +=
+#
+#ACKFLAGS = -Ih
+#
+#all: installables
+#
+#.DELETE_ON_ERROR:
+#
+#include first/core.mk
+#
+#include modules/src/object/build.mk
+#include modules/src/alloc/build.mk
+#include modules/src/input/build.mk
+#include modules/src/idf/build.mk
+#include modules/src/system/build.mk
+#include modules/src/string/build.mk
+#include modules/src/print/build.mk
+#include modules/src/flt_arith/build.mk
+#include modules/src/em_code/build.mk
+#include modules/src/em_mes/build.mk
+#include modules/src/read_em/build.mk
+#
+#include util/amisc/build.mk
+#include util/cmisc/build.mk
+#include util/ack/build.mk
+#include util/LLgen/build.mk
+#include util/data/build.mk
+#include util/opt/build.mk
+#include util/ncgg/build.mk
+#include util/arch/build.mk
+#include util/misc/build.mk
+#include util/led/build.mk
+#include util/topgen/build.mk
+#include util/ego/build.mk
+#
+#include lang/cem/build.mk
+#include lang/basic/build.mk
+#include lang/pc/build.mk
+#include lang/m2/build.mk
+#
+#include mach/proto/as/build.mk
+#include mach/proto/ncg/build.mk
+#include mach/proto/top/build.mk
+#
+#include plat/linux/liblinux/build.mk
+#
+#include mach/i80/build.mk
+#include mach/i386/build.mk
+#include mach/i86/build.mk
+#include mach/m68020/build.mk
+## include mach/powerpc/build.mk
+#include mach/vc4/build.mk
+#
+#include plat/build.mk
+#include plat/pc86/build.mk
+#include plat/cpm/build.mk
+#include plat/linux386/build.mk
+#include plat/linux68k/build.mk
+## include plat/linuxppc/build.mk
+#include plat/rpi/build.mk
+#
+#.PHONY: installables
+#installables: $(INSTALLABLES)
+#      @echo ""
+#      @echo "Build completed successfully."
+#
+#.PHONY: install
+#install: installables
+#      @echo INSTALLING into $(PREFIX)
+#      $(hide) tar cf - -C $(INSDIR) . | tar xvf - -C $(PREFIX)
+#
+#.PHONY: clean
+#clean:
+#      @echo CLEAN
+#      $(hide) $(RM) $(CLEANABLES)
+#
+#$(INCDIR)/local.h:
+#      @echo LOCAL
+#      @mkdir -p $(dir $@)
+#      $(hide) echo '#define VERSION 3' > $@
+#      $(hide) echo '#define ACKM "$(DEFAULT_PLATFORM)"' >> $@
+#      $(hide) echo '#define BIGMACHINE 1' >> $@
+#      $(hide) echo '#define SYS_5' >> $@
+#
+#$(INCDIR)/em_path.h:
+#      @echo EM_PATH
+#      @mkdir -p $(dir $@)
+#      $(hide) echo '#define TMP_DIR "$(ACK_TEMP_DIR)"' > $@
+#      $(hide) echo '#define EM_DIR "$(PREFIX)"' >> $@
+#      $(hide) echo '#define ACK_PATH "share/ack/descr"' >> $@
+#
+#-include $(DEPENDS)
index 2b65222..935346c 100644 (file)
@@ -146,7 +146,10 @@ end
 local function abspath(collection)
        return dotocollection(collection,
                function(filename)
-                       return concatpath(posix.getcwd(), filename)
+                       if not filename:find("^[/$]") then
+                               filename = concatpath(posix.getcwd(), filename)
+                       end
+                       return filename
                end
        )
 end
diff --git a/first/build.ninja b/first/build.ninja
new file mode 100644 (file)
index 0000000..d95daee
--- /dev/null
@@ -0,0 +1,2 @@
+subninja .obj/rules.ninja
+