Skip to content

Commit

Permalink
[build] Use $(xxx_DEPS) for additional dependency information
Browse files Browse the repository at this point in the history
Some objects (embedded.o, rootcert.o, and clientcert.o) define
additional dependencies on external files, using syntax such as:

    $(BIN)/clientcert.o : $(CERT_LIST)

This dependency can be missed when using debug builds.  For example,
if DEBUG=clientcert is used, then the relevant object is
$(BIN)/clientcert.dbg1.o rather than $(BIN)/clientcert.o.

Fix by adding dependencies to $(clientcert_DEPS) instead:

    clientcert_DEPS += $(CERT_LIST)

Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Apr 24, 2012
1 parent 8c42e0c commit 0e59417
Showing 1 changed file with 95 additions and 95 deletions.
190 changes: 95 additions & 95 deletions src/Makefile.housekeeping
Expand Up @@ -517,95 +517,6 @@ RULE_S_to_s = $(Q)$(PREPROCESS_S) $< > $@

DEBUG_TARGETS += dbg%.o c s

# We automatically generate rules for any file mentioned in AUTO_SRCS
# using the following set of templates. It would be cleaner to use
# $(eval ...), but this function exists only in GNU make >= 3.80.

# deps_template : generate dependency list for a given source file
#
# $(1) is the full path to the source file (e.g. "drivers/net/rtl8139.c")
# $(2) is the source type (e.g. "c")
# $(3) is the source base name (e.g. "rtl8139")
#
define deps_template
@$(ECHO) " [DEPS] $(1)"
@$(MKDIR) -p $(BIN)/deps/$(dir $(1))
@$(CPP) $(CFLAGS) $(CFLAGS_$(2)) $(CFLAGS_$(3)) -DOBJECT=$(3) \
-Wno-error -M $(1) -MG -MP | \
sed 's/\.o\s*:/_DEPS =/' > $(BIN)/deps/$(1).d
endef

# rules_template : generate rules for a given source file
#
# $(1) is the full path to the source file (e.g. "drivers/net/rtl8139.c")
# $(2) is the source type (e.g. "c")
# $(3) is the source base name (e.g. "rtl8139")
#
define rules_template
@$(ECHO) " [RULES] $(1)"
@$(MKDIR) -p $(BIN)/rules/$(dir $(1))
@$(ECHO_E) '\n$$(BIN)/$(3).o :' \
'$(1) $$(MAKEDEPS) $$(POST_O_DEPS) $$($(3)_DEPS)' \
'\n\t$$(QM)$(ECHO) " [BUILD] $$@"' \
'\n\t$$(RULE_$(2))\n' \
'\nBOBJS += $$(BIN)/$(3).o\n' \
$(foreach TGT,$(DEBUG_TARGETS), \
$(if $(RULE_$(2)_to_$(TGT)), \
'\n$$(BIN)/$(3).$(TGT) :' \
'$(1) $$(MAKEDEPS) $$(POST_O_DEPS) $$($(3)_DEPS)' \
'\n\t$$(QM)$(ECHO) " [BUILD] $$@"' \
'\n\t$$(RULE_$(2)_to_$(TGT))\n' \
'\n$(TGT)_OBJS += $$(BIN)/$(3).$(TGT)\n' ) ) \
'\n$(BIN)/deps/$(1).d : $$($(3)_DEPS)\n' \
'\nTAGS : $$($(3)_DEPS)\n' > $(BIN)/rules/$(1).r
@$(if $(findstring drivers/,$(1)),\
$(PERL) $(PARSEROM) $(1) >> $(BIN)/rules/$(1).r)
endef

# Rule to generate the dependency list file
#
$(BIN)/deps/%.d : % $(MAKEDEPS)
$(call deps_template,$<,$(subst .,,$(suffix $<)),$(basename $(notdir $<)))

# Calculate and include the list of dependency list files
#
AUTO_DEPS = $(patsubst %,$(BIN)/deps/%.d,$(AUTO_SRCS))
ifdef NEED_DEPS
ifneq ($(AUTO_DEPS),)
-include $(AUTO_DEPS)
endif
endif
autodeps :
@$(ECHO) $(AUTO_DEPS)
VERYCLEANUP += $(BIN)/deps

