191 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
		
		
			
		
	
	
			191 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
|   | MSDK_LIB = hw/mcu/analog/msdk/Libraries | ||
|  | 
 | ||
|  | # Add any board specific make rules
 | ||
|  | include $(TOP)/$(BOARD_PATH)/board.mk | ||
|  | 
 | ||
|  | CPU_CORE ?= cortex-m4 | ||
|  | PORT ?= 0 | ||
|  | JLINK_DEVICE = ${MAX_DEVICE} | ||
|  | MAX_DEVICE_UPPER = $(call to_upper,${MAX_DEVICE}) | ||
|  | 
 | ||
|  | ifeq ($(MAX_DEVICE),max32650) | ||
|  |   PERIPH_ID = 10 | ||
|  |   PERIPH_SUFFIX = me | ||
|  | endif | ||
|  | 
 | ||
|  | ifneq ($(filter $(MAX_DEVICE),max32665 max32666),) | ||
|  |   PERIPH_ID = 14 | ||
|  |   PERIPH_SUFFIX = me | ||
|  | endif | ||
|  | 
 | ||
|  | ifeq ($(MAX_DEVICE),max32690) | ||
|  |   PERIPH_ID = 18 | ||
|  |   PERIPH_SUFFIX = me | ||
|  | endif | ||
|  | 
 | ||
|  | ifeq ($(MAX_DEVICE),max78002) | ||
|  |   PERIPH_ID = 87 | ||
|  |   PERIPH_SUFFIX = ai | ||
|  | endif | ||
|  | 
 | ||
|  | ifndef PERIPH_ID | ||
|  |   $(error Unsupported MAX device: ${MAX_DEVICE}) | ||
|  | endif | ||
|  | 
 | ||
|  | # Configure the flash rule. By default, use JLink.
 | ||
|  | SIGNED_BUILD ?= 0 | ||
|  | DEFAULT_FLASH = flash-jlink | ||
|  | 
 | ||
|  | # --------------
 | ||
|  | # Compiler Flags
 | ||
|  | # --------------
 | ||
|  | CFLAGS += \
 | ||
|  |   -DTARGET=${MAX_DEVICE_UPPER}\
 | ||
|  |   -DTARGET_REV=0x4131 \
 | ||
|  | 	-DMXC_ASSERT_ENABLE \
 | ||
|  | 	-D${MAX_DEVICE_UPPER} \
 | ||
|  | 	-DIAR_PRAGMAS=0 \
 | ||
|  | 	-DMAX_PERIPH_ID=${PERIPH_ID} \
 | ||
|  |   -DCFG_TUSB_MCU=OPT_MCU_${MAX_DEVICE_UPPER} \
 | ||
|  |   -DBOARD_TUD_MAX_SPEED=OPT_MODE_HIGH_SPEED | ||
|  | 
 | ||
|  | # mcu driver cause following warnings
 | ||
|  | CFLAGS += \
 | ||
|  | 	-Wno-error=old-style-declaration \
 | ||
|  | 	-Wno-error=redundant-decls \
 | ||
|  |   -Wno-error=strict-prototypes \
 | ||
|  | 	-Wno-error=unused-parameter \
 | ||
|  | 	-Wno-error=cast-align \
 | ||
|  | 	-Wno-error=cast-qual \
 | ||
|  | 	-Wno-error=sign-compare \
 | ||
|  | 	-Wno-error=enum-conversion \
 | ||
|  | 
 | ||
|  | LDFLAGS_GCC += -nostartfiles --specs=nosys.specs --specs=nano.specs | ||
|  | LD_FILE_GCC ?= $(FAMILY_PATH)/linker/${MAX_DEVICE}.ld | ||
|  | 
 | ||
|  | # If the applications needs to be signed (for the MAX32651), sign it first and
 | ||
|  | # then need to use MSDK's OpenOCD to flash it
 | ||
|  | # Also need to include the __SLA_FWK__ define to enable the signed header into
 | ||
|  | # memory
 | ||
|  | ifeq ($(SIGNED_BUILD), 1) | ||
|  | # Extra definitions to build for the secure part
 | ||
|  | CFLAGS += -D__SLA_FWK__ | ||
|  | DEFAULT_FLASH := sign-build flash-msdk | ||
|  | endif | ||
|  | 
 | ||
|  | # -----------------
 | ||
|  | # Sources & Include
 | ||
|  | # -----------------
 | ||
|  | 
 | ||
|  | # common
 | ||
|  | SRC_C += \
 | ||
|  | 	src/portable/mentor/musb/dcd_musb.c \
 | ||
|  | 	${MSDK_LIB}/CMSIS/Device/Maxim/${MAX_DEVICE_UPPER}/Source/heap.c \
 | ||
