forked from espressif/esp-idf
Makefile: Don't re-build libraries or re-link ELF files if nothing has changed in the component
make/build_system_tests.sh should now pass.
This commit is contained in:
@@ -166,9 +166,15 @@ $(foreach componentpath,$(COMPONENT_PATHS),$(eval $(call includeProjBuildMakefil
|
|||||||
# once we know component paths, we can include the config
|
# once we know component paths, we can include the config
|
||||||
include $(IDF_PATH)/make/project_config.mk
|
include $(IDF_PATH)/make/project_config.mk
|
||||||
|
|
||||||
# ELF depends on the -build target of every component
|
# A "component" library is any library in the LDFLAGS where
|
||||||
$(APP_ELF): $(addsuffix -build,$(notdir $(COMPONENT_PATHS_BUILDABLE)))
|
# the name of the library is also a name of the component
|
||||||
$(vecho) LD $(notdir $@)
|
APP_LIBRARIES = $(patsubst -l%,%,$(filter -l%,$(LDFLAGS)))
|
||||||
|
COMPONENT_LIBRARIES = $(filter $(notdir $(COMPONENT_PATHS_BUILDABLE)),$(APP_LIBRARIES))
|
||||||
|
|
||||||
|
# ELF depends on the library archive files for COMPONENT_LIBRARIES
|
||||||
|
# the rules to build these are emitted as part of GenerateComponentTarget below
|
||||||
|
$(APP_ELF): $(foreach libcomp,$(COMPONENT_LIBRARIES),$(BUILD_DIR_BASE)/$(libcomp)/lib$(libcomp).a)
|
||||||
|
$(summary) LD $(notdir $@)
|
||||||
$(Q) $(CC) $(LDFLAGS) -o $@ -Wl,-Map=$(APP_MAP)
|
$(Q) $(CC) $(LDFLAGS) -o $@ -Wl,-Map=$(APP_MAP)
|
||||||
|
|
||||||
# Generation of $(APP_BIN) from $(APP_ELF) is added by the esptool
|
# Generation of $(APP_BIN) from $(APP_ELF) is added by the esptool
|
||||||
@@ -182,25 +188,31 @@ all_binaries: $(APP_BIN)
|
|||||||
$(BUILD_DIR_BASE):
|
$(BUILD_DIR_BASE):
|
||||||
mkdir -p $(BUILD_DIR_BASE)
|
mkdir -p $(BUILD_DIR_BASE)
|
||||||
|
|
||||||
define GenerateComponentTarget
|
define GenerateComponentPhonyTarget
|
||||||
# $(1) - path to component dir
|
# $(1) - path to component dir
|
||||||
# $(2) - target to generate (build, clean)
|
# $(2) - target to generate (build, clean)
|
||||||
# $(3) - optional dependencies to add
|
|
||||||
.PHONY: $(notdir $(1))-$(2)
|
.PHONY: $(notdir $(1))-$(2)
|
||||||
$(notdir $(1))-$(2): $(3) | $(BUILD_DIR_BASE)/$(notdir $(1))
|
$(notdir $(1))-$(2): | $(BUILD_DIR_BASE)/$(notdir $(1))
|
||||||
@+$(MAKE) -C $(BUILD_DIR_BASE)/$(notdir $(1)) -f $(1)/Makefile COMPONENT_BUILD_DIR=$(BUILD_DIR_BASE)/$(notdir $(1)) $(2)
|
@+$(MAKE) -C $(BUILD_DIR_BASE)/$(notdir $(1)) -f $(1)/Makefile COMPONENT_BUILD_DIR=$(BUILD_DIR_BASE)/$(notdir $(1)) $(2)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define GenerateComponentBuildDirTarget
|
define GenerateComponentTargets
|
||||||
# $(1) - path to component dir
|
# $(1) - path to component dir
|
||||||
$(BUILD_DIR_BASE)/$(notdir $(1)):
|
$(BUILD_DIR_BASE)/$(notdir $(1)):
|
||||||
@mkdir -p $(BUILD_DIR_BASE)/$(notdir $(1))
|
@mkdir -p $(BUILD_DIR_BASE)/$(notdir $(1))
|
||||||
|
|
||||||
|
# tell make it can build any component's library by invoking the recursive -build target
|
||||||
|
# (this target exists for all components even ones which don't build libraries, but it's
|
||||||
|
# only invoked for the targets whose libraries appear in COMPONENT_LIBRARIES and hence the
|
||||||
|
# APP_ELF dependencies.)
|
||||||
|
$(BUILD_DIR_BASE)/$(notdir $(1))/lib$(notdir $(1)).a: $(notdir $(1))-build
|
||||||
|
$(details) echo "$$^ responsible for $$@" # echo which build target built this file
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(foreach component,$(COMPONENT_PATHS_BUILDABLE),$(eval $(call GenerateComponentBuildDirTarget,$(component))))
|
$(foreach component,$(COMPONENT_PATHS_BUILDABLE),$(eval $(call GenerateComponentTargets,$(component))))
|
||||||
|
|
||||||
$(foreach component,$(COMPONENT_PATHS_BUILDABLE),$(eval $(call GenerateComponentTarget,$(component),build,$(PROJECT_PATH)/build/include/sdkconfig.h)))
|
$(foreach component,$(COMPONENT_PATHS_BUILDABLE),$(eval $(call GenerateComponentPhonyTarget,$(component),build)))
|
||||||
$(foreach component,$(COMPONENT_PATHS_BUILDABLE),$(eval $(call GenerateComponentTarget,$(component),clean)))
|
$(foreach component,$(COMPONENT_PATHS_BUILDABLE),$(eval $(call GenerateComponentPhonyTarget,$(component),clean)))
|
||||||
|
|
||||||
app-clean: $(addsuffix -clean,$(notdir $(COMPONENT_PATHS_BUILDABLE)))
|
app-clean: $(addsuffix -clean,$(notdir $(COMPONENT_PATHS_BUILDABLE)))
|
||||||
$(summary) RM $(APP_ELF)
|
$(summary) RM $(APP_ELF)
|
||||||
|
Reference in New Issue
Block a user