# Rule to generate the rules file
#
$(BIN)/rules/%.r : % $(MAKEDEPS) $(PARSEROM)
$(call rules_template,$<,$(subst .,,$(suffix $<)),$(basename $(notdir $<)))

# Calculate and include the list of rules files
#
AUTO_RULES = $(patsubst %,$(BIN)/rules/%.r,$(AUTO_SRCS))
ifdef NEED_DEPS
ifneq ($(AUTO_RULES),)
-include $(AUTO_RULES)
endif
endif
autorules :
@$(ECHO) $(AUTO_RULES)
VERYCLEANUP += $(BIN)/rules

# The following variables are created by the rules files
#
bobjs :
@$(ECHO) $(BOBJS)
drivers :
@$(ECHO) $(DRIVERS)
.PHONY : drivers
roms :
@$(ECHO) $(ROMS)

# List of embedded images included in the last build of embedded.o.
# This is needed in order to correctly rebuild embedded.o whenever the
# list of objects changes.
Expand All @@ -630,7 +541,7 @@ EMBED_ALL := $(foreach i,$(call seq,1,$(words $(EMBEDDED_FILES))),\
EMBED ( $(i), \"$(word $(i), $(EMBEDDED_FILES))\",\
\"$(notdir $(word $(i),$(EMBEDDED_FILES)))\" ))

$(BIN)/embedded.o : $(EMBEDDED_FILES) $(EMBEDDED_LIST)
embedded_DEPS += $(EMBEDDED_FILES) $(EMBEDDED_LIST)

CFLAGS_embedded = -DEMBED_ALL="$(EMBED_ALL)"

Expand Down Expand Up @@ -658,7 +569,7 @@ TRUSTED_FPS := $(foreach CERT,$(TRUSTED_CERTS),\
$(shell $(OPENSSL) x509 -in $(CERT) -noout -sha256 \
-fingerprint))))$(COMMA))

$(BIN)/rootcert.o : $(TRUSTED_FILES) $(TRUSTED_LIST)
rootcert_DEPS += $(TRUSTED_FILES) $(TRUSTED_LIST)

CFLAGS_rootcert = $(if $(TRUSTED_FPS),-DTRUSTED="$(TRUSTED_FPS)")

Expand Down Expand Up @@ -686,12 +597,12 @@ ifdef CERT
$(CERT_INC) : $(CERT) $(CERT_LIST)
$(Q)$(OPENSSL) x509 -in $< -outform DER -out $@

$(BIN)/clientcert.o : $(CERT_INC)
clientcert_DEPS += $(CERT_INC)
endif

CLEANUP += $(CERT_INC)

$(BIN)/clientcert.o : $(CERT_LIST)
clientcert_DEPS += $(CERT_LIST)

CFLAGS_clientcert += $(if $(CERT),-DCERTIFICATE="\"$(CERT_INC)\"")

Expand Down Expand Up @@ -719,12 +630,12 @@ ifdef KEY
$(KEY_INC) : $(KEY) $(KEY_LIST)
$(Q)$(OPENSSL) rsa -in $< -outform DER -out $@

$(BIN)/clientcert.o : $(KEY_INC)
clientcert_DEPS += $(KEY_INC)
endif

CLEANUP += $(KEY_INC)

$(BIN)/clientcert.o : $(KEY_LIST)
clientcert_DEPS += $(KEY_LIST)

CFLAGS_clientcert += $(if $(KEY),-DPRIVATE_KEY="\"$(KEY_INC)\"")

Expand All @@ -736,6 +647,95 @@ $(BIN)/embedded.o : override CC := env CCACHE_DISABLE=1 $(CC)

$(BIN)/clientcert.o : override CC := env CCACHE_DISABLE=1 $(CC)

# We automatically generate rules for any file mentioned in AUTO_SRCS
# using the following set of templates. It would be cleaner to use
# $(eval ...), but this function exists only in GNU make >= 3.80.

