changeset 597:00ad3f0e208b

Improve build system, clean up the functions and improve V=1 verbosity.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 14 Jan 2020 02:05:03 +0200
parents 4ea7b0e9dcba
children a6196e19465b
files Makefile.inc
diffstat 1 files changed, 52 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile.inc	Mon Jan 13 17:13:13 2020 +0200
+++ b/Makefile.inc	Tue Jan 14 02:05:03 2020 +0200
@@ -1,3 +1,6 @@
+###
+### Paths and directories
+###
 ifneq ($(BINTOOL_PREFIX),)
 CC = $(BINTOOL_PREFIX)gcc
 CXX = $(BINTOOL_PREFIX)g++
@@ -15,6 +18,9 @@
 MKDIR_P ?= $(MKDIR) -p
 
 
+###
+### Targets
+###
 THLIBS_A = $(OBJPATH)thlibs.a
 THLIBS_DEP += $(THLIBS)th_types.h $(THLIBS)th_util.h
 
@@ -23,17 +29,42 @@
 NOINST_TARGETS += $(THLIBS_A)
 
 
+###
+### Functions and compilation/link commands
+###
 ifneq ($(V),1)
-COMPILE_OBJ = @if test ! -d $(OBJPATH); then mkdir -p $(OBJPATH); fi && echo " CC $<" && $(CC) $(CFLAGS) -c -o $@ $<
-LINK_BIN = @if test ! -d $(BINPATH); then mkdir -p $(BINPATH); fi && echo " LINK $@" && $(CC) -o $@ $(filter %.o %.a,$+) $(LDFLAGS)
+DO_CMD=/bin/echo -E " $(1) $(2)" && $(3)
 else
-COMPILE_OBJ = @if test ! -d $(OBJPATH); then mkdir -p $(OBJPATH); fi && echo "$(CC) $(CFLAGS) -c -o $@ $<" && $(CC) $(CFLAGS) -c -o $@ $<
-LINK_BIN = @if test ! -d $(BINPATH); then mkdir -p $(BINPATH); fi && echo "$(CC) -o $@ $(filter %.o %.a,$+) $(LDFLAGS)" && $(CC) -o $@ $(filter %.o %.a,$+) $(LDFLAGS)
+DO_CMD=/bin/echo -E $(3) && $(3)
 endif
+DO_MKDIR=if test ! -d "$(1)"; then mkdir -p "$(1)"; fi
+
+
+COMPILE_C_OBJ = \
+	@$(call DO_MKDIR,$(OBJPATH)) ; \
+	$(call DO_CMD,CC,$<,$(CC) $(CFLAGS) $(DM_CFLAGS) -c -o $@ $< $(1))
+
+LINK_C_BIN = \
+	@$(call DO_MKDIR,$(BINPATH)) ; \
+	$(call DO_CMD,LINK,$@,$(CC) -o $@ $(filter %.o %.a,$+) $(LDFLAGS) $(1))
 
-##
-## Target rules
-##
+COMPILE_CXX_OBJ = \
+	$(call DO_MKDIR,$(OBJPATH)) ; \
+	$(call DO_CMD,CXX,$<,$(CXX) $(CXXFLAGS) $(DM_CFLAGS) -c -o $@ $< $(1))
+
+LINK_CXX_BIN = \
+	@$(call DO_MKDIR,$(BINPATH)) ; \
+	$(call DO_CMD,LINK,$@,$(CXX) -o $@ $(filter %.o %.a,$+) $(LDFLAGS) $(1))
+
+LINK_STATIC_LIB = \
+	@$(call DO_MKDIR,$(OBJPATH)) ; \
+	$(call DO_CMD,AR,$@ $(filter %.o,$+),$(AR) cru $@ $(filter %.o,$+)) ; \
+	$(call DO_CMD,RANLIB,$@,$(RANLIB) $@)
+
+
+###
+### Target rules
+###
 all: $(NOBUILD_TARGETS) $(NOINST_TARGETS) $(TARGETS)
 
 
@@ -42,40 +73,37 @@
 
 
 $(OBJPATH)%.o: $(THLIBS)%.c $(THLIBS_DEP)
-	$(COMPILE_OBJ)
+	$(COMPILE_C_OBJ)
 
 $(OBJPATH)%.o: $(THLIBS)%.c $(THLIBS)%.h $(THLIBS_DEP)
-	$(COMPILE_OBJ) -I$(THLIBS)
+	$(COMPILE_C_OBJ) -I$(THLIBS)
 
 $(OBJPATH)%.o: %.c %.h $(THLIBS_DEP)
-	$(COMPILE_OBJ) -I$(THLIBS)
+	$(COMPILE_C_OBJ) -I$(THLIBS)
 
 $(OBJPATH)%.o: %.c $(THLIBS_DEP)
-	$(COMPILE_OBJ) -I$(THLIBS)
-
+	$(COMPILE_C_OBJ) -I$(THLIBS)
 
 $(THLIBS_A): $(addprefix $(OBJPATH),$(THLIBS_OBJ))
-	@echo " AR $@ $(THLIBS_OBJ)"
-	@$(AR) cru $@ $(addprefix $(OBJPATH),$(THLIBS_OBJ))
-	@echo " RANLIB $@"
-	@$(RANLIB) $@
+	$(LINK_STATIC_LIB)
+
 
-##
-## Generate endian check and config.h
-##
+###
+### Generate endian check and config.h
+###
 $(OBJPATH)endianchk.o: $(THLIBS)endianchk.c
-	$(COMPILE_OBJ)
+	$(COMPILE_C_OBJ)
 
 $(ENDIANCHK_BIN): $(OBJPATH)endianchk.o
-	$(LINK_BIN)
+	$(LINK_C_BIN)
 
 config.h: $(ENDIANCHK_BIN)
 	$(ENDIANCHK_BIN) > $@
 
 
-##
-## Special targets
-##
+###
+### Special targets
+###
 clean:
 	$(RM) $(TARGETS) $(NOINST_TARGETS) $(OBJPATH)*.o