From: David Given Date: Sat, 16 Jul 2016 12:58:29 +0000 (+0200) Subject: Built a make bootstrap that runs either make or ninja depending on which is X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=523374c36ba1fedb5d4e65dbf8305486fbc73f79;p=ack.git Built a make bootstrap that runs either make or ninja depending on which is installed. --- diff --git a/Makefile b/Makefile index 0a2e7cab7..4cdb47e92 100644 --- 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) diff --git a/first/ackbuilder.lua b/first/ackbuilder.lua index 2b6522246..935346c74 100644 --- a/first/ackbuilder.lua +++ b/first/ackbuilder.lua @@ -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 index 000000000..d95daeed9 --- /dev/null +++ b/first/build.ninja @@ -0,0 +1,2 @@ +subninja .obj/rules.ninja +