# deps_template : generate dependency list for a given source file
#
# $(1) is the full path to the source file (e.g. "drivers/net/rtl8139.c")
# $(2) is the source type (e.g. "c")
# $(3) is the source base name (e.g. "rtl8139")
#
define deps_template
@$(ECHO) " [DEPS] $(1)"
@$(MKDIR) -p $(BIN)/deps/$(dir $(1))
@$(CPP) $(CFLAGS) $(CFLAGS_$(2)) $(CFLAGS_$(3)) -DOBJECT=$(3) \
-Wno-error -M $(1) -MG -MP | \
sed 's/\.o\s*:/_DEPS +=/' > $(BIN)/deps/$(1).d
endef

# rules_template : generate rules for a given source file
#
# $(1) is the full path to the source file (e.g. "drivers/net/rtl8139.c")
# $(2) is the source type (e.g. "c")
# $(3) is the source base name (e.g. "rtl8139")
#
define rules_template
@$(ECHO) " [RULES] $(1)"
@$(MKDIR) -p $(BIN)/rules/$(dir $(1))
@$(ECHO_E) '\n$$(BIN)/$(3).o :' \
'$(1) $$(MAKEDEPS) $$(POST_O_DEPS) $$($(3)_DEPS)' \
'\n\t$$(QM)$(ECHO) " [BUILD] $$@"' \
'\n\t$$(RULE_$(2))\n' \
'\nBOBJS += $$(BIN)/$(3).o\n' \
$(foreach TGT,$(DEBUG_TARGETS), \
$(if $(RULE_$(2)_to_$(TGT)), \
'\n$$(BIN)/$(3).$(TGT) :' \
'$(1) $$(MAKEDEPS) $$(POST_O_DEPS) $$($(3)_DEPS)' \
'\n\t$$(QM)$(ECHO) " [BUILD] $$@"' \
'\n\t$$(RULE_$(2)_to_$(TGT))\n' \
'\n$(TGT)_OBJS += $$(BIN)/$(3).$(TGT)\n' ) ) \
'\n$(BIN)/deps/$(1).d : $$($(3)_DEPS)\n' \
'\nTAGS : $$($(3)_DEPS)\n' > $(BIN)/rules/$(1).r
@$(if $(findstring drivers/,$(1)),\
$(PERL) $(PARSEROM) $(1) >> $(BIN)/rules/$(1).r)
endef

# Rule to generate the dependency list file
#
$(BIN)/deps/%.d : % $(MAKEDEPS)
$(call deps_template,$<,$(subst .,,$(suffix $<)),$(basename $(notdir $<)))

# Calculate and include the list of dependency list files
#
AUTO_DEPS = $(patsubst %,$(BIN)/deps/%.d,$(AUTO_SRCS))
ifdef NEED_DEPS
ifneq ($(AUTO_DEPS),)
-include $(AUTO_DEPS)
endif
endif
autodeps :
@$(ECHO) $(AUTO_DEPS)
VERYCLEANUP += $(BIN)/deps

# Rule to generate the rules file
#
$(BIN)/rules/%.r : % $(MAKEDEPS) $(PARSEROM)
$(call rules_template,$<,$(subst .,,$(suffix $<)),$(basename $(notdir $<)))

# Calculate and include the list of rules files
#
AUTO_RULES = $(patsubst %,$(BIN)/rules/%.r,$(AUTO_SRCS))
ifdef NEED_DEPS
ifneq ($(AUTO_RULES),)
-include $(AUTO_RULES)
endif
endif
autorules :
@$(ECHO) $(AUTO_RULES)
VERYCLEANUP += $(BIN)/rules

# The following variables are created by the rules files
#
bobjs :
@$(ECHO) $(BOBJS)
drivers :
@$(ECHO) $(DRIVERS)
.PHONY : drivers
roms :
@$(ECHO) $(ROMS)

# Generate error usage information
#
$(BIN)/%.einfo : $(BIN)/%.o
Expand Down

0 comments on commit 0e59417

Please sign in to comment.