From c397ca3aeb507b3030c0870e81f75d696cbd4f38 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Thu, 24 Dec 2020 22:08:00 +0200 Subject: [PATCH] Move main Makefile to port Makefile(s) --- src/Makefile | 453 +------------------ src/omv/ports/stm32/omv_port.mk | 629 ++++++++++++++++++++++++++ src/omv/ports/stm32/omv_portconfig.mk | 191 -------- 3 files changed, 634 insertions(+), 639 deletions(-) create mode 100644 src/omv/ports/stm32/omv_port.mk delete mode 100644 src/omv/ports/stm32/omv_portconfig.mk diff --git a/src/Makefile b/src/Makefile index fff0a61fb..e62d1a81b 100755 --- a/src/Makefile +++ b/src/Makefile @@ -87,457 +87,14 @@ ifeq ($(FB_ALLOC_STATS), 1) CFLAGS += -DFB_ALLOC_STATS endif -# include this first to set the port +# Include the board config to set the port. include $(OMV_BOARD_CONFIG_DIR)/omv_boardconfig.mk -include $(OMV_DIR)/ports/$(PORT)/omv_portconfig.mk + +# MicroPython board config. #include $(MP_BOARD_CONFIG_DIR)/mpconfigboard.mk -# Compiler Flags -CFLAGS += -std=gnu99 -Wall -Werror -Warray-bounds -mthumb -nostartfiles -fdata-sections -ffunction-sections -CFLAGS += -D$(MCU) -D$(CFLAGS_MCU) -D$(ARM_MATH) -DARM_NN_TRUNCATE\ - -fsingle-precision-constant -Wdouble-promotion -mcpu=$(CPU) -mtune=$(CPU) -mfpu=$(FPU) -mfloat-abi=hard -CFLAGS += -D__FPU_PRESENT=1 -D__VFP_FP__ -DUSE_USB_FS -DUSE_DEVICE_MODE -DUSE_USB_OTG_ID=0 -DHSE_VALUE=$(OMV_HSE_VALUE)\ - -D$(TARGET) -DVECT_TAB_OFFSET=$(VECT_TAB_OFFSET) -DMAIN_APP_ADDR=$(MAIN_APP_ADDR) $(OMV_PORT_CFLAGS) -CFLAGS += $(OMV_BOARD_EXTRA_CFLAGS) - -HAL_CFLAGS += -I$(TOP_DIR)/$(CMSIS_DIR)/include/ -HAL_CFLAGS += -I$(TOP_DIR)/$(HAL_DIR)/include/ -HAL_CFLAGS += $(OMV_PORT_HAL_CFLAGS) - -MPY_CFLAGS += -I$(MP_BOARD_CONFIG_DIR) -MPY_CFLAGS += -I$(BUILD)/$(MICROPY_DIR)/ -MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/ -MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/py/ -MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/lib/mp-readline -MPY_CFLAGS += $(OMV_PORT_MPY_CFLAGS) - -# In addition to CFLAGS, the following options are needed to set varilables -# in MicroPython's Makefile, to enable or disable compiling additional modules. -MICROPY_ARGS = BOARD=$(TARGET) DEBUG=$(DEBUG) QSTR_DEFS="$(OMV_QSTR_DEFS)" MPY_LIB_DIR=$(MPY_LIB_DIR) - -ifeq ($(MICROPY_PY_WINC1500), 1) -MPY_CFLAGS += -DMICROPY_PY_WINC1500=1 -MICROPY_ARGS += MICROPY_PY_WINC1500=1 -endif -ifeq ($(MICROPY_PY_IMU), 1) -MPY_CFLAGS += -DMICROPY_PY_IMU=1 -MICROPY_ARGS += MICROPY_PY_IMU=1 -endif -ifeq ($(MICROPY_PY_ULAB), 1) -MPY_CFLAGS += -DMICROPY_PY_ULAB=1 -MICROPY_ARGS += MICROPY_PY_ULAB=1 -endif -ifeq ($(MICROPY_PY_LWIP), 1) -MPY_CFLAGS += -DMICROPY_PY_LWIP=1 -MICROPY_ARGS += MICROPY_PY_LWIP=1 -endif -ifeq ($(MICROPY_PY_NETWORK_CYW43), 1) -MPY_CFLAGS += -DMICROPY_PY_NETWORK_CYW43=1 -MICROPY_ARGS += MICROPY_PY_NETWORK_CYW43=1 -endif -ifeq ($(MICROPY_PY_AUDIO), 1) -MPY_CFLAGS += -DMICROPY_PY_AUDIO=1 -MICROPY_ARGS += MICROPY_PY_AUDIO=1 -endif -ifeq ($(MICROPY_PY_MICRO_SPEECH), 1) -MPY_CFLAGS += -DMICROPY_PY_MICRO_SPEECH=1 -MICROPY_ARGS += MICROPY_PY_MICRO_SPEECH=1 -endif - -OMV_CFLAGS += -I$(OMV_BOARD_CONFIG_DIR) -OMV_CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/ -OMV_CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/alloc/ -OMV_CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/common/ -OMV_CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/imlib/ -OMV_CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/modules/ -OMV_CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/sensors/ -OMV_CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/ports/$(PORT)/ -OMV_CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/ports/$(PORT)/modules/ - -OMV_CFLAGS += -I$(TOP_DIR)/$(LEPTON_DIR)/include/ -OMV_CFLAGS += -I$(TOP_DIR)/$(MLX_DIR)/include/ -OMV_CFLAGS += -I$(TOP_DIR)/$(LSM6DS3_DIR)/include/ -OMV_CFLAGS += -I$(TOP_DIR)/$(TENSORFLOW_DIR)/$(CPU)/ -OMV_CFLAGS += -I$(TOP_DIR)/$(WINC1500_DIR)/include/ -OMV_CFLAGS += -I$(TOP_DIR)/$(LIBPDM_DIR)/ - -ifeq ($(OMV_ENABLE_BL), 1) -BL_CFLAGS := $(CFLAGS) $(HAL_CFLAGS) -BL_CFLAGS += -I$(OMV_BOARD_CONFIG_DIR) -BL_CFLAGS += -I$(TOP_DIR)/$(BOOTLDR_DIR)/include/ -# Linker Flags -BL_LDFLAGS = -mcpu=$(CPU) -mabi=aapcs-linux -mthumb -mfpu=$(FPU) -mfloat-abi=hard\ - -nostdlib -Wl,--gc-sections -Wl,-T$(BUILD)/$(BOOTLDR_DIR)/stm32fxxx.lds -endif - -ifeq ($(OMV_ENABLE_UVC), 1) -UVC_CFLAGS := $(CFLAGS) $(HAL_CFLAGS) -UVC_CFLAGS += -I$(OMV_BOARD_CONFIG_DIR) -UVC_CFLAGS += -I$(TOP_DIR)/$(UVC_DIR)/include/ -UVC_CFLAGS += $(OMV_CFLAGS) $(MPY_CFLAGS) -# Linker Flags -UVC_LDFLAGS = -mcpu=$(CPU) -mabi=aapcs-linux -mthumb -mfpu=$(FPU) -mfloat-abi=hard\ - -nostdlib -Wl,--gc-sections -Wl,-T$(BUILD)/$(UVC_DIR)/stm32fxxx.lds -endif - -CFLAGS += $(HAL_CFLAGS) $(MPY_CFLAGS) $(OMV_CFLAGS) - -# Linker Flags -LDFLAGS = -mcpu=$(CPU) -mabi=aapcs-linux -mthumb -mfpu=$(FPU) -mfloat-abi=hard\ - -nostdlib -Wl,--gc-sections -Wl,-T$(BUILD)/$(LDSCRIPT).lds - -#------------- Libraries ----------------# -LIBS += $(TOP_DIR)/$(TENSORFLOW_DIR)/$(CPU)/libtf*.a -ifeq ($(MICROPY_PY_AUDIO), 1) -LIBS += $(TOP_DIR)/$(LIBPDM_DIR)/libPDMFilter_CM7_GCC_wc32.a -endif - -#------------- Firmware Objects ----------------# -FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/CommonTables/*.o) -FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/FastMathFunctions/*.o) -FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/MatrixFunctions/*.o) -FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/nn/ActivationFunctions/*.o) -FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/nn/FullyConnectedFunctions/*.o) -FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/nn/NNSupportFunctions/*.o) -FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/nn/PoolingFunctions/*.o) -FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/nn/SoftmaxFunctions/*.o) -ifeq ($(CUBEAI),) -# Conflicts with NetworkRuntime library. -FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/nn/ConvolutionFunctions/*.o) -endif - -FIRM_OBJ += $(wildcard $(BUILD)/$(HAL_DIR)/src/*.o) -FIRM_OBJ += $(wildcard $(BUILD)/$(LEPTON_DIR)/src/*.o) -FIRM_OBJ += $(wildcard $(BUILD)/$(MLX_DIR)/src/*.o) -ifeq ($(MICROPY_PY_IMU), 1) -FIRM_OBJ += $(wildcard $(BUILD)/$(LSM6DS3_DIR)/src/*.o) -endif -ifeq ($(MICROPY_PY_WINC1500), 1) -FIRM_OBJ += $(wildcard $(BUILD)/$(WINC1500_DIR)/src/*.o) -endif - -#------------- OpenMV Objects ----------------# -FIRM_OBJ += $(addprefix $(BUILD)/$(CMSIS_DIR)/src/, \ - $(STARTUP).o \ - $(SYSTEM).o \ - ) - -FIRM_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/alloc/, \ - xalloc.o \ - fb_alloc.o \ - umm_malloc.o \ - ) - -FIRM_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/common/, \ - array.o \ - ff_wrapper.o \ - ini.o \ - ringbuf.o \ - trace.o \ - mutex.o \ - ) - -FIRM_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/sensors/, \ - ov2640.o \ - ov5640.o \ - ov7690.o \ - ov7725.o \ - ov9650.o \ - mt9v034.o \ - lepton.o \ - hm01b0.o \ - ) - -FIRM_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/modules/, \ - py_clock.o \ - py_gif.o \ - py_helper.o \ - py_image.o \ - py_mjpeg.o \ - py_omv.o \ - py_sensor.o \ - py_tf.o \ - ) - -FIRM_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/imlib/, \ - agast.o \ - apriltag.o \ - binary.o \ - blob.o \ - bmp.o \ - clahe.o \ - collections.o \ - dmtx.o \ - draw.o \ - edge.o \ - eye.o \ - fast.o \ - fft.o \ - filter.o \ - fmath.o \ - font.o \ - framebuffer.o \ - fsort.o \ - gif.o \ - haar.o \ - hog.o \ - hough.o \ - imlib.o \ - integral.o \ - integral_mw.o \ - jpeg.o \ - kmeans.o \ - lab_tab.o \ - lbp.o \ - line.o \ - lsd.o \ - mathop.o \ - mjpeg.o \ - orb.o \ - phasecorrelation.o \ - point.o \ - pool.o \ - ppm.o \ - qrcode.o \ - qsort.o \ - rainbow_tab.o \ - rectangle.o \ - selective_search.o \ - sincos_tab.o \ - stats.o \ - template.o \ - xyz_tab.o \ - yuv_tab.o \ - zbar.o \ - ) - -FIRM_OBJ += $(wildcard $(BUILD)/$(OMV_DIR)/ports/$(PORT)/*.o) -FIRM_OBJ += $(wildcard $(BUILD)/$(OMV_DIR)/ports/$(PORT)/modules/*.o) - -#------------- MicroPy Objects -------------------# -FIRM_OBJ += $(wildcard $(BUILD)/$(MICROPY_DIR)/py/*.o) -FIRM_OBJ += $(OMV_PORT_MPY_OBJ) -FIRM_OBJ += $(wildcard $(BUILD)/$(MICROPY_DIR)/boards/$(TARGET)/*.o) - -ifeq ($(MICROPY_PY_ULAB), 1) -FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/extmod/ulab/,\ - code/fft.o \ - code/linalg.o \ - code/ndarray.o \ - code/numerical.o \ - code/poly.o \ - code/ulab.o \ - code/vectorise.o \ - code/create.o \ - code/approx.o \ - code/filter.o \ - code/compare.o \ - code/extras.o \ - ) -endif - -ifeq ($(MICROPY_PY_LWIP), 1) -FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/,\ - sdio.o \ - lib/lwip/src/core/*.o \ - lib/lwip/src/core/*/*.o \ - lib/lwip/src/netif/*.o \ - lib/lwip/src/apps/*/*.o \ - extmod/modlwip.o \ - extmod/moduwebsocket.o \ - extmod/modwebrepl.o \ - ) -endif - -ifeq ($(MICROPY_PY_NETWORK_CYW43), 1) -FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/,\ - drivers/cyw43/*.o \ - extmod/network_cyw43.o \ - ) -LIBS += $(MICROPY_DIR)/drivers/cyw43/libcyw43.a -endif - -#------------- CubeAI Objects -------------------# -ifeq ($(CUBEAI), 1) -include $(TOP_DIR)/stm32cubeai/cube.mk -endif - -ifeq ($(OMV_ENABLE_BL), 1) -BOOTLOADER = bootloader -# Bootloader object files -BOOT_OBJ += $(wildcard $(BUILD)/$(BOOTLDR_DIR)/src/*.o) -BOOT_OBJ += $(wildcard $(BUILD)/$(HAL_DIR)/src/*.o) -BOOT_OBJ += $(addprefix $(BUILD)/$(CMSIS_DIR)/src/,\ - $(STARTUP).o \ - $(SYSTEM).o \ - ) -endif - -ifeq ($(OMV_ENABLE_UVC), 1) -UVC = uvc -# UVC object files -UVC_OBJ += $(wildcard $(BUILD)/$(UVC_DIR)/src/*.o) -UVC_OBJ += $(wildcard $(BUILD)/$(HAL_DIR)/src/*.o) -UVC_OBJ += $(addprefix $(BUILD)/$(CMSIS_DIR)/src/,\ - $(STARTUP).o \ - $(SYSTEM).o \ - ) - -UVC_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/alloc/, \ - fb_alloc.o \ - ) - -UVC_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/common/, \ - array.o \ - trace.o \ - mutex.o \ - ) - -UVC_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/sensors/, \ - ov2640.o \ - ov5640.o \ - ov7690.o \ - ov7725.o \ - ov9650.o \ - mt9v034.o \ - lepton.o \ - hm01b0.o \ - ) - -UVC_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/imlib/,\ - lab_tab.o \ - xyz_tab.o \ - yuv_tab.o \ - rainbow_tab.o \ - jpeg.o \ - fmath.o \ - imlib.o \ - framebuffer.o \ - ) - -UVC_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/ports/stm32/,\ - sensor.o \ - stm32fxxx_hal_msp.o \ - soft_i2c.o \ - cambus.o \ - ) - -UVC_OBJ += $(wildcard $(BUILD)/$(LEPTON_DIR)/src/*.o) -UVC_OBJ += $(wildcard $(BUILD)/$(MLX_DIR)/src/*.o) -ifeq ($(MICROPY_PY_IMU), 1) -UVC_OBJ += $(wildcard $(BUILD)/$(LSM6DS3_DIR)/src/*.o) -endif -endif - -################################################### -#Export Variables -export Q -export CC -export AS -export LD -export AR -export SIZE -export OBJCOPY -export OBJDUMP -export MKDIR -export ECHO -export CFLAGS -export LDFLAGS -export TOP_DIR -export BUILD -export TARGET -export STARTUP -export SYSTEM -export FROZEN_MANIFEST -export PORT -################################################### -all: $(OPENMV) - -$(BUILD): - $(MKDIR) -p $@ - -$(FW_DIR): - $(MKDIR) -p $@ - -FIRMWARE_OBJS: | $(BUILD) $(FW_DIR) - $(MAKE) -C $(CMSIS_DIR) BUILD=$(BUILD)/$(CMSIS_DIR) CFLAGS="$(CFLAGS) -fno-strict-aliasing -MMD" - $(MAKE) -C $(MICROPY_DIR)/ports/$(PORT) BUILD=$(BUILD)/$(MICROPY_DIR) $(MICROPY_ARGS) - $(MAKE) -C $(HAL_DIR) BUILD=$(BUILD)/$(HAL_DIR) CFLAGS="$(CFLAGS) -MMD" - $(MAKE) -C $(LEPTON_DIR) BUILD=$(BUILD)/$(LEPTON_DIR) CFLAGS="$(CFLAGS) -MMD" - $(MAKE) -C $(MLX_DIR) BUILD=$(BUILD)/$(MLX_DIR) CFLAGS="$(CFLAGS) -MMD" -ifeq ($(MICROPY_PY_IMU), 1) - $(MAKE) -C $(LSM6DS3_DIR) BUILD=$(BUILD)/$(LSM6DS3_DIR) CFLAGS="$(CFLAGS) -MMD" -endif -ifeq ($(MICROPY_PY_WINC1500), 1) - $(MAKE) -C $(WINC1500_DIR) BUILD=$(BUILD)/$(WINC1500_DIR) CFLAGS="$(CFLAGS) -MMD" -endif - $(MAKE) -C $(OMV_DIR) BUILD=$(BUILD)/$(OMV_DIR) CFLAGS="$(CFLAGS) -MMD" -ifeq ($(CUBEAI), 1) - $(MAKE) -C $(CUBEAI_DIR) BUILD=$(BUILD)/$(CUBEAI_DIR) CFLAGS="$(CFLAGS) -fno-strict-aliasing -MMD" -endif -ifeq ($(OMV_ENABLE_UVC), 1) -UVC_OBJS: FIRMWARE_OBJS - $(MAKE) -C $(UVC_DIR) BUILD=$(BUILD)/$(UVC_DIR) CFLAGS="$(UVC_CFLAGS) -MMD" -endif -ifeq ($(OMV_ENABLE_BL), 1) -BOOTLOADER_OBJS: FIRMWARE_OBJS - $(MAKE) -C $(BOOTLDR_DIR) BUILD=$(BUILD)/$(BOOTLDR_DIR) CFLAGS="$(BL_CFLAGS) -MMD" -endif - -# This target generates the main/app firmware image located at 0x08010000 -$(FIRMWARE): FIRMWARE_OBJS - $(CPP) -P -E -I$(OMV_BOARD_CONFIG_DIR) $(OMV_DIR)/ports/$(PORT)/$(LDSCRIPT).ld.S > $(BUILD)/$(LDSCRIPT).lds - $(CC) $(LDFLAGS) $(FIRM_OBJ) -o $(FW_DIR)/$(FIRMWARE).elf $(LIBS) -lgcc - $(OBJCOPY) -Obinary -R .big_const* $(FW_DIR)/$(FIRMWARE).elf $(FW_DIR)/$(FIRMWARE).bin - $(PYTHON) $(MKDFU) -D $(DFU_DEVICE) -b $(MAIN_APP_ADDR):$(FW_DIR)/$(FIRMWARE).bin $(FW_DIR)/$(FIRMWARE).dfu - -ifeq ($(OMV_ENABLE_BL), 1) -# This target generates the bootloader. -$(BOOTLOADER): FIRMWARE_OBJS BOOTLOADER_OBJS - $(CPP) -P -E -I$(OMV_BOARD_CONFIG_DIR) $(BOOTLDR_DIR)/stm32fxxx.ld.S > $(BUILD)/$(BOOTLDR_DIR)/stm32fxxx.lds - $(CC) $(BL_LDFLAGS) $(BOOT_OBJ) -o $(FW_DIR)/$(BOOTLOADER).elf -lgcc - $(OBJCOPY) -Obinary $(FW_DIR)/$(BOOTLOADER).elf $(FW_DIR)/$(BOOTLOADER).bin - $(PYTHON) $(MKDFU) -D $(DFU_DEVICE) -b 0x08000000:$(FW_DIR)/$(BOOTLOADER).bin $(FW_DIR)/$(BOOTLOADER).dfu -endif - -ifeq ($(OMV_ENABLE_UVC), 1) -# This target generates the UVC firmware. -$(UVC): FIRMWARE_OBJS UVC_OBJS - $(CPP) -P -E -I$(OMV_BOARD_CONFIG_DIR) $(UVC_DIR)/stm32fxxx.ld.S > $(BUILD)/$(UVC_DIR)/stm32fxxx.lds - $(CC) $(UVC_LDFLAGS) $(UVC_OBJ) -o $(FW_DIR)/$(UVC).elf -lgcc - $(OBJCOPY) -Obinary $(FW_DIR)/$(UVC).elf $(FW_DIR)/$(UVC).bin - $(PYTHON) $(MKDFU) -D $(DFU_DEVICE) -b $(MAIN_APP_ADDR):$(FW_DIR)/$(UVC).bin $(FW_DIR)/$(UVC).dfu -endif - -# This target generates the uvc, bootloader and firmware images. -$(OPENMV): $(BOOTLOADER) $(UVC) $(FIRMWARE) -ifeq ($(OMV_ENABLE_BL), 1) - $(SIZE) $(FW_DIR)/$(BOOTLOADER).elf -endif - $(SIZE) $(FW_DIR)/$(FIRMWARE).elf - -size: -ifeq ($(OMV_ENABLE_BL), 1) - $(SIZE) --format=SysV $(FW_DIR)/$(BOOTLOADER).elf -endif - $(SIZE) --format=SysV $(FW_DIR)/$(FIRMWARE).elf +# Include the port Makefile. +include $(OMV_DIR)/ports/$(PORT)/omv_port.mk clean: $(RM) -fr $(BUILD) - -# Flash the bootloader -flash_boot:: - $(PYDFU) -u $(FW_DIR)/$(BOOTLOADER).dfu - -# Flash the main firmware image -flash_image:: - $(PYDFU) -u $(FW_DIR)/$(FIRMWARE).dfu - -# Flash the bootloader using dfu_util -flash_boot_dfu_util:: - dfu-util -a 0 -d $(DFU_DEVICE) -D $(FW_DIR)/$(BOOTLOADER).dfu - -# Flash the main firmware image using dfu_util -flash_image_dfu_util:: - dfu-util -a 0 -d $(DFU_DEVICE) -D $(FW_DIR)/$(FIRMWARE).dfu - diff --git a/src/omv/ports/stm32/omv_port.mk b/src/omv/ports/stm32/omv_port.mk new file mode 100644 index 000000000..c18f46a8d --- /dev/null +++ b/src/omv/ports/stm32/omv_port.mk @@ -0,0 +1,629 @@ +# Set startup and system files based on MCU. +SYSTEM ?= st/system_stm32fxxx +STARTUP ?= st/startup_$(shell echo $(MCU) | tr '[:upper:]' '[:lower:]') +LDSCRIPT ?= stm32fxxx + +# Compiler Flags +CFLAGS += -std=gnu99 -Wall -Werror -Warray-bounds -mthumb -nostartfiles -fdata-sections -ffunction-sections +CFLAGS += -D$(MCU) -D$(CFLAGS_MCU) -D$(ARM_MATH) -DARM_NN_TRUNCATE\ + -fsingle-precision-constant -Wdouble-promotion -mcpu=$(CPU) -mtune=$(CPU) -mfpu=$(FPU) -mfloat-abi=hard +CFLAGS += -D__FPU_PRESENT=1 -D__VFP_FP__ -DUSE_USB_FS -DUSE_DEVICE_MODE -DUSE_USB_OTG_ID=0 -DHSE_VALUE=$(OMV_HSE_VALUE)\ + -D$(TARGET) -DVECT_TAB_OFFSET=$(VECT_TAB_OFFSET) -DMAIN_APP_ADDR=$(MAIN_APP_ADDR) -DSTM32_HAL_H=$(HAL_INC) +CFLAGS += $(OMV_BOARD_EXTRA_CFLAGS) + +HAL_CFLAGS += -I$(TOP_DIR)/$(CMSIS_DIR)/include/ +HAL_CFLAGS += -I$(TOP_DIR)/$(CMSIS_DIR)/include/st +HAL_CFLAGS += -I$(TOP_DIR)/$(HAL_DIR)/include/ +HAL_CFLAGS += -I$(TOP_DIR)/$(HAL_DIR)/include/Legacy/ + +MPY_CFLAGS += -I$(MP_BOARD_CONFIG_DIR) +MPY_CFLAGS += -I$(BUILD)/$(MICROPY_DIR)/ +MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/ +MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/py/ +MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/lib/mp-readline +MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/lib/oofatfs +MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/lib/lwip/src/include/ +MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/ports/stm32/ +MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/ports/stm32/usbdev/core/inc/ +MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/ports/stm32/usbdev/class/inc/ +MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/ports/stm32/lwip_inc/ + +# In addition to CFLAGS, the following options are needed to set varilables +# in MicroPython's Makefile, to enable or disable compiling additional modules. +MICROPY_ARGS = BOARD=$(TARGET) DEBUG=$(DEBUG) QSTR_DEFS="$(OMV_QSTR_DEFS)" MPY_LIB_DIR=$(MPY_LIB_DIR) + +ifeq ($(MICROPY_PY_WINC1500), 1) +MPY_CFLAGS += -DMICROPY_PY_WINC1500=1 +MICROPY_ARGS += MICROPY_PY_WINC1500=1 +endif +ifeq ($(MICROPY_PY_IMU), 1) +MPY_CFLAGS += -DMICROPY_PY_IMU=1 +MICROPY_ARGS += MICROPY_PY_IMU=1 +endif +ifeq ($(MICROPY_PY_ULAB), 1) +MPY_CFLAGS += -DMICROPY_PY_ULAB=1 +MICROPY_ARGS += MICROPY_PY_ULAB=1 +endif +ifeq ($(MICROPY_PY_LWIP), 1) +MPY_CFLAGS += -DMICROPY_PY_LWIP=1 +MICROPY_ARGS += MICROPY_PY_LWIP=1 +endif +ifeq ($(MICROPY_PY_NETWORK_CYW43), 1) +MPY_CFLAGS += -DMICROPY_PY_NETWORK_CYW43=1 +MICROPY_ARGS += MICROPY_PY_NETWORK_CYW43=1 +endif +ifeq ($(MICROPY_PY_AUDIO), 1) +MPY_CFLAGS += -DMICROPY_PY_AUDIO=1 +MICROPY_ARGS += MICROPY_PY_AUDIO=1 +endif +ifeq ($(MICROPY_PY_MICRO_SPEECH), 1) +MPY_CFLAGS += -DMICROPY_PY_MICRO_SPEECH=1 +MICROPY_ARGS += MICROPY_PY_MICRO_SPEECH=1 +endif + +OMV_CFLAGS += -I$(OMV_BOARD_CONFIG_DIR) +OMV_CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/ +OMV_CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/alloc/ +OMV_CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/common/ +OMV_CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/imlib/ +OMV_CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/modules/ +OMV_CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/sensors/ +OMV_CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/ports/$(PORT)/ +OMV_CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/ports/$(PORT)/modules/ + +OMV_CFLAGS += -I$(TOP_DIR)/$(LEPTON_DIR)/include/ +OMV_CFLAGS += -I$(TOP_DIR)/$(MLX_DIR)/include/ +OMV_CFLAGS += -I$(TOP_DIR)/$(LSM6DS3_DIR)/include/ +OMV_CFLAGS += -I$(TOP_DIR)/$(TENSORFLOW_DIR)/$(CPU)/ +OMV_CFLAGS += -I$(TOP_DIR)/$(WINC1500_DIR)/include/ +OMV_CFLAGS += -I$(TOP_DIR)/$(LIBPDM_DIR)/ + +ifeq ($(OMV_ENABLE_BL), 1) +BL_CFLAGS := $(CFLAGS) $(HAL_CFLAGS) +BL_CFLAGS += -I$(OMV_BOARD_CONFIG_DIR) +BL_CFLAGS += -I$(TOP_DIR)/$(BOOTLDR_DIR)/include/ +# Linker Flags +BL_LDFLAGS = -mcpu=$(CPU) -mabi=aapcs-linux -mthumb -mfpu=$(FPU) -mfloat-abi=hard\ + -nostdlib -Wl,--gc-sections -Wl,-T$(BUILD)/$(BOOTLDR_DIR)/stm32fxxx.lds +endif + +ifeq ($(OMV_ENABLE_UVC), 1) +UVC_CFLAGS := $(CFLAGS) $(HAL_CFLAGS) +UVC_CFLAGS += -I$(OMV_BOARD_CONFIG_DIR) +UVC_CFLAGS += -I$(TOP_DIR)/$(UVC_DIR)/include/ +UVC_CFLAGS += $(OMV_CFLAGS) $(MPY_CFLAGS) +# Linker Flags +UVC_LDFLAGS = -mcpu=$(CPU) -mabi=aapcs-linux -mthumb -mfpu=$(FPU) -mfloat-abi=hard\ + -nostdlib -Wl,--gc-sections -Wl,-T$(BUILD)/$(UVC_DIR)/stm32fxxx.lds +endif + +CFLAGS += $(HAL_CFLAGS) $(MPY_CFLAGS) $(OMV_CFLAGS) + +# Linker Flags +LDFLAGS = -mcpu=$(CPU) -mabi=aapcs-linux -mthumb -mfpu=$(FPU) -mfloat-abi=hard\ + -nostdlib -Wl,--gc-sections -Wl,-T$(BUILD)/$(LDSCRIPT).lds + +#------------- Libraries ----------------# +LIBS += $(TOP_DIR)/$(TENSORFLOW_DIR)/$(CPU)/libtf*.a +ifeq ($(MICROPY_PY_AUDIO), 1) +LIBS += $(TOP_DIR)/$(LIBPDM_DIR)/libPDMFilter_CM7_GCC_wc32.a +endif + +#------------- Firmware Objects ----------------# +FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/CommonTables/*.o) +FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/FastMathFunctions/*.o) +FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/MatrixFunctions/*.o) +FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/nn/ActivationFunctions/*.o) +FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/nn/FullyConnectedFunctions/*.o) +FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/nn/NNSupportFunctions/*.o) +FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/nn/PoolingFunctions/*.o) +FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/nn/SoftmaxFunctions/*.o) +ifeq ($(CUBEAI),) +# Conflicts with NetworkRuntime library. +FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/nn/ConvolutionFunctions/*.o) +endif + +FIRM_OBJ += $(wildcard $(BUILD)/$(HAL_DIR)/src/*.o) +FIRM_OBJ += $(wildcard $(BUILD)/$(LEPTON_DIR)/src/*.o) +FIRM_OBJ += $(wildcard $(BUILD)/$(MLX_DIR)/src/*.o) +ifeq ($(MICROPY_PY_IMU), 1) +FIRM_OBJ += $(wildcard $(BUILD)/$(LSM6DS3_DIR)/src/*.o) +endif +ifeq ($(MICROPY_PY_WINC1500), 1) +FIRM_OBJ += $(wildcard $(BUILD)/$(WINC1500_DIR)/src/*.o) +endif + +#------------- OpenMV Objects ----------------# +FIRM_OBJ += $(addprefix $(BUILD)/$(CMSIS_DIR)/src/, \ + $(STARTUP).o \ + $(SYSTEM).o \ + ) + +FIRM_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/alloc/, \ + xalloc.o \ + fb_alloc.o \ + umm_malloc.o \ + ) + +FIRM_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/common/, \ + array.o \ + ff_wrapper.o \ + ini.o \ + ringbuf.o \ + trace.o \ + mutex.o \ + ) + +FIRM_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/sensors/, \ + ov2640.o \ + ov5640.o \ + ov7690.o \ + ov7725.o \ + ov9650.o \ + mt9v034.o \ + lepton.o \ + hm01b0.o \ + ) + +FIRM_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/modules/, \ + py_clock.o \ + py_gif.o \ + py_helper.o \ + py_image.o \ + py_mjpeg.o \ + py_omv.o \ + py_sensor.o \ + py_tf.o \ + ) + +FIRM_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/imlib/, \ + agast.o \ + apriltag.o \ + binary.o \ + blob.o \ + bmp.o \ + clahe.o \ + collections.o \ + dmtx.o \ + draw.o \ + edge.o \ + eye.o \ + fast.o \ + fft.o \ + filter.o \ + fmath.o \ + font.o \ + framebuffer.o \ + fsort.o \ + gif.o \ + haar.o \ + hog.o \ + hough.o \ + imlib.o \ + integral.o \ + integral_mw.o \ + jpeg.o \ + kmeans.o \ + lab_tab.o \ + lbp.o \ + line.o \ + lsd.o \ + mathop.o \ + mjpeg.o \ + orb.o \ + phasecorrelation.o \ + point.o \ + pool.o \ + ppm.o \ + qrcode.o \ + qsort.o \ + rainbow_tab.o \ + rectangle.o \ + selective_search.o \ + sincos_tab.o \ + stats.o \ + template.o \ + xyz_tab.o \ + yuv_tab.o \ + zbar.o \ + ) + +FIRM_OBJ += $(wildcard $(BUILD)/$(OMV_DIR)/ports/$(PORT)/*.o) +FIRM_OBJ += $(wildcard $(BUILD)/$(OMV_DIR)/ports/$(PORT)/modules/*.o) + +#------------- MicroPy Objects -------------------# +FIRM_OBJ += $(wildcard $(BUILD)/$(MICROPY_DIR)/py/*.o) +FIRM_OBJ += $(wildcard $(BUILD)/$(MICROPY_DIR)/boards/$(TARGET)/*.o) + +FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/,\ + stm32_it.o \ + usbd_conf.o \ + usbd_desc.o \ + usbd_cdc_interface.o \ + usbd_hid_interface.o \ + usbd_msc_interface.o \ + pendsv.o \ + bufhelper.o \ + usb.o \ + eth.o \ + gccollect.o \ + help.o \ + flash.o \ + flashbdev.o \ + spibdev.o \ + storage.o \ + rtc.o \ + irq.o \ + adc.o \ + dac.o \ + dma.o \ + uart.o \ + systick.o \ + powerctrl.o \ + i2c.o \ + pyb_i2c.o \ + spi.o \ + qspi.o \ + pyb_spi.o \ + can.o \ + fdcan.o \ + pyb_can.o \ + pin.o \ + pin_defs_stm32.o \ + pin_named_pins.o \ + pins_$(TARGET).o \ + timer.o \ + servo.o \ + rng.o \ + led.o \ + wdt.o \ + mphalport.o \ + sdcard.o \ + sdram.o \ + fatfs_port.o \ + extint.o \ + modpyb.o \ + modstm.o \ + moduos.o \ + modutime.o \ + modusocket.o \ + network_lan.o \ + modnetwork.o \ + modmachine.o \ + machine_i2c.o \ + machine_spi.o \ + machine_uart.o \ + machine_adc.o \ + machine_timer.o \ + pybthread.o \ + mpthreadport.o \ + posix_helpers.o \ + softtimer.o \ + mbedtls/mbedtls_port.o \ + frozen_content.o \ + ) + +#------------- MicroPy Objects ----------------# +FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/,\ + utils/mpirq.o \ + utils/pyexec.o \ + utils/printf.o \ + utils/interrupt_char.o \ + utils/sys_stdio_mphal.o \ + utils/gchelper_m3.o \ + utils/gchelper_native.o \ + libc/string0.o \ + netutils/*.o \ + timeutils/timeutils.o \ + berkeley-db-1.xx/btree/*.o \ + berkeley-db-1.xx/mpool/*.o \ + embed/abort_.o \ + mp-readline/readline.o \ + ) + +FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/libm/,\ + math.o \ + roundf.o \ + asinfacosf.o \ + atanf.o \ + atan2f.o \ + fmodf.o \ + log1pf.o \ + acoshf.o \ + asinhf.o \ + atanhf.o \ + kf_rem_pio2.o \ + kf_sin.o \ + kf_cos.o \ + kf_tan.o \ + ef_rem_pio2.o \ + erf_lgamma.o \ + sf_sin.o \ + sf_cos.o \ + sf_tan.o \ + sf_frexp.o \ + sf_modf.o \ + sf_ldexp.o \ + sf_erf.o \ + wf_lgamma.o \ + wf_tgamma.o \ + nearbyintf.o \ + thumb_vfp_sqrtf.o \ + ) + +#------------- mbedtls -------------------# +FIRM_OBJ += $(wildcard $(BUILD)/$(MICROPY_DIR)/lib/mbedtls/library/*.o) +FIRM_OBJ += $(wildcard $(BUILD)/$(MICROPY_DIR)/lib/mbedtls_errors/*.o) + +FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/usbdev/, \ + core/src/usbd_core.o \ + core/src/usbd_ctlreq.o \ + core/src/usbd_ioreq.o \ + class/src/usbd_cdc_msc_hid.o \ + class/src/usbd_msc_bot.o \ + class/src/usbd_msc_scsi.o \ + ) + +FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/extmod/,\ + modujson.o \ + modure.o \ + moduzlib.o \ + moduhashlib.o \ + modubinascii.o \ + modurandom.o \ + moduselect.o \ + modutimeq.o \ + moduheapq.o \ + moductypes.o \ + vfs.o \ + vfs_fat.o \ + vfs_fat_file.o \ + vfs_reader.o \ + vfs_fat_diskio.o \ + vfs_blockdev.o \ + virtpin.o \ + machine_mem.o \ + machine_i2c.o \ + machine_spi.o \ + machine_pulse.o \ + machine_signal.o \ + machine_pinbase.o \ + utime_mphal.o \ + modonewire.o \ + uos_dupterm.o \ + modframebuf.o \ + modbtree.o \ + moducryptolib.o \ + modussl_mbedtls.o \ + moduasyncio.o \ + ) + +FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/oofatfs/,\ + ff.o \ + ffunicode.o \ + ) + +FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/drivers/,\ + bus/softspi.o \ + dht/dht.o \ + memory/spiflash.o \ + ) + +ifeq ($(MICROPY_PY_ULAB), 1) +FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/extmod/ulab/,\ + code/fft.o \ + code/linalg.o \ + code/ndarray.o \ + code/numerical.o \ + code/poly.o \ + code/ulab.o \ + code/vectorise.o \ + code/create.o \ + code/approx.o \ + code/filter.o \ + code/compare.o \ + code/extras.o \ + ) +endif + +ifeq ($(MICROPY_PY_LWIP), 1) +FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/,\ + sdio.o \ + lib/lwip/src/core/*.o \ + lib/lwip/src/core/*/*.o \ + lib/lwip/src/netif/*.o \ + lib/lwip/src/apps/*/*.o \ + extmod/modlwip.o \ + extmod/moduwebsocket.o \ + extmod/modwebrepl.o \ + ) +endif + +ifeq ($(MICROPY_PY_NETWORK_CYW43), 1) +FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/,\ + drivers/cyw43/*.o \ + extmod/network_cyw43.o \ + ) +LIBS += $(MICROPY_DIR)/drivers/cyw43/libcyw43.a +endif + +#------------- CubeAI Objects -------------------# +ifeq ($(CUBEAI), 1) +include $(TOP_DIR)/stm32cubeai/cube.mk +endif + +ifeq ($(OMV_ENABLE_BL), 1) +BOOTLOADER = bootloader +# Bootloader object files +BOOT_OBJ += $(wildcard $(BUILD)/$(BOOTLDR_DIR)/src/*.o) +BOOT_OBJ += $(wildcard $(BUILD)/$(HAL_DIR)/src/*.o) +BOOT_OBJ += $(addprefix $(BUILD)/$(CMSIS_DIR)/src/,\ + $(STARTUP).o \ + $(SYSTEM).o \ + ) +endif + +ifeq ($(OMV_ENABLE_UVC), 1) +UVC = uvc +# UVC object files +UVC_OBJ += $(wildcard $(BUILD)/$(UVC_DIR)/src/*.o) +UVC_OBJ += $(wildcard $(BUILD)/$(HAL_DIR)/src/*.o) +UVC_OBJ += $(addprefix $(BUILD)/$(CMSIS_DIR)/src/,\ + $(STARTUP).o \ + $(SYSTEM).o \ + ) + +UVC_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/alloc/, \ + fb_alloc.o \ + ) + +UVC_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/common/, \ + array.o \ + trace.o \ + mutex.o \ + ) + +UVC_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/sensors/, \ + ov2640.o \ + ov5640.o \ + ov7690.o \ + ov7725.o \ + ov9650.o \ + mt9v034.o \ + lepton.o \ + hm01b0.o \ + ) + +UVC_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/imlib/,\ + lab_tab.o \ + xyz_tab.o \ + yuv_tab.o \ + rainbow_tab.o \ + jpeg.o \ + fmath.o \ + imlib.o \ + framebuffer.o \ + ) + +UVC_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/ports/stm32/,\ + sensor.o \ + stm32fxxx_hal_msp.o \ + soft_i2c.o \ + cambus.o \ + ) + +UVC_OBJ += $(wildcard $(BUILD)/$(LEPTON_DIR)/src/*.o) +UVC_OBJ += $(wildcard $(BUILD)/$(MLX_DIR)/src/*.o) +ifeq ($(MICROPY_PY_IMU), 1) +UVC_OBJ += $(wildcard $(BUILD)/$(LSM6DS3_DIR)/src/*.o) +endif +endif + +################################################### +#Export Variables +export Q +export CC +export AS +export LD +export AR +export SIZE +export OBJCOPY +export OBJDUMP +export MKDIR +export ECHO +export CFLAGS +export LDFLAGS +export TOP_DIR +export BUILD +export TARGET +export STARTUP +export SYSTEM +export FROZEN_MANIFEST +export PORT +################################################### +all: $(OPENMV) + +$(BUILD): + $(MKDIR) -p $@ + +$(FW_DIR): + $(MKDIR) -p $@ + +FIRMWARE_OBJS: | $(BUILD) $(FW_DIR) + $(MAKE) -C $(CMSIS_DIR) BUILD=$(BUILD)/$(CMSIS_DIR) CFLAGS="$(CFLAGS) -fno-strict-aliasing -MMD" + $(MAKE) -C $(MICROPY_DIR)/ports/$(PORT) BUILD=$(BUILD)/$(MICROPY_DIR) $(MICROPY_ARGS) + $(MAKE) -C $(HAL_DIR) BUILD=$(BUILD)/$(HAL_DIR) CFLAGS="$(CFLAGS) -MMD" + $(MAKE) -C $(LEPTON_DIR) BUILD=$(BUILD)/$(LEPTON_DIR) CFLAGS="$(CFLAGS) -MMD" + $(MAKE) -C $(MLX_DIR) BUILD=$(BUILD)/$(MLX_DIR) CFLAGS="$(CFLAGS) -MMD" +ifeq ($(MICROPY_PY_IMU), 1) + $(MAKE) -C $(LSM6DS3_DIR) BUILD=$(BUILD)/$(LSM6DS3_DIR) CFLAGS="$(CFLAGS) -MMD" +endif +ifeq ($(MICROPY_PY_WINC1500), 1) + $(MAKE) -C $(WINC1500_DIR) BUILD=$(BUILD)/$(WINC1500_DIR) CFLAGS="$(CFLAGS) -MMD" +endif + $(MAKE) -C $(OMV_DIR) BUILD=$(BUILD)/$(OMV_DIR) CFLAGS="$(CFLAGS) -MMD" +ifeq ($(CUBEAI), 1) + $(MAKE) -C $(CUBEAI_DIR) BUILD=$(BUILD)/$(CUBEAI_DIR) CFLAGS="$(CFLAGS) -fno-strict-aliasing -MMD" +endif +ifeq ($(OMV_ENABLE_UVC), 1) +UVC_OBJS: FIRMWARE_OBJS + $(MAKE) -C $(UVC_DIR) BUILD=$(BUILD)/$(UVC_DIR) CFLAGS="$(UVC_CFLAGS) -MMD" +endif +ifeq ($(OMV_ENABLE_BL), 1) +BOOTLOADER_OBJS: FIRMWARE_OBJS + $(MAKE) -C $(BOOTLDR_DIR) BUILD=$(BUILD)/$(BOOTLDR_DIR) CFLAGS="$(BL_CFLAGS) -MMD" +endif + +# This target generates the main/app firmware image located at 0x08010000 +$(FIRMWARE): FIRMWARE_OBJS + $(CPP) -P -E -I$(OMV_BOARD_CONFIG_DIR) $(OMV_DIR)/ports/$(PORT)/$(LDSCRIPT).ld.S > $(BUILD)/$(LDSCRIPT).lds + $(CC) $(LDFLAGS) $(FIRM_OBJ) -o $(FW_DIR)/$(FIRMWARE).elf $(LIBS) -lgcc + $(OBJCOPY) -Obinary -R .big_const* $(FW_DIR)/$(FIRMWARE).elf $(FW_DIR)/$(FIRMWARE).bin + $(PYTHON) $(MKDFU) -D $(DFU_DEVICE) -b $(MAIN_APP_ADDR):$(FW_DIR)/$(FIRMWARE).bin $(FW_DIR)/$(FIRMWARE).dfu + +ifeq ($(OMV_ENABLE_BL), 1) +# This target generates the bootloader. +$(BOOTLOADER): FIRMWARE_OBJS BOOTLOADER_OBJS + $(CPP) -P -E -I$(OMV_BOARD_CONFIG_DIR) $(BOOTLDR_DIR)/stm32fxxx.ld.S > $(BUILD)/$(BOOTLDR_DIR)/stm32fxxx.lds + $(CC) $(BL_LDFLAGS) $(BOOT_OBJ) -o $(FW_DIR)/$(BOOTLOADER).elf -lgcc + $(OBJCOPY) -Obinary $(FW_DIR)/$(BOOTLOADER).elf $(FW_DIR)/$(BOOTLOADER).bin + $(PYTHON) $(MKDFU) -D $(DFU_DEVICE) -b 0x08000000:$(FW_DIR)/$(BOOTLOADER).bin $(FW_DIR)/$(BOOTLOADER).dfu +endif + +ifeq ($(OMV_ENABLE_UVC), 1) +# This target generates the UVC firmware. +$(UVC): FIRMWARE_OBJS UVC_OBJS + $(CPP) -P -E -I$(OMV_BOARD_CONFIG_DIR) $(UVC_DIR)/stm32fxxx.ld.S > $(BUILD)/$(UVC_DIR)/stm32fxxx.lds + $(CC) $(UVC_LDFLAGS) $(UVC_OBJ) -o $(FW_DIR)/$(UVC).elf -lgcc + $(OBJCOPY) -Obinary $(FW_DIR)/$(UVC).elf $(FW_DIR)/$(UVC).bin + $(PYTHON) $(MKDFU) -D $(DFU_DEVICE) -b $(MAIN_APP_ADDR):$(FW_DIR)/$(UVC).bin $(FW_DIR)/$(UVC).dfu +endif + +# This target generates the uvc, bootloader and firmware images. +$(OPENMV): $(BOOTLOADER) $(UVC) $(FIRMWARE) +ifeq ($(OMV_ENABLE_BL), 1) + $(SIZE) $(FW_DIR)/$(BOOTLOADER).elf +endif + $(SIZE) $(FW_DIR)/$(FIRMWARE).elf + +size: +ifeq ($(OMV_ENABLE_BL), 1) + $(SIZE) --format=SysV $(FW_DIR)/$(BOOTLOADER).elf +endif + $(SIZE) --format=SysV $(FW_DIR)/$(FIRMWARE).elf + +# Flash the bootloader +flash_boot:: + $(PYDFU) -u $(FW_DIR)/$(BOOTLOADER).dfu + +# Flash the main firmware image +flash_image:: + $(PYDFU) -u $(FW_DIR)/$(FIRMWARE).dfu + +# Flash the bootloader using dfu_util +flash_boot_dfu_util:: + dfu-util -a 0 -d $(DFU_DEVICE) -D $(FW_DIR)/$(BOOTLOADER).dfu + +# Flash the main firmware image using dfu_util +flash_image_dfu_util:: + dfu-util -a 0 -d $(DFU_DEVICE) -D $(FW_DIR)/$(FIRMWARE).dfu diff --git a/src/omv/ports/stm32/omv_portconfig.mk b/src/omv/ports/stm32/omv_portconfig.mk deleted file mode 100644 index 040f3fbba..000000000 --- a/src/omv/ports/stm32/omv_portconfig.mk +++ /dev/null @@ -1,191 +0,0 @@ -# Set startup and system files based on MCU. -SYSTEM ?= st/system_stm32fxxx -STARTUP ?= st/startup_$(shell echo $(MCU) | tr '[:upper:]' '[:lower:]') -LDSCRIPT ?= stm32fxxx - -OMV_PORT_CFLAGS += -DSTM32_HAL_H=$(HAL_INC) -OMV_PORT_HAL_CFLAGS += -I$(TOP_DIR)/$(CMSIS_DIR)/include/st -OMV_PORT_HAL_CFLAGS += -I$(TOP_DIR)/$(HAL_DIR)/include/Legacy/ - -OMV_PORT_MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/lib/oofatfs -OMV_PORT_MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/lib/lwip/src/include/ -OMV_PORT_MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/ports/stm32/ -OMV_PORT_MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/ports/stm32/usbdev/core/inc/ -OMV_PORT_MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/ports/stm32/usbdev/class/inc/ -OMV_PORT_MPY_CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/ports/stm32/lwip_inc/ - -#------------- MicroPy Objects ----------------# -OMV_PORT_MPY_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/,\ - stm32_it.o \ - usbd_conf.o \ - usbd_desc.o \ - usbd_cdc_interface.o \ - usbd_hid_interface.o \ - usbd_msc_interface.o \ - pendsv.o \ - bufhelper.o \ - usb.o \ - eth.o \ - gccollect.o \ - help.o \ - flash.o \ - flashbdev.o \ - spibdev.o \ - storage.o \ - rtc.o \ - irq.o \ - adc.o \ - dac.o \ - dma.o \ - uart.o \ - systick.o \ - powerctrl.o \ - i2c.o \ - pyb_i2c.o \ - spi.o \ - qspi.o \ - pyb_spi.o \ - can.o \ - fdcan.o \ - pyb_can.o \ - pin.o \ - pin_defs_stm32.o \ - pin_named_pins.o \ - pins_$(TARGET).o \ - timer.o \ - servo.o \ - rng.o \ - led.o \ - wdt.o \ - mphalport.o \ - sdcard.o \ - sdram.o \ - fatfs_port.o \ - extint.o \ - modpyb.o \ - modstm.o \ - moduos.o \ - modutime.o \ - modusocket.o \ - network_lan.o \ - modnetwork.o \ - modmachine.o \ - machine_i2c.o \ - machine_spi.o \ - machine_uart.o \ - machine_adc.o \ - machine_timer.o \ - pybthread.o \ - mpthreadport.o \ - posix_helpers.o \ - softtimer.o \ - mbedtls/mbedtls_port.o \ - frozen_content.o \ - ) - -#------------- MicroPy Objects ----------------# -OMV_PORT_MPY_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/,\ - utils/mpirq.o \ - utils/pyexec.o \ - utils/printf.o \ - utils/interrupt_char.o \ - utils/sys_stdio_mphal.o \ - utils/gchelper_m3.o \ - utils/gchelper_native.o \ - libc/string0.o \ - netutils/*.o \ - timeutils/timeutils.o \ - berkeley-db-1.xx/btree/*.o \ - berkeley-db-1.xx/mpool/*.o \ - embed/abort_.o \ - mp-readline/readline.o \ - ) - -OMV_PORT_MPY_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/libm/,\ - math.o \ - roundf.o \ - asinfacosf.o \ - atanf.o \ - atan2f.o \ - fmodf.o \ - log1pf.o \ - acoshf.o \ - asinhf.o \ - atanhf.o \ - kf_rem_pio2.o \ - kf_sin.o \ - kf_cos.o \ - kf_tan.o \ - ef_rem_pio2.o \ - erf_lgamma.o \ - sf_sin.o \ - sf_cos.o \ - sf_tan.o \ - sf_frexp.o \ - sf_modf.o \ - sf_ldexp.o \ - sf_erf.o \ - wf_lgamma.o \ - wf_tgamma.o \ - nearbyintf.o \ - thumb_vfp_sqrtf.o \ - ) - -#------------- mbedtls -------------------# -OMV_PORT_MPY_OBJ += $(wildcard $(BUILD)/$(MICROPY_DIR)/lib/mbedtls/library/*.o) -OMV_PORT_MPY_OBJ += $(wildcard $(BUILD)/$(MICROPY_DIR)/lib/mbedtls_errors/*.o) - -OMV_PORT_MPY_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/usbdev/, \ - core/src/usbd_core.o \ - core/src/usbd_ctlreq.o \ - core/src/usbd_ioreq.o \ - class/src/usbd_cdc_msc_hid.o \ - class/src/usbd_msc_bot.o \ - class/src/usbd_msc_scsi.o \ - ) - -OMV_PORT_MPY_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/extmod/,\ - modujson.o \ - modure.o \ - moduzlib.o \ - moduhashlib.o \ - modubinascii.o \ - modurandom.o \ - moduselect.o \ - modutimeq.o \ - moduheapq.o \ - moductypes.o \ - vfs.o \ - vfs_fat.o \ - vfs_fat_file.o \ - vfs_reader.o \ - vfs_fat_diskio.o \ - vfs_blockdev.o \ - virtpin.o \ - machine_mem.o \ - machine_i2c.o \ - machine_spi.o \ - machine_pulse.o \ - machine_signal.o \ - machine_pinbase.o \ - utime_mphal.o \ - modonewire.o \ - uos_dupterm.o \ - modframebuf.o \ - modbtree.o \ - moducryptolib.o \ - modussl_mbedtls.o \ - moduasyncio.o \ - ) - -OMV_PORT_MPY_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/oofatfs/,\ - ff.o \ - ffunicode.o \ - ) - -OMV_PORT_MPY_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/drivers/,\ - bus/softspi.o \ - dht/dht.o \ - memory/spiflash.o \ - ) -