Ver Fonte

build system: Remove need for $(Q) macro in recipes, use --silent in MAKEFLAGS instead

Angus Gratton há 9 anos atrás
pai
commit
341593f7d2

+ 3 - 3
components/bootloader/Makefile.projbuild

@@ -21,10 +21,10 @@ BOOTLOADER_MAKE=+$(MAKE) -C $(BOOTLOADER_COMPONENT_PATH)/src \
 .PHONY: bootloader-clean bootloader-flash bootloader $(BOOTLOADER_BIN)
 
 $(BOOTLOADER_BIN): $(SDKCONFIG_MAKEFILE)
-	$(Q) $(BOOTLOADER_MAKE) $@
+	$(BOOTLOADER_MAKE) $@
 
 bootloader-clean:
-	$(Q) $(BOOTLOADER_MAKE) app-clean
+	$(BOOTLOADER_MAKE) app-clean
 
 clean: bootloader-clean
 
@@ -41,7 +41,7 @@ bootloader-flash: $(BOOTLOADER_BIN)
 	$(ESPTOOLPY_WRITE_FLASH) 0x1000 $^
 
 $(BOOTLOADER_BUILD_DIR):
-	$(Q) mkdir -p $@
+	mkdir -p $@
 
 else
 CFLAGS += -D BOOTLOADER_BUILD=1 -I $(IDF_PATH)/components/esp32/include

+ 3 - 3
components/esptool_py/Makefile.projbuild

