From 02eb3d92c45daaffb55365a6b0c2c82f8ad8fc25 Mon Sep 17 00:00:00 2001 From: Eduard Staniloiu Date: Mon, 7 Feb 2022 18:27:05 +0200 Subject: [PATCH 1/6] Modify makefile to use incremental compilation --- makefile | 94 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 69 insertions(+), 25 deletions(-) diff --git a/makefile b/makefile index 20b9801..2e466e4 100644 --- a/makefile +++ b/makefile @@ -1,11 +1,11 @@ -.PHONY: all test +.PHONY: all test clean DC ?= dmd GIT ?= git DMD := $(DC) GDC := gdc LDC := ldc2 -OBJ_DIR := obj + LIB_SRC := \ $(shell find containers/src -name "*.d")\ $(shell find dsymbol/src -name "*.d")\ @@ -17,6 +17,13 @@ LIB_SRC := \ $(shell find stdx-allocator/source -name "*.d") PROJECT_SRC := $(shell find src/ -name "*.d") SRC := $(LIB_SRC) $(PROJECT_SRC) + +UT_OBJ_DIR = unittest-obj +OBJ_DIR := obj +OBJ = $(SRC:.d=.o) +PROJECT_OBJ = $(PROJECT_SRC:.d=.o) +LIB_OBJ = $(LIB_SRC:.d=.o) + INCLUDE_PATHS = \ -Isrc \ -Iinifiled/source \ @@ -33,41 +40,78 @@ override DMD_FLAGS += $(DFLAGS) override LDC_FLAGS += $(DFLAGS) override GDC_FLAGS += $(DFLAGS) DMD_TEST_FLAGS = -w -g -Jbin -version=StdLoggerDisableWarning -override LDC_FLAGS += -O5 -release -oq -d-version=StdLoggerDisableWarning -override GDC_FLAGS += -O3 -frelease -d-version=StdLoggerDisableWarning +override LDC_FLAGS += -O5 -release -oq -d-version=StdLoggerDisableWarning -Jbin +override GDC_FLAGS += -O3 -frelease -d-version=StdLoggerDisableWarning -Jbin SHELL:=/usr/bin/env bash -all: dmdbuild -ldc: ldcbuild -gdc: gdcbuild +DMD_BIN = bin/dmd/dscanner +LDC_BIN = bin/ldc/dscanner +GDC_BIN = bin/gdc/dscanner -githash: - mkdir -p bin && ${GIT} describe --tags > bin/githash.txt +GITHASH = bin/githash.txt -debug: githash +OBJ_BY_DMD = $(addprefix $(OBJ_DIR)/dmd/, $(OBJ)) +UT_OBJ_BY_DMD = $(addprefix $(UT_OBJ_DIR)/dmd/, $(PROJECT_OBJ)) + +OBJ_BY_LDC = $(addprefix $(OBJ_DIR)/ldc/, $(OBJ)) +UT_OBJ_BY_LDC = $(addprefix $(UT_OBJ_DIR)/ldc/, $(PROJECT_OBJ)) + +OBJ_BY_GDC = $(addprefix $(OBJ_DIR)/gdc/, $(OBJ)) +UT_OBJ_BY_GDC = $(addprefix $(UT_OBJ_DIR)/gdc/, $(PROJECT_OBJ)) + +$(OBJ_DIR)/dmd/%.o: %.d + @test -d $(dir $@) || mkdir -p $(dir $@) + ${DC} ${DMD_FLAGS} ${VERSIONS} ${INCLUDE_PATHS} -c $< -of=$@ + +$(UT_OBJ_DIR)/dmd/%.o: %.d + @test -d $(dir $@) || mkdir -p $(dir $@) + ${DC} ${DMD_TEST_FLAGS} ${VERSIONS} -unittest ${INCLUDE_PATHS} -c $< -of=$@ + +$(OBJ_DIR)/ldc/%.o: %.d + @test -d $(dir $@) || mkdir -p $(dir $@) + ${DC} ${LDC_FLAGS} ${VERSIONS} ${INCLUDE_PATHS} -c $< -of=$@ + +$(UT_OBJ_DIR)/ldc/%.o: %.d + @test -d $(dir $@) || mkdir -p $(dir $@) + ${DC} ${LDC_TEST_FLAGS} ${VERSIONS} -unittest ${INCLUDE_PATHS} -c $< -of=$@ + +$(OBJ_DIR)/gdc/%.o: %.d + @test -d $(dir $@) || mkdir -p $(dir $@) + ${DC} ${GDC_FLAGS} ${VERSIONS} ${INCLUDE_PATHS} -c $< -o $@ + +$(UT_OBJ_DIR)/gdc/%.o: %.d + @test -d $(dir $@) || mkdir -p $(dir $@) + ${DC} ${GDC_TEST_FLAGS} ${VERSIONS} -unittest ${INCLUDE_PATHS} -c $< -o $@ + +all: ${DMD_BIN} +ldc: ${LDC_BIN} +gdc: ${GDC_BIN} + +${GITHASH}: + mkdir -p bin && ${GIT} describe --tags --always > ${GITHASH} + +debug: ${GITHASH} ${DC} -w -g -Jbin -ofdsc ${VERSIONS} ${DEBUG_VERSIONS} ${INCLUDE_PATHS} ${SRC} -dmdbuild: githash - ${DC} ${DMD_FLAGS} -ofbin/dscanner ${VERSIONS} ${INCLUDE_PATHS} ${SRC} - rm -f bin/dscanner.o +${DMD_BIN}: ${GITHASH} ${OBJ_BY_DMD} + ${DC} -of${DMD_BIN} ${OBJ_BY_DMD} -gdcbuild: githash - ${GDC} ${GDC_FLAGS} -obin/dscanner ${VERSIONS} ${INCLUDE_PATHS} ${SRC} -Jbin +${GDC_BIN}: ${GITHASH} ${OBJ_BY_GDC} + ${GDC} -o${GDC_BIN} ${OBJ_BY_GDC} -ldcbuild: githash - ${LDC} ${LDC_FLAGS} -of=bin/dscanner ${VERSIONS} ${INCLUDE_PATHS} ${SRC} -Jbin +${LDC_BIN}: ${GITHASH} ${OBJ_BY_LDC} + ${LDC} -of=${DMD_BIN} ${OBJ_BY_LDC} # compile the dependencies separately, s.t. their unittests don't get executed -bin/dscanner-unittest-lib.a: ${LIB_SRC} - ${DC} ${DMD_TEST_FLAGS} -c ${INCLUDE_PATHS} ${LIB_SRC} -of$@ +bin/dmd/dscanner-unittest-lib.a: ${LIB_SRC} + ${DC} ${DMD_TEST_FLAGS} -c ${VERSIONS} ${INCLUDE_PATHS} ${LIB_SRC} -of$@ -test: bin/dscanner-unittest-lib.a githash - ${DC} ${DMD_TEST_FLAGS} -unittest ${INCLUDE_PATHS} bin/dscanner-unittest-lib.a ${PROJECT_SRC} -ofbin/dscanner-unittest - ./bin/dscanner-unittest - rm -f bin/dscanner-unittest +test: bin/dmd/dscanner-unittest-lib.a ${GITHASH} ${UT_OBJ_BY_DMD} + ${DC} bin/dmd/dscanner-unittest-lib.a ${UT_OBJ_BY_DMD} -ofbin/dmd/dscanner-unittest + ./bin/dmd/dscanner-unittest -lint: dmdbuild - ./bin/dscanner --config .dscanner.ini --styleCheck src +lint: ${DMD_BIN} + ./${DMD_BIN} --config .dscanner.ini --styleCheck src clean: rm -rf dsc From 29a575d4aaf5bfe25966dc993a7b22911555584a Mon Sep 17 00:00:00 2001 From: Eduard Staniloiu Date: Wed, 9 Feb 2022 14:34:47 +0200 Subject: [PATCH 2/6] Use order-only deps in makefile --- makefile | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/makefile b/makefile index 2e466e4..7a2a68a 100644 --- a/makefile +++ b/makefile @@ -51,36 +51,37 @@ GDC_BIN = bin/gdc/dscanner GITHASH = bin/githash.txt OBJ_BY_DMD = $(addprefix $(OBJ_DIR)/dmd/, $(OBJ)) +# `sort` also removes duplicates, which is what we want +OBJ_BY_DMD_DIR = $(sort $(dir $(OBJ_BY_DMD))) UT_OBJ_BY_DMD = $(addprefix $(UT_OBJ_DIR)/dmd/, $(PROJECT_OBJ)) +UT_OBJ_BY_DMD_DIR = $(sort $(dir $(UT_OBJ_BY_DMD))) OBJ_BY_LDC = $(addprefix $(OBJ_DIR)/ldc/, $(OBJ)) +OBJ_BY_LDC_DIR = $(sort $(dir $(OBJ_BY_LDC))) UT_OBJ_BY_LDC = $(addprefix $(UT_OBJ_DIR)/ldc/, $(PROJECT_OBJ)) +UT_OBJ_BY_LDC_DIR = $(sort $(dir $(UT_OBJ_BY_LDC))) OBJ_BY_GDC = $(addprefix $(OBJ_DIR)/gdc/, $(OBJ)) +OBJ_BY_GDC_DIR = $(sort $(dir $(OBJ_BY_GDC))) UT_OBJ_BY_GDC = $(addprefix $(UT_OBJ_DIR)/gdc/, $(PROJECT_OBJ)) +UT_OBJ_BY_GDC_DIR = $(sort $(dir $(UT_OBJ_BY_GDC))) $(OBJ_DIR)/dmd/%.o: %.d - @test -d $(dir $@) || mkdir -p $(dir $@) ${DC} ${DMD_FLAGS} ${VERSIONS} ${INCLUDE_PATHS} -c $< -of=$@ $(UT_OBJ_DIR)/dmd/%.o: %.d - @test -d $(dir $@) || mkdir -p $(dir $@) ${DC} ${DMD_TEST_FLAGS} ${VERSIONS} -unittest ${INCLUDE_PATHS} -c $< -of=$@ $(OBJ_DIR)/ldc/%.o: %.d - @test -d $(dir $@) || mkdir -p $(dir $@) ${DC} ${LDC_FLAGS} ${VERSIONS} ${INCLUDE_PATHS} -c $< -of=$@ $(UT_OBJ_DIR)/ldc/%.o: %.d - @test -d $(dir $@) || mkdir -p $(dir $@) ${DC} ${LDC_TEST_FLAGS} ${VERSIONS} -unittest ${INCLUDE_PATHS} -c $< -of=$@ $(OBJ_DIR)/gdc/%.o: %.d - @test -d $(dir $@) || mkdir -p $(dir $@) ${DC} ${GDC_FLAGS} ${VERSIONS} ${INCLUDE_PATHS} -c $< -o $@ $(UT_OBJ_DIR)/gdc/%.o: %.d - @test -d $(dir $@) || mkdir -p $(dir $@) ${DC} ${GDC_TEST_FLAGS} ${VERSIONS} -unittest ${INCLUDE_PATHS} -c $< -o $@ all: ${DMD_BIN} @@ -96,11 +97,26 @@ debug: ${GITHASH} ${DMD_BIN}: ${GITHASH} ${OBJ_BY_DMD} ${DC} -of${DMD_BIN} ${OBJ_BY_DMD} +${OBJ_BY_DMD}: | ${OBJ_BY_DMD_DIR} + +${OBJ_BY_DMD_DIR}: + mkdir -p ${OBJ_BY_DMD_DIR} + ${GDC_BIN}: ${GITHASH} ${OBJ_BY_GDC} ${GDC} -o${GDC_BIN} ${OBJ_BY_GDC} +${OBJ_BY_GDC}: | ${OBJ_BY_GDC_DIR} + +${OBJ_BY_GDC_DIR}: + mkdir -p ${OBJ_BY_GDC_DIR} + ${LDC_BIN}: ${GITHASH} ${OBJ_BY_LDC} - ${LDC} -of=${DMD_BIN} ${OBJ_BY_LDC} + ${LDC} -of=${LDC_BIN} ${OBJ_BY_LDC} + +${OBJ_BY_LDC}: | ${OBJ_BY_LDC_DIR} + +${OBJ_BY_LDC_DIR}: + mkdir -p ${OBJ_BY_LDC_DIR} # compile the dependencies separately, s.t. their unittests don't get executed bin/dmd/dscanner-unittest-lib.a: ${LIB_SRC} @@ -110,6 +126,11 @@ test: bin/dmd/dscanner-unittest-lib.a ${GITHASH} ${UT_OBJ_BY_DMD} ${DC} bin/dmd/dscanner-unittest-lib.a ${UT_OBJ_BY_DMD} -ofbin/dmd/dscanner-unittest ./bin/dmd/dscanner-unittest +${UT_OBJ_BY_DMD}: | ${UT_OBJ_BY_DMD_DIR} + +${UT_OBJ_BY_DMD_DIR}: + mkdir -p ${UT_OBJ_BY_DMD_DIR} + lint: ${DMD_BIN} ./${DMD_BIN} --config .dscanner.ini --styleCheck src From 13e4dc2ae8d7f6be96b9620eeab60510f94216a9 Mon Sep 17 00:00:00 2001 From: Eduard Staniloiu Date: Wed, 9 Feb 2022 16:29:55 +0200 Subject: [PATCH 3/6] Refactor makefile --- makefile | 148 ++++++++++++++++++++++++++----------------------------- 1 file changed, 70 insertions(+), 78 deletions(-) diff --git a/makefile b/makefile index 7a2a68a..d294e08 100644 --- a/makefile +++ b/makefile @@ -24,6 +24,17 @@ OBJ = $(SRC:.d=.o) PROJECT_OBJ = $(PROJECT_SRC:.d=.o) LIB_OBJ = $(LIB_SRC:.d=.o) +OBJ_BY_DC = $(addprefix $(OBJ_DIR)/$(DC)/, $(OBJ)) +# `sort` also removes duplicates, which is what we want +OBJ_BY_DC_DIR = $(sort $(dir $(OBJ_BY_DC))) +UT_OBJ_BY_DC = $(addprefix $(UT_OBJ_DIR)/$(DC)/, $(PROJECT_OBJ)) +UT_OBJ_BY_DC_DIR = $(sort $(dir $(UT_OBJ_BY_DC))) + +DSCANNER_BIN = bin/dscanner +DSCANNER_BIN_DIR = $(dir $(DSCANNER_BIN)) +UT_DSCANNER_BIN = bin/dscanner-unittest +UT_DSCANNER_LIB = bin/dscanner-unittest-lib.a + INCLUDE_PATHS = \ -Isrc \ -Iinifiled/source \ @@ -33,60 +44,67 @@ INCLUDE_PATHS = \ -Ilibddoc/src \ -Ilibddoc/common/source \ -Istdx-allocator/source -VERSIONS = -DEBUG_VERSIONS = -version=dparse_verbose -DMD_FLAGS = -w -release -O -Jbin -od${OBJ_DIR} -version=StdLoggerDisableWarning -override DMD_FLAGS += $(DFLAGS) -override LDC_FLAGS += $(DFLAGS) -override GDC_FLAGS += $(DFLAGS) -DMD_TEST_FLAGS = -w -g -Jbin -version=StdLoggerDisableWarning -override LDC_FLAGS += -O5 -release -oq -d-version=StdLoggerDisableWarning -Jbin -override GDC_FLAGS += -O3 -frelease -d-version=StdLoggerDisableWarning -Jbin -SHELL:=/usr/bin/env bash -DMD_BIN = bin/dmd/dscanner -LDC_BIN = bin/ldc/dscanner -GDC_BIN = bin/gdc/dscanner +DMD_VERSIONS = -version=StdLoggerDisableWarning +DMD_DEBUG_VERSIONS = -version=dparse_verbose +LDC_VERSIONS = -d-version=StdLoggerDisableWarning +LDC_DEBUG_VERSIONS = -d-version=dparse_verbose +GDC_VERSIONS = -fversion=StdLoggerDisableWarning +GDC_DEBUG_VERSIONS = -fversion=dparse_verbose + +DC_FLAGS += -Jbin +override DMD_FLAGS += $(DFLAGS) -w -release -O -od${OBJ_DIR} +override LDC_FLAGS += $(DFLAGS) -O5 -release -oq +override GDC_FLAGS += $(DFLAGS) -O3 -frelease + +DC_TEST_FLAGS += -g -Jbin +override DMD_TEST_FLAGS += -w + +ifeq ($(DC), $(filter $(DC), dmd ldmd2 gdmd)) + VERSIONS := $(DMD_VERSIONS) + DEBUG_VERSIONS := $(DMD_DEBUG_VERSIONS) + DC_FLAGS += $(DMD_FLAGS) + DC_TEST_FLAGS += $(DMD_TEST_FLAGS) + WRITE_TO_TARGET_NAME = -of=$@ +else ifeq ($(DC), ldc2) + VERSIONS := $(LDC_VERSIONS) + DEBUG_VERSIONS := $(LDC_DEBUG_VERSIONS) + DC_FLAGS += $(LDC_FLAGS) + DC_TEST_FLAGS += $(LDC_TEST_FLAGS) + WRITE_TO_TARGET_NAME = -of=$@ +else ifeq ($(DC), gdc) + VERSIONS := $(GDC_VERSIONS) + DEBUG_VERSIONS := $(GDC_DEBUG_VERSIONS) + DC_FLAGS += $(GDC_FLAGS) + DC_TEST_FLAGS += $(GDC_TEST_FLAGS) + WRITE_TO_TARGET_NAME = -o $@ +endif + +SHELL:=/usr/bin/env bash GITHASH = bin/githash.txt -OBJ_BY_DMD = $(addprefix $(OBJ_DIR)/dmd/, $(OBJ)) -# `sort` also removes duplicates, which is what we want -OBJ_BY_DMD_DIR = $(sort $(dir $(OBJ_BY_DMD))) -UT_OBJ_BY_DMD = $(addprefix $(UT_OBJ_DIR)/dmd/, $(PROJECT_OBJ)) -UT_OBJ_BY_DMD_DIR = $(sort $(dir $(UT_OBJ_BY_DMD))) -OBJ_BY_LDC = $(addprefix $(OBJ_DIR)/ldc/, $(OBJ)) -OBJ_BY_LDC_DIR = $(sort $(dir $(OBJ_BY_LDC))) -UT_OBJ_BY_LDC = $(addprefix $(UT_OBJ_DIR)/ldc/, $(PROJECT_OBJ)) -UT_OBJ_BY_LDC_DIR = $(sort $(dir $(UT_OBJ_BY_LDC))) +$(OBJ_DIR)/$(DC)/%.o: %.d + ${DC} ${DC_FLAGS} ${VERSIONS} ${INCLUDE_PATHS} -c $< ${WRITE_TO_TARGET_NAME} -OBJ_BY_GDC = $(addprefix $(OBJ_DIR)/gdc/, $(OBJ)) -OBJ_BY_GDC_DIR = $(sort $(dir $(OBJ_BY_GDC))) -UT_OBJ_BY_GDC = $(addprefix $(UT_OBJ_DIR)/gdc/, $(PROJECT_OBJ)) -UT_OBJ_BY_GDC_DIR = $(sort $(dir $(UT_OBJ_BY_GDC))) +$(UT_OBJ_DIR)/$(DC)/%.o: %.d + ${DC} ${DC_TEST_FLAGS} ${VERSIONS} -unittest ${INCLUDE_PATHS} -c $< ${WRITE_TO_TARGET_NAME} -$(OBJ_DIR)/dmd/%.o: %.d - ${DC} ${DMD_FLAGS} ${VERSIONS} ${INCLUDE_PATHS} -c $< -of=$@ +${DSCANNER_BIN}: ${GITHASH} ${OBJ_BY_DC} | ${DSCANNER_BIN_DIR} + ${DC} ${OBJ_BY_DC} ${WRITE_TO_TARGET_NAME} -$(UT_OBJ_DIR)/dmd/%.o: %.d - ${DC} ${DMD_TEST_FLAGS} ${VERSIONS} -unittest ${INCLUDE_PATHS} -c $< -of=$@ +${OBJ_BY_DC}: | ${OBJ_BY_DC_DIR} -$(OBJ_DIR)/ldc/%.o: %.d - ${DC} ${LDC_FLAGS} ${VERSIONS} ${INCLUDE_PATHS} -c $< -of=$@ +${OBJ_BY_DC_DIR}: + mkdir -p ${OBJ_BY_DC_DIR} -$(UT_OBJ_DIR)/ldc/%.o: %.d - ${DC} ${LDC_TEST_FLAGS} ${VERSIONS} -unittest ${INCLUDE_PATHS} -c $< -of=$@ +${DSCANNER_BIN_DIR}: + mkdir -p $@ -$(OBJ_DIR)/gdc/%.o: %.d - ${DC} ${GDC_FLAGS} ${VERSIONS} ${INCLUDE_PATHS} -c $< -o $@ - -$(UT_OBJ_DIR)/gdc/%.o: %.d - ${DC} ${GDC_TEST_FLAGS} ${VERSIONS} -unittest ${INCLUDE_PATHS} -c $< -o $@ - -all: ${DMD_BIN} -ldc: ${LDC_BIN} -gdc: ${GDC_BIN} +all: ${DSCANNER_BIN} +ldc: ${DSCANNER_BIN} +gdc: ${DSCANNER_BIN} ${GITHASH}: mkdir -p bin && ${GIT} describe --tags --always > ${GITHASH} @@ -94,50 +112,24 @@ ${GITHASH}: debug: ${GITHASH} ${DC} -w -g -Jbin -ofdsc ${VERSIONS} ${DEBUG_VERSIONS} ${INCLUDE_PATHS} ${SRC} -${DMD_BIN}: ${GITHASH} ${OBJ_BY_DMD} - ${DC} -of${DMD_BIN} ${OBJ_BY_DMD} - -${OBJ_BY_DMD}: | ${OBJ_BY_DMD_DIR} - -${OBJ_BY_DMD_DIR}: - mkdir -p ${OBJ_BY_DMD_DIR} - -${GDC_BIN}: ${GITHASH} ${OBJ_BY_GDC} - ${GDC} -o${GDC_BIN} ${OBJ_BY_GDC} - -${OBJ_BY_GDC}: | ${OBJ_BY_GDC_DIR} - -${OBJ_BY_GDC_DIR}: - mkdir -p ${OBJ_BY_GDC_DIR} - -${LDC_BIN}: ${GITHASH} ${OBJ_BY_LDC} - ${LDC} -of=${LDC_BIN} ${OBJ_BY_LDC} - -${OBJ_BY_LDC}: | ${OBJ_BY_LDC_DIR} - -${OBJ_BY_LDC_DIR}: - mkdir -p ${OBJ_BY_LDC_DIR} - # compile the dependencies separately, s.t. their unittests don't get executed -bin/dmd/dscanner-unittest-lib.a: ${LIB_SRC} - ${DC} ${DMD_TEST_FLAGS} -c ${VERSIONS} ${INCLUDE_PATHS} ${LIB_SRC} -of$@ +${UT_DSCANNER_LIB}: ${LIB_SRC} | ${DSCANNER_BIN_DIR} + ${DC} ${DC_TEST_FLAGS} -c ${VERSIONS} ${INCLUDE_PATHS} ${LIB_SRC} ${WRITE_TO_TARGET_NAME} -test: bin/dmd/dscanner-unittest-lib.a ${GITHASH} ${UT_OBJ_BY_DMD} - ${DC} bin/dmd/dscanner-unittest-lib.a ${UT_OBJ_BY_DMD} -ofbin/dmd/dscanner-unittest - ./bin/dmd/dscanner-unittest +test: ${UT_DSCANNER_BIN} -${UT_OBJ_BY_DMD}: | ${UT_OBJ_BY_DMD_DIR} +${UT_DSCANNER_BIN}: ${UT_DSCANNER_LIB} ${GITHASH} ${UT_OBJ_BY_DC} | ${DSCANNER_BIN_DIR} + ${DC} ${UT_DSCANNER_LIB} ${UT_OBJ_BY_DC} ${WRITE_TO_TARGET_NAME} + ./${UT_DSCANNER_BIN} -${UT_OBJ_BY_DMD_DIR}: - mkdir -p ${UT_OBJ_BY_DMD_DIR} - -lint: ${DMD_BIN} - ./${DMD_BIN} --config .dscanner.ini --styleCheck src +lint: ${DSCANNER_BIN} + ./${DSCANNER_BIN} --config .dscanner.ini --styleCheck src clean: rm -rf dsc rm -rf bin rm -rf ${OBJ_DIR} + rm -rf ${UT_OBJ_DIR} rm -f dscanner-report.json report: all From b9c5654712fb52a76d080101b212052f3c14b2d3 Mon Sep 17 00:00:00 2001 From: Eduard Staniloiu Date: Wed, 9 Feb 2022 17:50:14 +0200 Subject: [PATCH 4/6] Fix gdmd missing files bug --- makefile | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/makefile b/makefile index d294e08..cfed382 100644 --- a/makefile +++ b/makefile @@ -33,7 +33,8 @@ UT_OBJ_BY_DC_DIR = $(sort $(dir $(UT_OBJ_BY_DC))) DSCANNER_BIN = bin/dscanner DSCANNER_BIN_DIR = $(dir $(DSCANNER_BIN)) UT_DSCANNER_BIN = bin/dscanner-unittest -UT_DSCANNER_LIB = bin/dscanner-unittest-lib.a +UT_DSCANNER_LIB = bin/$(DC)/dscanner-unittest-lib.a +UT_DSCANNER_LIB_DIR = $(dir $(UT_DSCANNER_LIB)) INCLUDE_PATHS = \ -Isrc \ @@ -60,23 +61,25 @@ override GDC_FLAGS += $(DFLAGS) -O3 -frelease DC_TEST_FLAGS += -g -Jbin override DMD_TEST_FLAGS += -w +DC_DEBUG_FLAGS := -g -Jbin + ifeq ($(DC), $(filter $(DC), dmd ldmd2 gdmd)) VERSIONS := $(DMD_VERSIONS) DEBUG_VERSIONS := $(DMD_DEBUG_VERSIONS) DC_FLAGS += $(DMD_FLAGS) - DC_TEST_FLAGS += $(DMD_TEST_FLAGS) + DC_TEST_FLAGS += $(DMD_TEST_FLAGS) -unittest WRITE_TO_TARGET_NAME = -of=$@ -else ifeq ($(DC), ldc2) +else ifneq (,$(findstring ldc2, $(DC))) VERSIONS := $(LDC_VERSIONS) DEBUG_VERSIONS := $(LDC_DEBUG_VERSIONS) DC_FLAGS += $(LDC_FLAGS) - DC_TEST_FLAGS += $(LDC_TEST_FLAGS) + DC_TEST_FLAGS += $(LDC_TEST_FLAGS) -unittest WRITE_TO_TARGET_NAME = -of=$@ -else ifeq ($(DC), gdc) +else ifneq (,$(findstring gdc, $(DC))) VERSIONS := $(GDC_VERSIONS) DEBUG_VERSIONS := $(GDC_DEBUG_VERSIONS) DC_FLAGS += $(GDC_FLAGS) - DC_TEST_FLAGS += $(GDC_TEST_FLAGS) + DC_TEST_FLAGS += $(GDC_TEST_FLAGS) -funittest WRITE_TO_TARGET_NAME = -o $@ endif @@ -89,7 +92,7 @@ $(OBJ_DIR)/$(DC)/%.o: %.d ${DC} ${DC_FLAGS} ${VERSIONS} ${INCLUDE_PATHS} -c $< ${WRITE_TO_TARGET_NAME} $(UT_OBJ_DIR)/$(DC)/%.o: %.d - ${DC} ${DC_TEST_FLAGS} ${VERSIONS} -unittest ${INCLUDE_PATHS} -c $< ${WRITE_TO_TARGET_NAME} + ${DC} ${DC_TEST_FLAGS} ${VERSIONS} ${INCLUDE_PATHS} -c $< ${WRITE_TO_TARGET_NAME} ${DSCANNER_BIN}: ${GITHASH} ${OBJ_BY_DC} | ${DSCANNER_BIN_DIR} ${DC} ${OBJ_BY_DC} ${WRITE_TO_TARGET_NAME} @@ -97,11 +100,19 @@ ${DSCANNER_BIN}: ${GITHASH} ${OBJ_BY_DC} | ${DSCANNER_BIN_DIR} ${OBJ_BY_DC}: | ${OBJ_BY_DC_DIR} ${OBJ_BY_DC_DIR}: - mkdir -p ${OBJ_BY_DC_DIR} + mkdir -p $@ + +${UT_OBJ_BY_DC}: | ${UT_OBJ_BY_DC_DIR} + +${UT_OBJ_BY_DC_DIR}: + mkdir -p $@ ${DSCANNER_BIN_DIR}: mkdir -p $@ +${UT_DSCANNER_LIB_DIR}: + mkdir -p $@ + all: ${DSCANNER_BIN} ldc: ${DSCANNER_BIN} gdc: ${DSCANNER_BIN} @@ -113,8 +124,8 @@ debug: ${GITHASH} ${DC} -w -g -Jbin -ofdsc ${VERSIONS} ${DEBUG_VERSIONS} ${INCLUDE_PATHS} ${SRC} # compile the dependencies separately, s.t. their unittests don't get executed -${UT_DSCANNER_LIB}: ${LIB_SRC} | ${DSCANNER_BIN_DIR} - ${DC} ${DC_TEST_FLAGS} -c ${VERSIONS} ${INCLUDE_PATHS} ${LIB_SRC} ${WRITE_TO_TARGET_NAME} +${UT_DSCANNER_LIB}: ${LIB_SRC} | ${UT_DSCANNER_LIB_DIR} + ${DC} ${DC_DEBUG_FLAGS} -c ${VERSIONS} ${INCLUDE_PATHS} ${LIB_SRC} ${WRITE_TO_TARGET_NAME} test: ${UT_DSCANNER_BIN} From 223580438a37a8b3880d67fb22bce5bf51afc382 Mon Sep 17 00:00:00 2001 From: Eduard Staniloiu Date: Wed, 9 Feb 2022 18:29:54 +0200 Subject: [PATCH 5/6] gdmd does not respect dmd -of format --- makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makefile b/makefile index cfed382..bb62f9a 100644 --- a/makefile +++ b/makefile @@ -68,7 +68,7 @@ ifeq ($(DC), $(filter $(DC), dmd ldmd2 gdmd)) DEBUG_VERSIONS := $(DMD_DEBUG_VERSIONS) DC_FLAGS += $(DMD_FLAGS) DC_TEST_FLAGS += $(DMD_TEST_FLAGS) -unittest - WRITE_TO_TARGET_NAME = -of=$@ + WRITE_TO_TARGET_NAME = -of$@ else ifneq (,$(findstring ldc2, $(DC))) VERSIONS := $(LDC_VERSIONS) DEBUG_VERSIONS := $(LDC_DEBUG_VERSIONS) From 91ab2af24775b8813cacddc2fc32870302867369 Mon Sep 17 00:00:00 2001 From: Eduard Staniloiu Date: Fri, 18 Feb 2022 22:55:10 +0200 Subject: [PATCH 6/6] Address feedback --- makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/makefile b/makefile index bb62f9a..f037388 100644 --- a/makefile +++ b/makefile @@ -18,8 +18,8 @@ LIB_SRC := \ PROJECT_SRC := $(shell find src/ -name "*.d") SRC := $(LIB_SRC) $(PROJECT_SRC) -UT_OBJ_DIR = unittest-obj OBJ_DIR := obj +UT_OBJ_DIR = $(OBJ_DIR)/unittest OBJ = $(SRC:.d=.o) PROJECT_OBJ = $(PROJECT_SRC:.d=.o) LIB_OBJ = $(LIB_SRC:.d=.o) @@ -117,6 +117,8 @@ all: ${DSCANNER_BIN} ldc: ${DSCANNER_BIN} gdc: ${DSCANNER_BIN} +githash: ${GITHASH} + ${GITHASH}: mkdir -p bin && ${GIT} describe --tags --always > ${GITHASH} @@ -140,7 +142,6 @@ clean: rm -rf dsc rm -rf bin rm -rf ${OBJ_DIR} - rm -rf ${UT_OBJ_DIR} rm -f dscanner-report.json report: all