# source directories SRCDIR_MP = vendor/micropython SRCDIR_FW = micropython # target directory PROJECT ?= bootloader BUILD ?= micropython/$(PROJECT)/build # include py core make definitions include $(SRCDIR_MP)/py/mkenv.mk # sources # ===================================== BUILD_MP = $(BUILD)/$(SRCDIR_MP) BUILD_FW = $(BUILD)/$(SRCDIR_FW) BUILD_HDR = $(BUILD)/genhdr CFLAGS_MOD += \ -I$(SRCDIR_FW)/extmod/modtrezorcrypto/trezor-crypto \ -I$(SRCDIR_FW)/extmod/modtrezorcrypto/trezor-crypto/ed25519-donna \ -DAES_128 \ -DAES_192 \ -DUSE_KECCAK=1 \ -DED25519_NO_PRECOMP=1 \ -Wno-sequence-point # OBJ vendor/micropython OBJ_MICROPYTHON += $(addprefix $(BUILD_MP)/,\ lib/libc/string0.o \ stmhal/startup_stm32.o \ ) # OBJ vendor/micropython OBJ_STMHAL += $(addprefix $(BUILD_MP)/,\ stmhal/hal/f4/src/stm32f4xx_hal_adc_ex.o \ stmhal/hal/f4/src/stm32f4xx_hal_adc.o \ stmhal/hal/f4/src/stm32f4xx_hal_can.o \ stmhal/hal/f4/src/stm32f4xx_hal_cortex.o \ stmhal/hal/f4/src/stm32f4xx_hal_dac_ex.o \ stmhal/hal/f4/src/stm32f4xx_hal_dac.o \ stmhal/hal/f4/src/stm32f4xx_hal_dma.o \ stmhal/hal/f4/src/stm32f4xx_hal_flash_ex.o \ stmhal/hal/f4/src/stm32f4xx_hal_flash.o \ stmhal/hal/f4/src/stm32f4xx_hal_gpio.o \ stmhal/hal/f4/src/stm32f4xx_hal_i2c.o \ stmhal/hal/f4/src/stm32f4xx_hal_pcd_ex.o \ stmhal/hal/f4/src/stm32f4xx_hal_pcd.o \ stmhal/hal/f4/src/stm32f4xx_hal_pwr_ex.o \ stmhal/hal/f4/src/stm32f4xx_hal_pwr.o \ stmhal/hal/f4/src/stm32f4xx_hal_rcc_ex.o \ stmhal/hal/f4/src/stm32f4xx_hal_rcc.o \ stmhal/hal/f4/src/stm32f4xx_hal_rng.o \ stmhal/hal/f4/src/stm32f4xx_hal_rtc_ex.o \ stmhal/hal/f4/src/stm32f4xx_hal_rtc.o \ stmhal/hal/f4/src/stm32f4xx_hal_sd.o \ stmhal/hal/f4/src/stm32f4xx_hal_spi.o \ stmhal/hal/f4/src/stm32f4xx_hal_tim_ex.o \ stmhal/hal/f4/src/stm32f4xx_hal_tim.o \ stmhal/hal/f4/src/stm32f4xx_hal_uart.o \ stmhal/hal/f4/src/stm32f4xx_hal.o \ stmhal/hal/f4/src/stm32f4xx_ll_sdmmc.o \ stmhal/hal/f4/src/stm32f4xx_ll_usb.o \ ) # OBJ micropython/ OBJ_BOOTLOADER += $(addprefix $(BUILD_FW)/, \ bootloader/header.o \ bootloader/main.o \ bootloader/messages.o \ bootloader/protobuf.o \ extmod/modtrezorcrypto/trezor-crypto/ed25519-donna/ed25519.o \ extmod/modtrezorcrypto/trezor-crypto/blake2s.o \ extmod/modtrezorcrypto/trezor-crypto/sha2.o \ extmod/modtrezorui/display.o \ extmod/modtrezorui/inflate.o \ extmod/modtrezorui/font_bitmap.o \ extmod/modtrezorui/font_roboto_bold_20.o \ ) CFLAGS_MOD += \ -DTREZOR_FONT_MONO_DISABLE=1 \ -DTREZOR_FONT_NORMAL_DISABLE=1 \ OBJ_TREZORHAL += $(addprefix $(BUILD_FW)/, \ trezorhal/common.o \ trezorhal/image.o \ trezorhal/flash.o \ trezorhal/mini_printf.o \ trezorhal/stm32_it.o \ trezorhal/stm32_system.o \ trezorhal/touch.o \ trezorhal/usb.o \ trezorhal/usbd_conf.o \ trezorhal/usbd_core.o \ trezorhal/usbd_ctlreq.o \ trezorhal/usbd_ioreq.o \ trezorhal/hal/stm32f4xx_hal_sram.o \ trezorhal/hal/stm32f4xx_ll_fsmc.o \ ) OBJ = $(OBJ_MICROPYTHON) $(OBJ_STMHAL) $(OBJ_TREZORHAL) OBJ += $(OBJ_BOOTLOADER) # comp flags # ===================================== CROSS_COMPILE = arm-none-eabi- INC += -I. INC += -I$(SRCDIR_FW)/$(PROJECT) INC += -I$(SRCDIR_FW)/extmod/modtrezorui INC += -I$(SRCDIR_FW)/trezorhal INC += -I$(SRCDIR_FW)/trezorhal/hal INC += -I$(SRCDIR_MP) INC += -I$(SRCDIR_MP)/stmhal INC += -I$(SRCDIR_MP)/stmhal/cmsis INC += -I$(SRCDIR_MP)/stmhal/hal/f4/inc INC += -I$(SRCDIR_MP)/lib/cmsis/inc INC += -I$(BUILD) ifeq ($(DEBUG), 1) CFLAGS += -Os -g3 else CFLAGS += -Os -DNDEBUG endif CFLAGS += $(INC) $(CFLAGS_MOD) $(CFLAGS_EXTRA) CFLAGS += -std=gnu99 -nostdlib -Wall -Werror -Wdouble-promotion -Wpointer-arith CFLAGS += -mthumb -mtune=cortex-m4 -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fsingle-precision-constant CFLAGS += -DSTM32F405xx -DMCU_SERIES_F4 CFLAGS += -DSTM32_HAL_H='' CFLAGS += -DTREZOR_STM32 LIBS = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name) LDFLAGS = -nostdlib -T $(SRCDIR_FW)/$(PROJECT)/memory.ld -Map=$@.map --cref # remove uncalled code from the final image CFLAGS += -fdata-sections -ffunction-sections LDFLAGS += --gc-sections # comp rules # ===================================== all: $(BUILD)/$(PROJECT).bin $(BUILD)/$(PROJECT).elf: $(OBJ) $(ECHO) "LINK $@" $(Q)$(LD) $(LDFLAGS) -o $@ $^ $(LIBS) $(Q)$(SIZE) $@ $(BUILD)/$(PROJECT).bin: $(BUILD)/$(PROJECT).elf $(Q)$(OBJCOPY) -O binary -j .header -j .flash -j .data $^ $(BUILD)/$(PROJECT).bin $(BUILD)/%.o: %.S $(ECHO) "CC $<" $(Q)$(CC) $(CFLAGS) -c -o $@ $< $(BUILD)/%.o: %.s $(ECHO) "AS $<" $(Q)$(AS) -o $@ $< $(BUILD)/%.o: %.c $(ECHO) "CC $<" $(Q)$(CC) $(CFLAGS) -c -MD -o $@ $< OBJ_DIRS = $(sort $(dir $(OBJ))) $(OBJ): | $(OBJ_DIRS) $(OBJ_DIRS) $(BUILD_HDR): $(MKDIR) -p $@ $(OBJ): | $(BUILD_HDR)/qstrdefs.generated.h $(BUILD_HDR)/qstrdefs.generated.h: | $(BUILD_HDR) touch $(BUILD_HDR)/qstrdefs.generated.h clean: $(RM) -rf $(BUILD) .PHONY: all clean