@@ -24,14 +24,14 @@ ESPTOOLPY_WRITE_FLASH=$(ESPTOOLPY_SERIAL) write_flash $(if $(CONFIG_ESPTOOLPY_CO
 ESPTOOL_ALL_FLASH_ARGS += $(CONFIG_APP_OFFSET) $(APP_BIN)
 
 $(APP_BIN): $(APP_ELF) $(ESPTOOLPY_SRC)
-	$(Q) $(ESPTOOLPY) elf2image $(ESPTOOL_FLASH_OPTIONS) -o $@ $<
+	$(ESPTOOLPY) elf2image $(ESPTOOL_FLASH_OPTIONS) -o $@ $<
 
 flash: all_binaries $(ESPTOOLPY_SRC)
 	@echo "Flashing binaries to serial port $(ESPPORT) (app at offset $(CONFIG_APP_OFFSET))..."
-	$(Q) $(ESPTOOLPY_WRITE_FLASH) $(ESPTOOL_ALL_FLASH_ARGS)
+	$(ESPTOOLPY_WRITE_FLASH) $(ESPTOOL_ALL_FLASH_ARGS)
 
 app-flash: $(APP_BIN) $(ESPTOOLPY_SRC)
 	@echo "Flashing app to serial port $(ESPPORT), offset $(CONFIG_APP_OFFSET)..."
-	$(Q) $(ESPTOOLPY_WRITE_FLASH) $(CONFIG_APP_OFFSET) $(APP_BIN)
+	$(ESPTOOLPY_WRITE_FLASH) $(CONFIG_APP_OFFSET) $(APP_BIN)
 
 $(eval $(call SubmoduleCheck,$(ESPTOOLPY_SRC),$(COMPONENT_PATH)/esptool))

+ 4 - 4
components/partition_table/Makefile.projbuild

@@ -20,7 +20,7 @@ PARTITION_TABLE_BIN := $(BUILD_DIR_BASE)/$(notdir $(PARTITION_TABLE_CSV_PATH:.cs
 
 $(PARTITION_TABLE_BIN): $(PARTITION_TABLE_CSV_PATH)
 	@echo "Building partitions from $(PARTITION_TABLE_CSV_PATH)..."
-	$(Q) $(GEN_ESP32PART) $< $@
+	$(GEN_ESP32PART) $< $@
 
 all_binaries: $(PARTITION_TABLE_BIN)
 
@@ -30,16 +30,16 @@ ESPTOOL_ALL_FLASH_ARGS += 0x4000 $(PARTITION_TABLE_BIN)
 partition_table: $(PARTITION_TABLE_BIN)
 	@echo "Partition table binary generated. Contents:"
 	@echo $(SEPARATOR)
-	$(Q) $(GEN_ESP32PART) $<
+	$(GEN_ESP32PART) $<
 	@echo $(SEPARATOR)
 	@echo "Partition flashing command:"
 	@echo "$(PARTITION_TABLE_FLASH_CMD)"
 
 partition_table-flash: $(PARTITION_TABLE_BIN)
 	@echo "Flashing partition table..."
-	$(Q) $(PARTITION_TABLE_FLASH_CMD)
+	$(PARTITION_TABLE_FLASH_CMD)
 
 partition_table-clean:
-	$(Q) rm -f $(PARTITION_TABLE_BIN)
+	rm -f $(PARTITION_TABLE_BIN)
 
 clean: partition_table-clean

+ 12 - 18
docs/build_system.rst

@@ -275,6 +275,18 @@ Second Level: Component Makefiles
 
 To better understand the component make process, have a read through the ``component_wrapper.mk`` file and some of the ``component.mk`` files included with esp-idf.
 
+Debugging The Make Process
+--------------------------
+
+Some tips for debugging the esp-idf build system:
+
+- Appending ``V=1`` to the make arguments (or setting it as an environment variable) will cause make to echo all commands executed, and also each directory as it is entered for a sub-make.
+- Running ``make -w`` will cause make to echo each directory as it is entered for a sub-make - same as ``V=1`` but without also echoing all commands.
+- Running ``make --trace`` (possibly in addition to one of the above arguments) will print out every target as it is built, and the dependency which caused it to be built.
+- Running ``make -p`` prints a (very verbose) summary of every generated target in each makefile.
+
+For more debugging tips and general make information, see the `GNU Make Manual`.
+
 Overriding Parts of the Project
 -------------------------------
 
@@ -395,24 +407,6 @@ component's name would have to be added to the other component's
 ``COMPONENT_DEPENDS`` list to ensure that the components were built
 in-order.
 
-Cosmetic Improvements
-^^^^^^^^^^^^^^^^^^^^^
-
-The above example will work just fine, but there's one last cosmetic
-improvement that can be done. The make system tries to make the make
-process somewhat easier on the  eyes by hiding the commands (unless you
-run make with the V=1 switch) and this does  not do that yet. Here's an
-improved version that will output in the same style as  the rest of the
-make process::
-
-   COMPONENT_EXTRA_CLEAN := test_tjpgd_logo.h
-
-   graphics_lib.o: logo.h
-
-    logo.h: $(COMPONENT_PATH)/logo.bmp
-        $(summary) BMP2H $@
-        $(Q) bmp2h -i $^ -o $@
-
 
 Fully Overriding The Component Makefile
 ---------------------------------------

+ 5 - 4
make/common.mk

@@ -16,13 +16,14 @@ export SDKCONFIG_MAKEFILE  # sub-makes (like bootloader) will reuse this path
 # if V is unset or not 1, $(summary) echoes a summary and $(details) does nothing
 V ?= $(VERBOSE)
 ifeq ("$(V)","1")
-Q :=
 summary := @true
 details := @echo
 else
-Q := @
 summary := @echo
 details := @true
+
+# disable echoing of commands, directory names
+MAKEFLAGS += --silent
 endif
 
 # Pseudo-target to check a git submodule has been properly initialised
@@ -36,8 +37,8 @@ endif
 define SubmoduleCheck
 $(1):
 	@echo "WARNING: Missing submodule $(2) 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)
+	[ -d ${IDF_PATH}/.git ] || ( echo "ERROR: esp-idf must be cloned from git to work."; exit 1)
+	[ -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 $(2)
 

+ 6 - 6
make/component_wrapper.mk

@@ -129,8 +129,8 @@ build: $(COMPONENT_LIBRARY)
 # an archive when multiple filenames have the same name (src1/test.o and src2/test.o)
 $(COMPONENT_LIBRARY): $(COMPONENT_OBJS)
 	$(summary) AR $@
-	$(Q) rm -f $@
-	$(Q) $(AR) cru $@ $(COMPONENT_OBJS)
+	rm -f $@
+	$(AR) cru $@ $(COMPONENT_OBJS)
 endif
 
 # If COMPONENT_OWNCLEANTARGET is not set, define a phony clean target
@@ -139,7 +139,7 @@ CLEAN_FILES = $(COMPONENT_LIBRARY) $(COMPONENT_OBJS) $(COMPONENT_OBJS:.o=.d) $(C
 .PHONY: clean
 clean:
 	$(summary) RM $(CLEAN_FILES)
-	$(Q) rm -f $(CLEAN_FILES)
+	rm -f $(CLEAN_FILES)
 endif
 
 # Include all dependency files already generated
@@ -150,15 +150,15 @@ define GenerateCompileTargets
 # $(1) - directory containing source files, relative to $(COMPONENT_PATH)
 $(1)/%.o: $$(COMPONENT_PATH)/$(1)/%.c | $(1)
 	$$(summary) CC $$@
-	$$(Q) $$(CC) $$(CFLAGS) $$(CPPFLAGS) $$(addprefix -I ,$$(COMPONENT_INCLUDES)) $$(addprefix -I ,$$(COMPONENT_EXTRA_INCLUDES)) -I$(1) -c $$< -o $$@
+	$$(CC) $$(CFLAGS) $$(CPPFLAGS) $$(addprefix -I ,$$(COMPONENT_INCLUDES)) $$(addprefix -I ,$$(COMPONENT_EXTRA_INCLUDES)) -I$(1) -c $$< -o $$@
 
 $(1)/%.o: $$(COMPONENT_PATH)/$(1)/%.cpp | $(1)
 	$$(summary) CXX $$@
-	$$(Q) $$(CXX) $$(CXXFLAGS) $$(CPPFLAGS) $$(addprefix -I,$$(COMPONENT_INCLUDES)) $$(addprefix -I,$$(COMPONENT_EXTRA_INCLUDES)) -I$(1) -c $$< -o $$@
+	$$(CXX) $$(CXXFLAGS) $$(CPPFLAGS) $$(addprefix -I,$$(COMPONENT_INCLUDES)) $$(addprefix -I,$$(COMPONENT_EXTRA_INCLUDES)) -I$(1) -c $$< -o $$@
 
 $(1)/%.o: $$(COMPONENT_PATH)/$(1)/%.S | $(1)
 	$$(summary) AS $$@
-	$$(Q) $$(CC) $$(CPPFLAGS) $$(addprefix -I ,$$(COMPONENT_INCLUDES)) $$(addprefix -I ,$$(COMPONENT_EXTRA_INCLUDES)) -I$(1) -c $$< -o $$@
+	$$(CC) $$(CPPFLAGS) $$(addprefix -I ,$$(COMPONENT_INCLUDES)) $$(addprefix -I ,$$(COMPONENT_EXTRA_INCLUDES)) -I$(1) -c $$< -o $$@
 
 # CWD is build dir, create the build subdirectory if it doesn't exist
 $(1):

+ 3 - 3
make/project.mk

@@ -238,7 +238,7 @@ COMPONENT_LIBRARIES = $(filter $(notdir $(COMPONENT_PATHS_BUILDABLE)),$(APP_LIBR
 # 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)
+	$(CC) $(LDFLAGS) -o $@ -Wl,-Map=$(APP_MAP)
 
 # Generation of $(APP_BIN) from $(APP_ELF) is added by the esptool
 # component's Makefile.projbuild
@@ -257,7 +257,7 @@ $(BUILD_DIR_BASE):
 #
 # Is recursively expanded by the GenerateComponentTargets macro
 define ComponentMake
-$(Q) +$(MAKE) -C $(BUILD_DIR_BASE)/$(2) -f $(IDF_PATH)/make/component_wrapper.mk COMPONENT_MAKEFILE=$(1)/component.mk
++$(MAKE) -C $(BUILD_DIR_BASE)/$(2) -f $(IDF_PATH)/make/component_wrapper.mk COMPONENT_MAKEFILE=$(1)/component.mk
 endef
 
 # Generate top-level component-specific targets for each component
@@ -303,7 +303,7 @@ $(foreach component,$(COMPONENT_PATHS_BUILDABLE),$(eval $(call GenerateComponent
 
 app-clean: $(addsuffix -clean,$(notdir $(COMPONENT_PATHS_BUILDABLE)))
 	$(summary) RM $(APP_ELF)
-	$(Q) rm -f $(APP_ELF) $(APP_BIN) $(APP_MAP)
+	rm -f $(APP_ELF) $(APP_BIN) $(APP_MAP)
 
 clean: app-clean
 

+ 7 - 7
make/project_config.mk

@@ -23,7 +23,7 @@ KCONFIG_TOOL_ENV=KCONFIG_AUTOHEADER=$(abspath $(BUILD_DIR_BASE)/include/sdkconfi
 
 menuconfig: $(KCONFIG_TOOL_DIR)/mconf $(IDF_PATH)/Kconfig
 	$(summary) MENUCONFIG
-	$(Q) $(KCONFIG_TOOL_ENV) $(KCONFIG_TOOL_DIR)/mconf $(IDF_PATH)/Kconfig
+	$(KCONFIG_TOOL_ENV) $(KCONFIG_TOOL_DIR)/mconf $(IDF_PATH)/Kconfig
 
 ifeq ("$(wildcard $(SDKCONFIG))","")
 ifeq ("$(filter defconfig,$(MAKECMDGOALS))","")
@@ -36,8 +36,8 @@ endif
 
 defconfig: $(KCONFIG_TOOL_DIR)/mconf $(IDF_PATH)/Kconfig $(BUILD_DIR_BASE)
 	$(summary) DEFCONFIG
-	$(Q) mkdir -p $(BUILD_DIR_BASE)/include/config
-	$(Q) $(KCONFIG_TOOL_ENV) $(KCONFIG_TOOL_DIR)/conf --olddefconfig $(IDF_PATH)/Kconfig
+	mkdir -p $(BUILD_DIR_BASE)/include/config
+	$(KCONFIG_TOOL_ENV) $(KCONFIG_TOOL_DIR)/conf --olddefconfig $(IDF_PATH)/Kconfig
 
 # Work out of whether we have to build the Kconfig makefile
 # (auto.conf), or if we're in a situation where we don't need it
@@ -56,9 +56,9 @@ endif
 
 $(AUTO_CONF_REGEN_TARGET) $(BUILD_DIR_BASE)/include/sdkconfig.h: $(SDKCONFIG) $(KCONFIG_TOOL_DIR)/conf $(COMPONENT_KCONFIGS) $(COMPONENT_KCONFIGS_PROJBUILD)
 	$(summary) GENCONFIG
-	$(Q) mkdir -p $(BUILD_DIR_BASE)/include/config
-	$(Q) cd $(BUILD_DIR_BASE); $(KCONFIG_TOOL_ENV) $(KCONFIG_TOOL_DIR)/conf --silentoldconfig $(IDF_PATH)/Kconfig
-	$(Q) touch $(AUTO_CONF_REGEN_TARGET) $(BUILD_DIR_BASE)/include/sdkconfig.h
+	mkdir -p $(BUILD_DIR_BASE)/include/config
+	cd $(BUILD_DIR_BASE); $(KCONFIG_TOOL_ENV) $(KCONFIG_TOOL_DIR)/conf --silentoldconfig $(IDF_PATH)/Kconfig
+	touch $(AUTO_CONF_REGEN_TARGET) $(BUILD_DIR_BASE)/include/sdkconfig.h
 # touch to ensure both output files are newer - as 'conf' can also update sdkconfig (a dependency). Without this,
 # sometimes you can get an infinite make loop on Windows where sdkconfig always gets regenerated newer
 # than the target(!)
@@ -68,4 +68,4 @@ clean: config-clean
 config-clean:
 	$(summary RM CONFIG)
 	$(MAKE) -C $(KCONFIG_TOOL_DIR) clean
-	$(Q) rm -rf $(BUILD_DIR_BASE)/include/config $(BUILD_DIR_BASE)/include/sdkconfig.h
+	rm -rf $(BUILD_DIR_BASE)/include/config $(BUILD_DIR_BASE)/include/sdkconfig.h

+ 13 - 13
tools/kconfig/Makefile

@@ -41,13 +41,13 @@ nconfig: nconf
 	$< $(silent) $(Kconfig)
 
 silentoldconfig: conf
-	$(Q)mkdir -p include/config include/generated
+	mkdir -p include/config include/generated
 	$< $(silent) --$@ $(Kconfig)
 
 localyesconfig localmodconfig: streamline_config.pl conf
-	$(Q)mkdir -p include/config include/generated
-	$(Q)perl $< --$@ . $(Kconfig) > .tmp.config
-	$(Q)if [ -f .config ]; then 					\
+	mkdir -p include/config include/generated
+	perl $< --$@ . $(Kconfig) > .tmp.config
+	if [ -f .config ]; then 					\
 			cmp -s .tmp.config .config ||			\
 			(mv -f .config .config.old.1;			\
 			 mv -f .tmp.config .config;			\
@@ -57,7 +57,7 @@ localyesconfig localmodconfig: streamline_config.pl conf
 			mv -f .tmp.config .config;			\
 			conf $(silent) --silentoldconfig $(Kconfig); \
 	fi
-	$(Q)rm -f .tmp.config
+	rm -f .tmp.config
 
 
 # These targets map 1:1 to the commandline options of 'conf'
@@ -84,22 +84,22 @@ ifeq ($(KBUILD_DEFCONFIG),)
 else
 ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG)),)
 	@$(kecho) "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
-	$(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
+	$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
 else
 	@$(kecho) "*** Default configuration is based on target '$(KBUILD_DEFCONFIG)'"
-	$(Q) $(MAKE) -f $(srctree)/Makefile $(KBUILD_DEFCONFIG)
+	$(MAKE) -f $(srctree)/Makefile $(KBUILD_DEFCONFIG)
 endif
 endif
 
 %_defconfig: conf
-	$(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
+	$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
 
 configfiles=$(wildcard $(srctree)/kernel/configs/$@ $(srctree)/arch/$(SRCARCH)/configs/$@)
 
 %.config: conf
 	$(if $(call configfiles),, $(error No configuration exists for this target on this architecture))
-	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m .config $(configfiles)
-	+$(Q)yes "" | $(MAKE) -f $(srctree)/Makefile oldconfig
+	$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m .config $(configfiles)
+	+yes "" | $(MAKE) -f $(srctree)/Makefile oldconfig
 
 PHONY += kvmconfig
 kvmconfig: kvm_guest.config
@@ -111,7 +111,7 @@ xenconfig: xen.config
 
 PHONY += tinyconfig
 tinyconfig:
-	$(Q)$(MAKE) -f $(srctree)/Makefile allnoconfig tiny.config
+	$(MAKE) -f $(srctree)/Makefile allnoconfig tiny.config
 
 # Help text used by make help
 help:
@@ -181,7 +181,7 @@ clean-files += $(conf-objs) $(mconf-objs) conf mconf $(lxdialog)
 PHONY += dochecklxdialog
 $(addprefix ,$(lxdialog)): dochecklxdialog
 dochecklxdialog:
-	$(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(CC) $(CFLAGS) $(LOADLIBES_mconf)
+	$(CONFIG_SHELL) $(check-lxdialog) -check $(CC) $(CFLAGS) $(LOADLIBES_mconf)
 
 always := dochecklxdialog
 
@@ -285,7 +285,7 @@ quiet_cmd_moc = MOC     $@
 
 # Extract gconf menu items for i18n support
 gconf.glade.h: gconf.glade
-	$(Q)intltool-extract --type=gettext/glade --srcdir=$(srctree) \
+	intltool-extract --type=gettext/glade --srcdir=$(srctree) \
 	gconf.glade