From 9ea5194634cda2167ca741ca61fdb3bf4174c0bb Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Mon, 9 Nov 2015 16:40:44 -0700 Subject: [PATCH] build: simplify dependency generation Modern GCC and Clang versions can generate .d files without needing the complex sequence of sed scripts that we currently use. Also adjust the .o rule so the .d file is regenerated if it gets deleted. Also make the .o depend on all of the Makefile fragments in $(MAKEFILE_LIST) so that it is rebuilt if the Makefile is changed. Change-Id: I44e186c0f34dabfa0cf35db1ffa66b84d9dae87d Signed-off-by: Daniel Verkamp --- mk/nvme.unittest.mk | 11 +++-------- mk/spdk.common.mk | 15 +++++++-------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/mk/nvme.unittest.mk b/mk/nvme.unittest.mk index addfaa5c1..c7b523d6b 100644 --- a/mk/nvme.unittest.mk +++ b/mk/nvme.unittest.mk @@ -55,14 +55,9 @@ $(UT_APP) : $(OBJS) clean: $(Q)rm -f $(UT_APP) $(OBJS) *.d -%.o: $(NVME_DIR)/%.c +%.o: $(NVME_DIR)/%.c %.d $(MAKEFILE_LIST) @echo " CC $@" - $(Q)$(CC) $(CFLAGS) -c $< -o $@ - $(Q)$(CC) -MM $(CFLAGS) $(NVME_DIR)/$*.c > $*.d - @mv -f $*.d $*.d.tmp - @sed -e 's|.*:|$*.o:|' < $*.d.tmp > $*.d - @sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \ - sed -e 's/^ *//' -e 's/$$/:/' >> $*.d - @rm -f $*.d.tmp + $(Q)$(CC) $(DEPFLAGS) $(CFLAGS) -c $< -o $@ + $(Q)mv -f $*.d.tmp $*.d include $(SPDK_ROOT_DIR)/mk/spdk.deps.mk diff --git a/mk/spdk.common.mk b/mk/spdk.common.mk index f4fd20bbc..ac7211740 100644 --- a/mk/spdk.common.mk +++ b/mk/spdk.common.mk @@ -88,15 +88,14 @@ CFLAGS += $(COMMON_CFLAGS) -Wno-pointer-sign -std=gnu99 MAKEFLAGS += --no-print-directory -%.o : %.c +DEPFLAGS = -MMD -MP -MF $*.d.tmp + +%.o: %.c %.d $(MAKEFILE_LIST) @echo " CC $@" - $(Q)$(CC) $(CFLAGS) -c $< - $(Q)$(CC) -MM $(CFLAGS) $*.c > $*.d - @mv -f $*.d $*.d.tmp - @sed -e 's|.*:|$*.o:|' < $*.d.tmp > $*.d - @sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \ - sed -e 's/^ *//' -e 's/$$/:/' >> $*.d - @rm -f $*.d.tmp + $(Q)$(CC) $(DEPFLAGS) $(CFLAGS) -c $< + $(Q)mv -f $*.d.tmp $*.d + +%.d: ; DPDK_DIR ?= $(CONFIG_DPDK_DIR) DPDK_INC_DIR ?= $(DPDK_DIR)/include