|  | 	${MSDK_LIB}/CMSIS/Device/Maxim/${MAX_DEVICE_UPPER}/Source/system_${MAX_DEVICE}.c \
 | ||
|  | 	${MSDK_LIB}/PeriphDrivers/Source/SYS/mxc_assert.c \
 | ||
|  | 	${MSDK_LIB}/PeriphDrivers/Source/SYS/mxc_delay.c \
 | ||
|  | 	${MSDK_LIB}/PeriphDrivers/Source/SYS/mxc_lock.c \
 | ||
|  | 	${MSDK_LIB}/PeriphDrivers/Source/SYS/nvic_table.c \
 | ||
|  | 	${MSDK_LIB}/PeriphDrivers/Source/SYS/pins_${PERIPH_SUFFIX}${PERIPH_ID}.c \
 | ||
|  | 	${MSDK_LIB}/PeriphDrivers/Source/SYS/sys_${PERIPH_SUFFIX}${PERIPH_ID}.c \
 | ||
|  | 	${MSDK_LIB}/PeriphDrivers/Source/FLC/flc_common.c \
 | ||
|  | 	${MSDK_LIB}/PeriphDrivers/Source/FLC/flc_${PERIPH_SUFFIX}${PERIPH_ID}.c \
 | ||
|  | 	${MSDK_LIB}/PeriphDrivers/Source/FLC/flc_reva.c \
 | ||
|  | 	${MSDK_LIB}/PeriphDrivers/Source/GPIO/gpio_common.c \
 | ||
|  | 	${MSDK_LIB}/PeriphDrivers/Source/GPIO/gpio_${PERIPH_SUFFIX}${PERIPH_ID}.c \
 | ||
|  | 	${MSDK_LIB}/PeriphDrivers/Source/GPIO/gpio_reva.c \
 | ||
|  | 	${MSDK_LIB}/PeriphDrivers/Source/ICC/icc_${PERIPH_SUFFIX}${PERIPH_ID}.c \
 | ||
|  | 	${MSDK_LIB}/PeriphDrivers/Source/ICC/icc_reva.c \
 | ||
|  | 	${MSDK_LIB}/PeriphDrivers/Source/UART/uart_common.c \
 | ||
|  | 	${MSDK_LIB}/PeriphDrivers/Source/UART/uart_${PERIPH_SUFFIX}${PERIPH_ID}.c \
 | ||
|  | 
 | ||
|  | SRC_S_GCC += ${MSDK_LIB}/CMSIS/Device/Maxim/${MAX_DEVICE_UPPER}/Source/GCC/startup_${MAX_DEVICE}.S | ||
|  | 
 | ||
|  | INC += \
 | ||
|  | 	$(TOP)/$(BOARD_PATH) \
 | ||
|  | 	$(TOP)/${MSDK_LIB}/CMSIS/5.9.0/Core/Include \
 | ||
|  | 	$(TOP)/${MSDK_LIB}/CMSIS/Device/Maxim/${MAX_DEVICE_UPPER}/Include \
 | ||
|  | 	$(TOP)/${MSDK_LIB}/PeriphDrivers/Include/${MAX_DEVICE_UPPER} \
 | ||
|  | 	$(TOP)/${MSDK_LIB}/PeriphDrivers/Source/SYS \
 | ||
|  | 	$(TOP)/${MSDK_LIB}/PeriphDrivers/Source/GPIO \
 | ||
|  | 	$(TOP)/${MSDK_LIB}/PeriphDrivers/Source/ICC \
 | ||
|  | 	$(TOP)/${MSDK_LIB}/PeriphDrivers/Source/FLC \
 | ||
|  | 	$(TOP)/${MSDK_LIB}/PeriphDrivers/Source/UART \
 | ||
|  | 
 | ||
|  | # device specific
 | ||
|  | ifneq ($(filter $(MAX_DEVICE),max32650 max32665 max32666),) | ||
|  |   SRC_C += \
 | ||
|  | 		${MSDK_LIB}/PeriphDrivers/Source/ICC/icc_common.c \
 | ||
|  | 		${MSDK_LIB}/PeriphDrivers/Source/TPU/tpu_${PERIPH_SUFFIX}${PERIPH_ID}.c \
 | ||
|  | 		${MSDK_LIB}/PeriphDrivers/Source/TPU/tpu_reva.c \
 | ||
|  | 		${MSDK_LIB}/PeriphDrivers/Source/UART/uart_reva.c \
 | ||
|  | 
 | ||
|  |   INC += $(TOP)/${MSDK_LIB}/PeriphDrivers/Source/TPU | ||
|  | endif | ||
|  | 
 | ||
|  | ifeq (${MAX_DEVICE},max32690) | ||
|  |   SRC_C += \
 | ||
|  | 		${MSDK_LIB}/PeriphDrivers/Source/CTB/ctb_${PERIPH_SUFFIX}${PERIPH_ID}.c \
 | ||
