mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
399 lines
12 KiB
Makefile
Executable File
399 lines
12 KiB
Makefile
Executable File
BIN = openmv
|
|
BOOT_BIN= bootloader
|
|
CC = arm-none-eabi-gcc
|
|
AS = arm-none-eabi-as
|
|
LD = arm-none-eabi-ld
|
|
AR = arm-none-eabi-ar
|
|
RM = rm
|
|
CCP = arm-none-eabi-cpp
|
|
SIZE = arm-none-eabi-size
|
|
STRIP = arm-none-eabi-strip -s
|
|
OBJCOPY = arm-none-eabi-objcopy
|
|
OBJDUMP = arm-none-eabi-objdump
|
|
PYTHON = python
|
|
DFU = micropython/tools/dfu.py
|
|
MKDIR = mkdir
|
|
ECHO = @echo
|
|
|
|
# Directories
|
|
TOP_DIR=$(shell pwd)
|
|
BUILD=$(TOP_DIR)/build
|
|
CMSIS_DIR=cmsis
|
|
STHAL_DIR=sthal
|
|
STUSB_DIR=stusb
|
|
FATFS_DIR=fatfs
|
|
MICROPY_DIR=micropython
|
|
OMV_DIR=omv
|
|
WINC1500_DIR=winc1500
|
|
BOOT_DIR=bootloader
|
|
|
|
# Additional qstr definitions for OpenMV
|
|
OMV_QSTR_DEFS = $(TOP_DIR)/$(OMV_DIR)/py/qstrdefsomv.h
|
|
|
|
# Target
|
|
TARGET ?= OPENMV2
|
|
FW_DIR=$(TOP_DIR)/../firmware/$(TARGET)
|
|
|
|
# Debugging/Optimization
|
|
ifeq ($(DEBUG), 1)
|
|
CFLAGS += -O0 -ggdb3
|
|
else
|
|
CFLAGS += -O2 -ggdb3 -DNDEBUG
|
|
endif
|
|
|
|
# Verbose
|
|
ifeq ($(V), 1)
|
|
Q =
|
|
else
|
|
Q = @
|
|
endif
|
|
|
|
# Compiler Flags
|
|
CFLAGS += -std=gnu99 -Wall -Werror -mlittle-endian -mthumb -nostartfiles -mabi=aapcs-linux -fdata-sections -ffunction-sections
|
|
CFLAGS += -fsingle-precision-constant -Wdouble-promotion -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
|
|
CFLAGS += -DARM_MATH_CM4 -D__FPU_PRESENT=1 -D__FPU_USED=1 -DUSE_USB_FS -DUSE_DEVICE_MODE -DUSE_USB_OTG_ID=0 -DHSE_VALUE=12000000 -D$(TARGET)
|
|
ifeq ($(TARGET), OPENMV1)
|
|
CFLAGS += -DSTM32F407xx
|
|
else
|
|
CFLAGS += -DSTM32F427xx
|
|
endif
|
|
|
|
CFLAGS += -I. -Iinclude
|
|
CFLAGS += -I$(TOP_DIR)/$(BOOT_DIR)/include/
|
|
CFLAGS += -I$(TOP_DIR)/$(CMSIS_DIR)/include/
|
|
CFLAGS += -I$(TOP_DIR)/$(CMSIS_DIR)/include/st
|
|
CFLAGS += -I$(TOP_DIR)/$(STHAL_DIR)/include/
|
|
CFLAGS += -I$(TOP_DIR)/$(FATFS_DIR)/include/
|
|
|
|
CFLAGS += -I$(BUILD)/$(MICROPY_DIR)/
|
|
CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/
|
|
CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/py/
|
|
CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/lib/mp-readline
|
|
CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/stmhal/
|
|
CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/stmhal/usbdev/core/inc/
|
|
CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/stmhal/usbdev/class/inc/
|
|
CFLAGS += -I$(TOP_DIR)/$(MICROPY_DIR)/stmhal/boards/$(TARGET)/
|
|
|
|
CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/
|
|
CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/py/
|
|
CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/img/
|
|
CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/boards/$(TARGET)/
|
|
CFLAGS += -I$(TOP_DIR)/$(WINC1500_DIR)/include/
|
|
|
|
# Linker Flags
|
|
LDFLAGS = -mcpu=cortex-m4 -mabi=aapcs-linux -mthumb -mlittle-endian -mfloat-abi=hard\
|
|
-mfpu=fpv4-sp-d16 -nostdlib -Wl,--gc-sections -Wl,-T$(BUILD)/stm32f4xx.lds
|
|
|
|
# Linker Flags
|
|
BOOT_LDFLAGS = -mcpu=cortex-m4 -mabi=aapcs-linux -mthumb -mlittle-endian -mfloat-abi=hard\
|
|
-mfpu=fpv4-sp-d16 -nostdlib -Wl,--gc-sections -Wl,-T$(BUILD)/$(BOOT_DIR)/stm32f4xx.lds
|
|
|
|
#------------- Libraries ----------------#
|
|
#OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/st/*.o)
|
|
OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/CommonTables/*.o)
|
|
OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/FastMathFunctions/*.o)
|
|
OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/MatrixFunctions/*.o)
|
|
#OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/ComplexMathFunctions/*.o)
|
|
#OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/ControllerFunctions/*.o)
|
|
#OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/FilteringFunctions/*.o)
|
|
#OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/StatisticsFunctions/*.o)
|
|
#OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/SupportFunctions/*.o)
|
|
#OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/TransformFunctions/*.o)
|
|
OBJ += $(wildcard $(BUILD)/$(STHAL_DIR)/src/*.o)
|
|
OBJ += $(wildcard $(BUILD)/$(FATFS_DIR)/src/*.o)
|
|
OBJ += $(wildcard $(BUILD)/$(FATFS_DIR)/src/option/*.o)
|
|
OBJ += $(wildcard $(BUILD)/$(WINC1500_DIR)/src/*.o)
|
|
|
|
#------------- OpenMV Objects ----------------#
|
|
OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/, \
|
|
main.o \
|
|
xalloc.o \
|
|
fb_alloc.o \
|
|
ff_wrapper.o \
|
|
array.o \
|
|
usbdbg.o \
|
|
sccb.o \
|
|
ov9650.o \
|
|
ov2640.o \
|
|
ov7725.o \
|
|
sensor.o \
|
|
stm32f4xx_hal_msp.o \
|
|
soft_i2c.o \
|
|
mutex.o \
|
|
)
|
|
|
|
ifeq ($(TARGET), OPENMV1)
|
|
OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/, \
|
|
sdcard_spi.o \
|
|
)
|
|
else
|
|
OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/, \
|
|
sdcard_sdio.o \
|
|
)
|
|
endif
|
|
|
|
OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/img/,\
|
|
blob.o \
|
|
fmath.o \
|
|
fsort.o \
|
|
haar.o \
|
|
imlib.o \
|
|
stats.o \
|
|
morph.o \
|
|
integral.o \
|
|
integral_mw.o \
|
|
kmeans.o \
|
|
lab_tab.o \
|
|
xyz_tab.o \
|
|
yuv_tab.o \
|
|
rainbow_tab.o \
|
|
rgb2rgb_tab.o \
|
|
midpoint.o \
|
|
mean.o \
|
|
mode.o \
|
|
median.o \
|
|
point.o \
|
|
rectangle.o \
|
|
bmp.o \
|
|
ppm.o \
|
|
gif.o \
|
|
mjpeg.o \
|
|
fast.o \
|
|
freak.o \
|
|
template.o \
|
|
font.o \
|
|
jpeg.o \
|
|
lbp.o \
|
|
eye.o \
|
|
im_filter.o \
|
|
)
|
|
|
|
OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/py/, \
|
|
py_helper.o \
|
|
py_sensor.o \
|
|
py_image.o \
|
|
py_time.o \
|
|
py_lcd.o \
|
|
py_fir.o \
|
|
py_gif.o \
|
|
py_mjpeg.o \
|
|
py_winc.o \
|
|
)
|
|
|
|
ifeq ($(TARGET), OPENMV1)
|
|
OBJ += $(addprefix $(BUILD)/$(CMSIS_DIR)/src/st/,\
|
|
system_stm32f4xx.o \
|
|
startup_stm32f407xx.o \
|
|
)
|
|
else
|
|
OBJ += $(addprefix $(BUILD)/$(CMSIS_DIR)/src/st/,\
|
|
system_stm32f4xx.o \
|
|
startup_stm32f427xx.o \
|
|
)
|
|
endif
|
|
|
|
#------------- MicroPy Core -------------------#
|
|
OBJ += $(wildcard $(BUILD)/$(MICROPY_DIR)/py/*.o)
|
|
|
|
#------------- MicroPy Objects ----------------#
|
|
OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/,\
|
|
stm32f4xx_it.o \
|
|
usbd_conf.o \
|
|
usbd_desc.o \
|
|
usbd_cdc_interface.o \
|
|
usbd_msc_storage.o \
|
|
pendsv.o \
|
|
bufhelper.o \
|
|
usb.o \
|
|
printf.o \
|
|
gchelper.o \
|
|
gccollect.o \
|
|
pybstdio.o \
|
|
pyexec.o \
|
|
help.o \
|
|
input.o \
|
|
import.o \
|
|
lexerfatfs.o \
|
|
flash.o \
|
|
diskio.o \
|
|
fsusermount.o \
|
|
storage.o \
|
|
file.o \
|
|
rtc.o \
|
|
irq.o \
|
|
adc.o \
|
|
dac.o \
|
|
dma.o \
|
|
uart.o \
|
|
systick.o \
|
|
i2c.o \
|
|
spi.o \
|
|
pin.o \
|
|
pin_defs_stmhal.o \
|
|
pin_named_pins.o \
|
|
pins_$(TARGET).o \
|
|
timer.o \
|
|
servo.o \
|
|
rng.o \
|
|
led.o \
|
|
mphal.o \
|
|
extint.o \
|
|
modpyb.o \
|
|
modstm.o \
|
|
moduos.o \
|
|
modutime.o \
|
|
moduselect.o \
|
|
modusocket.o \
|
|
modnetwork.o \
|
|
)
|
|
|
|
#------------- MicroPy Objects ----------------#
|
|
OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/,\
|
|
libc/string0.o \
|
|
netutils/netutils.o \
|
|
timeutils/timeutils.o \
|
|
)
|
|
|
|
OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/libm/,\
|
|
math.o \
|
|
asinfacosf.o \
|
|
atanf.o \
|
|
atan2f.o \
|
|
fmodf.o \
|
|
roundf.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 \
|
|
)
|
|
|
|
OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/lib/mp-readline/,\
|
|
readline.o \
|
|
)
|
|
|
|
|
|
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 \
|
|
class/src/usbd_msc_data.o \
|
|
)
|
|
|
|
# Bootloader object files
|
|
BOOT_OBJ += $(wildcard $(BUILD)/$(BOOT_DIR)/src/*.o)
|
|
BOOT_OBJ += $(wildcard $(BUILD)/$(STHAL_DIR)/src/*.o)
|
|
|
|
ifeq ($(TARGET), OPENMV1)
|
|
BOOT_OBJ += $(addprefix $(BUILD)/$(CMSIS_DIR)/src/st/,\
|
|
system_stm32f4xx.o \
|
|
startup_stm32f407xx.o \
|
|
)
|
|
else
|
|
BOOT_OBJ += $(addprefix $(BUILD)/$(CMSIS_DIR)/src/st/,\
|
|
system_stm32f4xx.o \
|
|
startup_stm32f427xx.o \
|
|
)
|
|
endif
|
|
|
|
BOOT_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/usbdev/, \
|
|
core/src/usbd_core.o \
|
|
core/src/usbd_ctlreq.o \
|
|
core/src/usbd_ioreq.o \
|
|
)
|
|
|
|
###################################################
|
|
#Export Variables
|
|
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
|
|
###################################################
|
|
all: $(BUILD)/firmware.dfu
|
|
|
|
$(BUILD):
|
|
$(MKDIR) -p $@
|
|
|
|
objs: | $(BUILD)
|
|
$(MAKE) -C $(CMSIS_DIR) BUILD=$(BUILD)/$(CMSIS_DIR)
|
|
$(MAKE) -C $(STHAL_DIR) BUILD=$(BUILD)/$(STHAL_DIR)
|
|
$(MAKE) -C $(FATFS_DIR) BUILD=$(BUILD)/$(FATFS_DIR)
|
|
$(MAKE) -C $(MICROPY_DIR)/stmhal BUILD=$(BUILD)/$(MICROPY_DIR) BOARD=$(TARGET) QSTR_DEFS=$(OMV_QSTR_DEFS)
|
|
$(MAKE) -C $(OMV_DIR) BUILD=$(BUILD)/$(OMV_DIR)
|
|
$(MAKE) -C $(WINC1500_DIR) BUILD=$(BUILD)/$(WINC1500_DIR)
|
|
|
|
boot_objs: | $(BUILD)
|
|
$(MAKE) -C $(BOOT_DIR) BUILD=$(BUILD)/$(BOOT_DIR)
|
|
|
|
$(BUILD)/$(BIN).bin: objs
|
|
$(CCP) -P -E -D$(TARGET) $(OMV_DIR)/stm32f4xx.ld.S > $(BUILD)/stm32f4xx.lds
|
|
$(CC) $(LDFLAGS) $(OBJ) $(LIB) -o $(FW_DIR)/$(BIN).elf
|
|
$(OBJCOPY) -Obinary $(FW_DIR)/$(BIN).elf $(FW_DIR)/$(BIN).bin
|
|
$(PYTHON) $(DFU) -b 0x08010000:$(FW_DIR)/$(BIN).bin $(FW_DIR)/$(BIN).dfu
|
|
$(SIZE) $(FW_DIR)/$(BIN).elf
|
|
|
|
# This target generates the bootloader. It generats the bootloader binary twice,
|
|
# The first time without padding, to generate the bootloader.dfu. Second time
|
|
# with padding up to the main fw image, to generate a contiguous firmware.bin image.
|
|
$(BUILD)/$(BOOT_BIN).bin: boot_objs
|
|
$(CCP) -P -E -D$(TARGET) $(BOOT_DIR)/stm32f4xx.ld.S > $(BUILD)/$(BOOT_DIR)/stm32f4xx.lds
|
|
$(CC) $(BOOT_LDFLAGS) $(BOOT_OBJ) -o $(FW_DIR)/$(BOOT_BIN).elf
|
|
$(OBJCOPY) -Obinary $(FW_DIR)/$(BOOT_BIN).elf $(FW_DIR)/$(BOOT_BIN).bin
|
|
$(PYTHON) $(DFU) -b 0x08000000:$(FW_DIR)/$(BOOT_BIN).bin $(FW_DIR)/$(BOOT_BIN).dfu
|
|
$(OBJCOPY) -Obinary --pad-to=0x08010000 $(FW_DIR)/$(BOOT_BIN).elf $(FW_DIR)/$(BOOT_BIN).bin
|
|
$(SIZE) $(FW_DIR)/$(BOOT_BIN).elf
|
|
|
|
$(BUILD)/firmware.dfu: $(BUILD)/$(BIN).bin $(BUILD)/$(BOOT_BIN).bin
|
|
cat $(FW_DIR)/$(BOOT_BIN).bin $(FW_DIR)/$(BIN).bin > $(FW_DIR)/firmware.bin
|
|
$(PYTHON) $(DFU) -b 0x08000000:$(FW_DIR)/$(BOOT_BIN).bin -b 0x08010000:$(FW_DIR)/$(BIN).bin $(FW_DIR)/firmware.dfu
|
|
|
|
size:
|
|
$(SIZE) $(FW_DIR)/$(BIN).elf
|
|
$(SIZE) $(FW_DIR)/$(BOOT_BIN).elf
|
|
|
|
clean:
|
|
$(RM) -fr $(BUILD)
|
|
|
|
# Flash the main firmware image
|
|
flash_image::
|
|
../usr/pydfu.py -u $(FW_DIR)/$(BIN).dfu
|
|
|
|
# Flash the bootloader
|
|
flash_boot::
|
|
../usr/pydfu.py -u $(FW_DIR)/$(BOOT_BIN).dfu
|
|
|
|
# Flash the bootloader + main firmware image
|
|
flash::
|
|
../usr/pydfu.py -m -u $(FW_DIR)/firmware.dfu
|
|
|
|
# Flash the bootloader + main firmware image
|
|
flash_bin::
|
|
../usr/pydfu.py -m -u $(FW_DIR)/firmware.bin
|