From 5810dbef0509bf020e67018677ce677fd9e59f1f Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Mon, 12 Sep 2016 17:48:40 +1000 Subject: [PATCH] make: Add macro to test for & try to fix up files required for submodules Now applied to both esptool.py & esp32 wifi libs --- components/esp32/Makefile | 11 +++-------- components/esptool_py/Makefile.projbuild | 11 +++++++---- make/common.mk | 17 +++++++++++++++++ 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/components/esp32/Makefile b/components/esp32/Makefile index 2331f286c6..d67f50211c 100644 --- a/components/esp32/Makefile +++ b/components/esp32/Makefile @@ -37,14 +37,9 @@ include $(IDF_PATH)/make/component.mk ALL_LIB_FILES := $(patsubst %,$(COMPONENT_PATH)/lib/lib%.a,$(LIBS)) -# The binary libraries are in a git submodule, so this target will -# be invoked if any modules are missing (probably because -# git submodule update --init needs to be run). -$(ALL_LIB_FILES): - $(Q) [ -d ${IDF_PATH}/.git ] || ( @echo "ERROR: Missing libraries in esp32 component. esp-idf must be cloned from git to work."; exit 1 ) - $(Q) [ -x $(which git) ] || ( @echo "ERROR: Missing libraries in esp32 component. Need to run 'git submodule update --init' in esp-idf root directory."; exit 1 ) - @echo "Warning: Missing libraries in components/esp32/lib/ submodule. Going to try running 'git submodule update --init' in esp-idf root directory..." - cd ${IDF_PATH} && git submodule update --init +# automatically trigger a git submodule update +# if any libraries are missing +$(eval $(call SubmoduleRequiredForFiles,$(ALL_LIB_FILES))) # adding $(ALL_LIB_FILES) as a build dependency here is a hack to make # sure they get evaluated. Once TW6630 lands and we have library file diff --git a/components/esptool_py/Makefile.projbuild b/components/esptool_py/Makefile.projbuild index 4ddb51e6ac..9711929379 100644 --- a/components/esptool_py/Makefile.projbuild +++ b/components/esptool_py/Makefile.projbuild @@ -9,7 +9,8 @@ PYTHON ?= $(call dequote,$(CONFIG_PYTHON)) # to invoke esptool.py (with or without serial port args) # # NB: esptool.py lives in the sdk/bin directory not the component directory -ESPTOOLPY := $(PYTHON) $(COMPONENT_PATH)/esptool/esptool.py --chip esp32 +ESPTOOLPY_SRC := $(COMPONENT_PATH)/esptool/esptool.py +ESPTOOLPY := $(PYTHON) $(ESPTOOLPY_SRC) --chip esp32 ESPTOOLPY_SERIAL := $(ESPTOOLPY) --port $(ESPPORT) --baud $(ESPBAUD) # the no-stub argument is temporary until esptool.py fully supports compressed uploads @@ -17,12 +18,14 @@ ESPTOOLPY_WRITE_FLASH=$(ESPTOOLPY_SERIAL) $(if $(CONFIG_ESPTOOLPY_COMPRESSED),-- ESPTOOL_ALL_FLASH_ARGS += $(CONFIG_APP_OFFSET) $(APP_BIN) -$(APP_BIN): $(APP_ELF) +$(APP_BIN): $(APP_ELF) $(ESPTOOLPY_SRC) $(Q) $(ESPTOOLPY) elf2image -o $@ $< -flash: all_binaries +flash: all_binaries $(ESPTOOLPY_SRC) @echo "Flashing project app to $(CONFIG_APP_OFFSET)..." $(Q) $(ESPTOOLPY_WRITE_FLASH) $(ESPTOOL_ALL_FLASH_ARGS) -app-flash: $(APP_BIN) +app-flash: $(APP_BIN) $(ESPTOOLPY_SRC) $(Q) $(ESPTOOLPY_WRITE_FLASH) $(CONFIG_APP_OFFSET) $(APP_BIN) + +$(eval $(call SubmoduleRequiredForFiles,$(ESPTOOLPY_SRC))) diff --git a/make/common.mk b/make/common.mk index 7f372cc305..adae46738e 100644 --- a/make/common.mk +++ b/make/common.mk @@ -49,6 +49,23 @@ summary := @echo details := @true endif +# Pseudo-target to handle the case where submodules need to be +# re-initialised. +# +# $(eval $(call SubmoduleRequiredForFiles,FILENAMES)) to create a target that +# automatically runs 'git submodule update --init' if those files +# are missing, and fails if this is not possible. +define SubmoduleRequiredForFiles +$(1): + @echo "WARNING: Missing submodule for $$@..." + $(Q) [ -d ${IDF_PATH}/.git ] || ( echo "ERROR: esp-idf must be cloned from git to work."; exit 1) + $(Q) [ -x $(which git) ] || ( echo "ERROR: Need to run 'git submodule --init' in esp-idf root directory."; exit 1) + @echo "Attempting 'git submodule update --init' in esp-idf root directory..." + cd ${IDF_PATH} && git submodule update --init +endef + + + # General make utilities # convenience variable for printing an 80 asterisk wide separator line