|  | 		${MSDK_LIB}/PeriphDrivers/Source/CTB/ctb_reva.c \
 | ||
|  | 		${MSDK_LIB}/PeriphDrivers/Source/CTB/ctb_common.c \
 | ||
|  | 		${MSDK_LIB}/PeriphDrivers/Source/UART/uart_revb.c \
 | ||
|  | 
 | ||
|  |   INC += ${TOP}/${MSDK_LIB}/PeriphDrivers/Source/CTB | ||
|  | endif | ||
|  | 
 | ||
|  | ifeq (${MAX_DEVICE},max78002) | ||
|  |   SRC_C += \
 | ||
|  | 		${MSDK_LIB}/PeriphDrivers/Source/AES/aes_${PERIPH_SUFFIX}${PERIPH_ID}.c \
 | ||
|  | 		${MSDK_LIB}/PeriphDrivers/Source/AES/aes_revb.c \
 | ||
|  | 		${MSDK_LIB}/PeriphDrivers/Source/TRNG/trng_${PERIPH_SUFFIX}${PERIPH_ID}.c \
 | ||
|  | 		${MSDK_LIB}/PeriphDrivers/Source/TRNG/trng_revb.c \
 | ||
|  | 		${MSDK_LIB}/PeriphDrivers/Source/UART/uart_revb.c \
 | ||
|  | 
 | ||
|  |   INC += \
 | ||
|  | 		${TOP}/${MSDK_LIB}/PeriphDrivers/Source/AES \
 | ||
|  | 		${TOP}/${MSDK_LIB}/PeriphDrivers/Source/TRNG | ||
|  | endif | ||
|  | 
 | ||
|  | 
 | ||
|  | # The MAX32651EVKIT is pin for pin identical to the MAX32650EVKIT, however the
 | ||
|  | # MAX32651 has a secure bootloader which requires the image to be signed before
 | ||
|  | # loading into flash. All MAX32651EVKIT's have the same key for evaluation
 | ||
|  | # purposes, so create a special flash rule to sign the binary and flash using
 | ||
|  | # the MSDK.
 | ||
|  | MCU_PATH = $(TOP)/hw/mcu/analog/msdk/ | ||
|  | # Assume no extension for sign utility
 | ||
|  | SIGN_EXE = sign_app | ||
|  | ifeq ($(OS), Windows_NT) | ||
|  | # Must use .exe extension on Windows, since the binaries
 | ||
|  | # for Linux may live in the same place.
 | ||
|  | SIGN_EXE := sign_app.exe | ||
|  | else | ||
|  | UNAME = $(shell uname -s) | ||
|  | ifneq ($(findstring MSYS_NT,$(UNAME)),) | ||
|  | # Must also use .exe extension for MSYS2
 | ||
|  | SIGN_EXE := sign_app.exe | ||
|  | endif | ||
|  | endif | ||
|  | 
 | ||
|  | # Rule to sign the build.  This will in-place modify the existing .elf file
 | ||
|  | # an populate the .sig section with the signature value
 | ||
|  | sign-build: $(BUILD)/$(PROJECT).elf | ||
|  | 	$(OBJCOPY) $(BUILD)/$(PROJECT).elf -R .sig -O binary $(BUILD)/$(PROJECT).bin | ||
|  | 	$(MCU_PATH)/Tools/SBT/bin/$(SIGN_EXE) -c MAX32651 \
 | ||
|  | 		key_file="$(MCU_PATH)/Tools/SBT/devices/MAX32651/keys/maximtestcrk.key" \
 | ||
|  | 		ca=$(BUILD)/$(PROJECT).bin sca=$(BUILD)/$(PROJECT).sbin | ||
|  | 	$(OBJCOPY) $(BUILD)/$(PROJECT).elf --update-section .sig=$(BUILD)/$(PROJECT).sig | ||
|  | 
 | ||
|  | # Optional flash option when running within an installed MSDK to use OpenOCD
 | ||
|  | # Mainline OpenOCD does not yet have the MAX32's flash algorithm integrated.
 | ||
|  | # If the MSDK is installed, flash-msdk can be run to utilize the the modified
 | ||
|  | # openocd with the algorithms
 | ||
|  | MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) | ||
|  | flash-msdk: $(BUILD)/$(PROJECT).elf | ||
|  | 	$(MAXIM_PATH)/Tools/OpenOCD/openocd -s $(MAXIM_PATH)/Tools/OpenOCD/scripts \
 | ||
|  | 		-f interface/cmsis-dap.cfg -f target/max32650.cfg \
 | ||
|  | 		-c "program $(BUILD)/$(PROJECT).elf verify; init; reset; exit" | ||
|  | 
 | ||
|  | # Configure the flash rule
 | ||
|  | flash: $(DEFAULT_FLASH) |