#
BOOTLOADER_COMPONENT_PATH := $(COMPONENT_PATH)
-EXTRA_CLEAN_TARGETS+=bootloader-clean
-BOOTLOADER_BIN=$(BUILD_DIR_BASE)/bootloader.bin
+EXTRA_CLEAN_TARGETS += bootloader-clean
+BOOTLOADER_BUILD_DIR=$(BUILD_DIR_BASE)/bootloader
+BOOTLOADER_BIN=$(BOOTLOADER_BUILD_DIR)/bootloader.bin
.PHONY: bootloader-clean bootloader-flash bootloader
COMPONENT_INCLUDES= \
LDFLAGS= \
CFLAGS= \
- BUILD_DIR_BASE=$(BUILD_DIR_BASE)/bootloader \
+ BUILD_DIR_BASE=$(BOOTLOADER_BUILD_DIR) \
make -C $(BOOTLOADER_COMPONENT_PATH)/src MAKEFLAGS= V=$(V) TARGET_BIN_LAYOUT="$(BOOTLOADER_TARGET_BIN_LAYOUT)"
bootloader-clean:
COMPONENT_INCLUDES= \
LDFLAGS= \
CFLAGS= \
- BUILD_DIR_BASE=$(BUILD_DIR_BASE)/bootloader \
+ BUILD_DIR_BASE=$(BOOTLOADER_BUILD_DIR) \
make -C $(BOOTLOADER_COMPONENT_PATH)/src clean MAKEFLAGS= V=$(V)
-bootloader: $(BUILD_DIR_BASE)/bootloader.bin
+bootloader: $(BOOTLOADER_BIN)
# synchronise the project level config to the component's
# config
# bootloader-flash calls flash in the bootloader dummy project
bootloader-flash: $(BOOTLOADER_BIN)
- make -C $(BOOTLOADER_COMPONENT_PATH)/src flash MAKEFLAGS= V=$(V) CONFIG_APP_OFFSET=0x1000
+ make -C $(BOOTLOADER_COMPONENT_PATH)/src flash MAKEFLAGS= V=$(V)
# disable built-in make rules, makes debugging saner
MAKEFLAGS +=-rR
-# Figure out PROJECT_PATH if not set, check for unacceptable Makefile entry points
+# Figure out PROJECT_PATH if not set
ifeq ("$(PROJECT_PATH)","")
#The path to the project: we assume the Makefile including this file resides
#in the root of that directory.
PROJECT_PATH := $(abspath $(dir $(firstword $(MAKEFILE_LIST))))
export PROJECT_PATH
+endif
#The directory where we put all objects/libraries/binaries. The project Makefile can
#configure this if needed.
# Assemble global list of include dirs (COMPONENT_INCLUDES), and
# LDFLAGS args (COMPONENT_LDFLAGS) supplied by each component.
+COMPONENT_INCLUDES :=
+COMPONENT_LDFLAGS :=
#
# Also add any inter-component dependencies for each component.
#
# Debugging this? Replace $(shell with $(error and you'll see the full command as-run.
define GetVariable
-$(shell "$(MAKE)" -s --no-print-directory -C $(1) get_variable COMPONENT_INCLUDES=dummy COMPONENT_LDFLAGS=dummy PROJECT_PATH=$(PROJECT_PATH) GET_VARIABLE=$(2) | sed -En "s/^$(2)=(.+)/\1/p" )
+$(shell "$(MAKE)" -s --no-print-directory -C $(1) get_variable PROJECT_PATH=$(PROJECT_PATH) GET_VARIABLE=$(2) | sed -En "s/^$(2)=(.+)/\1/p" )
endef
ifeq ("$(COMPONENT_INCLUDES)","")
PYTHON=$(call dequote,$(CONFIG_PYTHON))
PROJECT_ELF:=$(BUILD_DIR_BASE)/$(PROJECT_NAME).elf
+PROJECT_MAP:=$(PROJECT_ELF:.elf=.map)
PROJECT_BIN:=$(PROJECT_ELF:.elf=.bin)
# Include any Makefile.projbuild file letting components add
endef
$(foreach componentpath,$(COMPONENT_PATHS),$(eval $(call includeProjBuildMakefile,$(componentpath))))
+# once we know component paths, we can include the config
+include $(SDK_PATH)/make/project_config.mk
+
# ELF depends on the -build target of every component
$(PROJECT_ELF): $(addsuffix -build,$(notdir $(COMPONENT_PATHS_BUILDABLE)))
$(vecho) LD $(notdir $@)
- $(Q) $(CC) $(LDFLAGS) -o $@ -Wl,-Map=$(patsubst %.elf,%.map,$@)
+ $(Q) $(CC) $(LDFLAGS) -o $@ -Wl,-Map=$(PROJECT_MAP)
# Generation of $(PROJECT_BIN) from $(PROJECT_ELF) is added by the esptool
# component's Makefile.projbuild
$(foreach component,$(COMPONENT_PATHS_BUILDABLE),$(eval $(call GenerateComponentTarget,$(component),build,$(PROJECT_PATH)/build/include/sdkconfig.h)))
$(foreach component,$(COMPONENT_PATHS_BUILDABLE),$(eval $(call GenerateComponentTarget,$(component),clean)))
-include $(SDK_PATH)/make/project_config.mk
-
clean: $(addsuffix -clean,$(notdir $(COMPONENT_PATHS_BUILDABLE))) $(EXTRA_CLEAN_TARGETS)
$(vecho) RM $(PROJECT_ELF)
- $(Q) rm -f $(PROJECT_ELF)
+ $(Q) rm -f $(PROJECT_ELF) $(PROJECT_BIN) $(PROJECT_MAP)
$(Q) rm -rf $(PROJECT_PATH)/build/include/config $(PROJECT_PATH)/build/include/sdkconfig.h
-endif