# Default compile configurations # FLASH_MODE=[ dout | dio | qout | qio ] # use flash mode dout by default to keep GPIO9 and GPIO10 free for use FLASH_MODE ?= dout # ESP* pseudomodules PSEUDOMODULES += esp_gdb PSEUDOMODULES += esp_i2c_sw PSEUDOMODULES += esp_log_colored PSEUDOMODULES += esp_log_tagged PSEUDOMODULES += esp_log_startup PSEUDOMODULES += esp_qemu PSEUDOMODULES += esp_spiffs PSEUDOMODULES += esp_wifi_any PSEUDOMODULES += esp_wifi_ap # Common includes INCLUDES += -I$(RIOTBOARD)/common/$(CPU)/include INCLUDES += -I$(RIOTCPU)/esp_common INCLUDES += -I$(RIOTCPU)/esp_common/include INCLUDES += -I$(RIOTCPU)/esp_common/include/freertos INCLUDES += -I$(RIOTCPU)/esp_common/vendor/ INCLUDES += -I$(RIOTCPU)/esp_common/vendor/esp # Flags CFLAGS += -Wno-unused-parameter CFLAGS += -Wformat=0 CFLAGS += -fstrict-volatile-bitfields CFLAGS += -fdata-sections CFLAFS += -ffunction-sections CFLAGS += -fzero-initialized-in-bss ifeq (xtensa,$(CPU_ARCH)) CFLAGS += -mlongcalls -mtext-section-literals endif OPTIONAL_CFLAGS_BLACKLIST += -Wformat-overflow OPTIONAL_CFLAGS_BLACKLIST += -Wformat-truncation OPTIONAL_CFLAGS_BLACKLIST += -gz ASFLAGS += --longcalls --text-section-literals CFLAGS_DBG ?= -ggdb -g3 # override default CFLAGS_OPT in case module esp_gdb is enabled ifneq (,$(filter esp_gdb,$(USEMODULE))) CFLAGS_OPT ?= -Og else CFLAGS_OPT ?= -Os endif CFLAGS += $(CFLAGS_OPT) $(CFLAGS_DBG) # add -DQEMU for qemu ifneq (,$(filter esp_qemu,$(USEMODULE))) CFLAGS += -DQEMU endif ifneq (,$(filter esp_freertos_common,$(USEMODULE))) # thread_t.name required by FreeRTOS adaptation layer and esp_gdbstub CFLAGS += -DCONFIG_THREAD_NAMES # thread_t.stack_start required by FreeRTOS adaptation layer CFLAGS += -DSCHED_TEST_STACK endif # use 32 priority levels if any WiFi interface or the ETH interface is used ifneq (,$(filter esp_wifi_any esp_eth,$(USEMODULE))) CFLAGS += -DSCHED_PRIO_LEVELS=32 endif # The threads for handling the ESP hardware have the priorities from 2 to 4. # The priority of lwIP TCPIP thread should be lower than these priorities. ifneq (,$(filter lwip,$(USEMODULE))) CFLAGS += -DTCPIP_THREAD_PRIO=5 endif # extend CFLAGS by the corresponding CONFIG_FLASHMODE_* defines ifeq (dout,$(FLASH_MODE)) CFLAGS += -DCONFIG_FLASHMODE_DOUT CFLAGS += -DCONFIG_ESPTOOLPY_FLASHMODE_DOUT else ifeq (dio,$(FLASH_MODE)) CFLAGS += -DCONFIG_FLASHMODE_DIO CFLAGS += -DCONFIG_ESPTOOLPY_FLASHMODE_DIO else ifeq (qout,$(FLASH_MODE)) CFLAGS += -DCONFIG_FLASHMODE_QOUT CFLAGS += -DCONFIG_ESPTOOLPY_FLASHMODE_QUOT else ifeq (qio,$(FLASH_MODE)) CFLAGS += -DCONFIG_FLASHMODE_QIO CFLAGS += -DCONFIG_ESPTOOLPY_FLASHMODE_QIO else $(error Undefined FLASH_MODE, possible values are: dout, dio, qout and qio) endif ARCHIVES += -lg -lc LINKFLAGS += $(CFLAGS_OPT) $(CFLAGS_DBG) LINKFLAGS += -nostdlib -Wl,-gc-sections -Wl,-static # use the wrapper functions for calloc to add correct overflow detection missing # in the newlib's version. LINKFLAGS += -Wl,-wrap,_calloc_r ifneq (,$(filter esp_idf_heap,$(USEMODULE))) LINKFLAGS += -Wl,-wrap,_malloc_r LINKFLAGS += -Wl,-wrap,_realloc_r LINKFLAGS += -Wl,-wrap,_free_r endif # LINKFLAGS += -Wl,--verbose # LINKFLAGS += -Wl,--print-gc-sections # increase the test timeout for file system tests that use the SPI flash drive ifneq (,$(filter spiffs littlefs,$(USEMODULE))) RIOT_TEST_TIMEOUT = 20 $(call target-export-variables,test,RIOT_TEST_TIMEOUT) endif # All ESP are flashed using esptool PROGRAMMER ?= esptool # Add esptool in the list supported programmers PROGRAMMERS_SUPPORTED += esptool # The ELFFILE is defined by default in $(RIOTBASE)/Makefile.include but only # after this file is included, so we need ELFFILE defined earlier. # This is used to create new make rules in this file (based on FLASHFILE) # and can't be deferred. ELFFILE ?= $(BINDIR)/$(APPLICATION).elf FLASHFILE ?= $(ELFFILE).bin ESPTOOL ?= $(RIOTTOOLS)/esptools/esptool.py # This is the binary that ends up programmed in the flash. $(ELFFILE).bin: $(ELFFILE) $(Q)$(ESPTOOL) --chip $(FLASH_CHIP) elf2image --flash_mode $(FLASH_MODE) \ --flash_size $(FLASH_SIZE)MB --flash_freq $(FLASH_FREQ) $(FLASH_OPTS) \ -o $@ $< # Convert .elf and .csv to .bin files at build time, but make them available for # tests at flash time. These can't be added to FLASHDEPS because they depend on # on ELFFILE and would trigger a rebuild with "flash-only". BUILD_FILES += $(FLASHFILE) $(BINDIR)/partitions.bin $(BOOTLOADER_BIN) TEST_EXTRA_FILES += $(FLASHFILE) $(BINDIR)/partitions.bin $(BOOTLOADER_BIN) # Default partition table with no OTA. Can be replaced with a custom partition # table setting PARTITION_TABLE_CSV. PARTITION_TABLE_CSV ?= $(BINDIR)/partitions.csv ifneq (,$(filter periph_flashpage_in_address_space,$(USEMODULE))) $(BINDIR)/partitions.csv: $(FLASHFILE) $(Q)printf "\n" > $(BINDIR)/partitions.csv $(Q)printf "nvs, data, nvs, 0x9000, 0x6000\n" >> $@ $(Q)printf "phy_init, data, phy, 0xf000, 0x1000\n" >> $@ $(Q)printf "flashpage, data, phy, $(FLASHPAGE_ADDR_START), $(FLASHPAGE_CAP)\n" >> $@ $(Q)printf "factory, app, factory, $(FLASHFILE_POS), " >> $@ $(Q)ls -l $< | awk '{ print $$5 }' >> $@ else $(BINDIR)/partitions.csv: $(FLASHFILE) $(Q)printf "\n" > $(BINDIR)/partitions.csv $(Q)printf "nvs, data, nvs, 0x9000, 0x6000\n" >> $@ $(Q)printf "phy_init, data, phy, 0xf000, 0x1000\n" >> $@ $(Q)printf "factory, app, factory, $(FLASHFILE_POS), " >> $@ $(Q)ls -l $< | awk '{ print $$5 }' >> $@ endif $(BINDIR)/partitions.bin: $(PARTITION_TABLE_CSV) $(Q)python3 $(RIOTTOOLS)/esptools/gen_esp32part.py --verify $< $@