# HG changeset patch # User Matti Hamalainen # Date 1578960303 -7200 # Node ID 00ad3f0e208b4acd066ccfde872a7d873a3f4cb9 # Parent 4ea7b0e9dcba1af9733ae5199b18d494434d314d Improve build system, clean up the functions and improve V=1 verbosity. diff -r 4ea7b0e9dcba -r 00ad3f0e208b Makefile.inc --- 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