@@ -13,6 +13,15 @@ CROSS_COMPILE = arm-none-eabi-
1313# along with numerous other shared environment makefiles.
1414include ../../py/circuitpy_mkenv.mk
1515
16+ # ###############################################################################
17+ # DEFINITIONS
18+ # ###############################################################################
19+
20+ COMPILER ?= GCC
21+ ifneq ($(COMPILER ) , GCC)
22+ $(error ERR : Only the GCC compiler is supported.)
23+ endif
24+
1625# MCU_SERIES e.g. "max32"
1726# MCU_VARIANT e.g. "max32690"
1827# defined in mpconfigboard.mk
@@ -21,32 +30,34 @@ MCU_SERIES_UPPER := $(shell echo $(MCU_SERIES) | tr '[:lower:]' '[:upper:]')
2130MCU_VARIANT_LOWER := $(shell echo $(MCU_VARIANT ) | tr '[:upper:]' '[:lower:]')
2231MCU_VARIANT_UPPER := $(shell echo $(MCU_VARIANT ) | tr '[:lower:]' '[:upper:]')
2332
24- # *******************************************************************************
25- # ### MSDK INCLUDES ####
2633# Necessary for msdk makefiles
2734TARGET := $(MCU_VARIANT_UPPER )
2835TARGET_UC := $(MCU_VARIANT_UPPER )
2936TARGET_LC := $(MCU_VARIANT_LOWER )
3037
31- MSDK_ROOT = ./msdk
32- MSDK_LIBS = $(MSDK_ROOT ) /Libraries
33- CMSIS_ROOT = $(MSDK_LIBS ) /CMSIS
34- ADI_PERIPH = $(MSDK_ROOT ) /Libraries/PeriphDrivers
35- ADI_MISC_DRIVERS_DIR ?= $(MSDK_LIBS ) /MiscDrivers
36- ADI_BOARD_DIR = $(MSDK_LIBS ) /Boards/$(MCU_VARIANT_UPPER ) /$(BOARD )
37-
38- # Set die type
38+ # Define max32 die type for PeriphDriver Includes
39+ # default to me18 for max32690
40+ # more info:
41+ # https://analogdevicesinc.github.io/msdk//USERGUIDE/#die-types-to-part-numbers
3942ifeq ($(MCU_VARIANT_LOWER ) ,max32690)
4043DIE_TYPE =me18
4144else ifeq ($(MCU_VARIANT_LOWER),max32650)
4245DIE_TYPE =me10
4346else ifeq ($(MCU_VARIANT_LOWER),max32665)
4447DIE_TYPE =me14
45- else
48+ else
4649DIE_TYPE =me18
4750endif
4851
49- # For debugging the build
52+ # Helpful directory paths
53+ MSDK_ROOT = ./msdk
54+ MSDK_LIBS = $(MSDK_ROOT ) /Libraries
55+ CMSIS_ROOT = $(MSDK_LIBS ) /CMSIS
56+ ADI_PERIPH = $(MSDK_ROOT ) /Libraries/PeriphDrivers
57+ ADI_MISC_DRIVERS_DIR ?= $(MSDK_LIBS ) /MiscDrivers
58+ ADI_BOARD_DIR = $(MSDK_LIBS ) /Boards/$(MCU_VARIANT_UPPER ) /$(BOARD )
59+
60+ # Print resolved paths for debugging the build
5061ifneq ($(BUILD_VERBOSE ) ,"")
5162$(info MSDK_ROOT is $(MSDK_ROOT))
5263$(info MSDK_LIBS is $(MSDK_LIBS))
@@ -55,107 +66,49 @@ $(info ADI_PERIPH is $(ADI_PERIPH))
5566$(info ADI_MISC_DRIVERS_DIR is $(ADI_MISC_DRIVERS_DIR))
5667$(info ADI_BOARD_DIR is $(ADI_BOARD_DIR))
5768$(info MAXIM_PATH is $(MAXIM_PATH))
58- $(info MCU_VARIANT_LOWER is $(MCU_VARIANT_LOWER ))
69+ $(info MCU_VARIANT is $(MCU_VARIANT ))
5970$(info DIE_TYPE is $(DIE_TYPE))
6071endif
6172
62- # -----------------
63- # Sources & Include
64- # -----------------
65- # Define max32 die type for PeriphDriver Includes
66- # default to me18 for max32690
67- # more info:
68- # https://analogdevicesinc.github.io/msdk//USERGUIDE/#die-types-to-part-numbers
73+ # ###############################################################################
74+ # INCLUDES & SOURCES
75+ # ###############################################################################
6976
70- PERIPH_SRC = $(ADI_PERIPH ) /Source
71- PERIPH_INC = $(ADI_PERIPH ) /Include/$(MCU_VARIANT_UPPER )
77+ # MSDK Specific Includes / Sources
78+ MXC_SPI_VERSION := v1
79+ include ./msdk/Libraries/PeriphDrivers/${MCU_VARIANT_LOWER}_files.mk
7280
73- INC += -I.
74- INC += -I../..
75- INC += -I$(BUILD )
76- INC += -I$(BUILD ) /genhdr
77- INC += -I./../../lib/cmsis/inc
78- INC += -I./boards/
79- INC += -I./boards/$(BOARD )
80- INC += -I./peripherals/
81- INC += -I../../lib/mp-readline
81+ # Add MAX32 files to Include / Source paths
82+ INC += $(addprefix -I,${PERIPH_DRIVER_INCLUDE_DIR})
83+ SRC_MAX32 += ${PERIPH_DRIVER_C_FILES}
84+ SRC_MAX32 += $(CMSIS_ROOT ) /Device/Maxim/$(MCU_VARIANT_UPPER ) /Source/system_$(MCU_VARIANT_LOWER ) .c
8285
86+ # Include paths:
87+ # - TOP: CircuitPython root includes
88+ # - ./: Port & Board specific headers
89+ # - CMSIS: ARM CMSIS Device headers
90+ # - BUILD: Generated headers (genhdr)
8391INC += \
84- -I$(TOP ) / $( BOARD_PATH ) \
92+ -I$(TOP ) \
8593 -I$(TOP ) /lib/cmsis/inc \
94+ -I$(TOP ) lib/mp-readline \
95+ -I. \
96+ -I./boards \
97+ -I./boards/$(BOARD ) \
98+ -I./peripherals/ \
8699 -I$(CMSIS_ROOT ) /Include \
87100 -I$(CMSIS_ROOT ) /Device/Maxim/$(MCU_VARIANT_UPPER ) /Include \
88- -I$(PERIPH_INC ) \
89- -I$(PERIPH_SRC ) /SYS \
90- -I$(PERIPH_SRC ) /CTB \
91- -I$(PERIPH_SRC ) /DMA \
92- -I$(PERIPH_SRC ) /FLC \
93- -I$(PERIPH_SRC ) /GPIO \
94- -I$(PERIPH_SRC ) /ICC \
95- -I$(PERIPH_SRC ) /TMR \
96- -I$(PERIPH_SRC ) /RTC \
97- -I$(PERIPH_SRC ) /UART \
98- -I$(PERIPH_SRC ) /TRNG \
99- -I$(PERIPH_SRC ) /I2C \
100- -I$(PERIPH_SRC ) /SPI
101-
102- INC += -I$(CMSIS_ROOT ) /Device/Maxim/$(MCU_VARIANT_UPPER ) /Source/GCC
103-
104- SRC_MAX32 += \
105- $(CMSIS_ROOT ) /Device/Maxim/$(MCU_VARIANT_UPPER ) /Source/heap.c \
106- $(CMSIS_ROOT ) /Device/Maxim/$(MCU_VARIANT_UPPER ) /Source/system_$(MCU_VARIANT_LOWER ) .c \
107- $(PERIPH_SRC ) /SYS/mxc_assert.c \
108- $(PERIPH_SRC ) /SYS/mxc_delay.c \
109- $(PERIPH_SRC ) /SYS/mxc_lock.c \
110- $(PERIPH_SRC ) /SYS/nvic_table.c \
111- $(PERIPH_SRC ) /SYS/pins_$(DIE_TYPE ) .c \
112- $(PERIPH_SRC ) /SYS/sys_$(DIE_TYPE ) .c \
113- $(PERIPH_SRC ) /CTB/ctb_$(DIE_TYPE ) .c \
114- $(PERIPH_SRC ) /CTB/ctb_reva.c \
115- $(PERIPH_SRC ) /CTB/ctb_common.c \
116- $(PERIPH_SRC ) /DMA/dma_reva.c \
117- $(PERIPH_SRC ) /DMA/dma_$(DIE_TYPE ) .c \
118- $(PERIPH_SRC ) /FLC/flc_common.c \
119- $(PERIPH_SRC ) /FLC/flc_$(DIE_TYPE ) .c \
120- $(PERIPH_SRC ) /FLC/flc_reva.c \
121- $(PERIPH_SRC ) /GPIO/gpio_common.c \
122- $(PERIPH_SRC ) /GPIO/gpio_$(DIE_TYPE ) .c \
123- $(PERIPH_SRC ) /GPIO/gpio_reva.c \
124- $(PERIPH_SRC ) /ICC/icc_$(DIE_TYPE ) .c \
125- $(PERIPH_SRC ) /ICC/icc_reva.c \
126- $(PERIPH_SRC ) /RTC/rtc_$(DIE_TYPE ) .c \
127- $(PERIPH_SRC ) /RTC/rtc_reva.c \
128- $(PERIPH_SRC ) /TMR/tmr_common.c \
129- $(PERIPH_SRC ) /TMR/tmr_revb.c \
130- $(PERIPH_SRC ) /TMR/tmr_$(DIE_TYPE ) .c \
131- $(PERIPH_SRC ) /UART/uart_common.c \
132- $(PERIPH_SRC ) /UART/uart_$(DIE_TYPE ) .c \
133- $(PERIPH_SRC ) /UART/uart_revb.c \
134- $(PERIPH_SRC ) /TRNG/trng_revb.c \
135- $(PERIPH_SRC ) /TRNG/trng_$(DIE_TYPE ) .c \
136- $(PERIPH_SRC ) /I2C/i2c_$(DIE_TYPE ) .c \
137- $(PERIPH_SRC ) /I2C/i2c_reva.c \
138- $(PERIPH_SRC ) /SPI/spi_$(DIE_TYPE ) .c \
139- $(PERIPH_SRC ) /SPI/spi_reva1.c
140-
141- # Small source correction for ME10 (MAX32650)
142- ifeq ($(DIE_TYPE ) ,me10)
143- SRC_MAX32 := $(filter-out \
144- $(PERIPH_SRC ) /CTB/ctb_reva.c \
145- $(PERIPH_SRC ) /CTB/ctb_common.c \
146- $(PERIPH_SRC ) /CTB/ctb_me10.c, \
147- $(SRC_MAX32 ) )
148- endif
149-
150- ifeq ($(DIE_TYPE ) ,me14)
151- SRC_MAX32 := $(filter-out \
152- $(PERIPH_SRC ) /CTB/ctb_reva.c \
153- $(PERIPH_SRC ) /CTB/ctb_common.c \
154- $(PERIPH_SRC ) /CTB/ctb_me14.c, \
155- $(SRC_MAX32 ) )
156- endif
157-
101+ -I$(CMSIS_ROOT ) /Device/Maxim/$(MCU_VARIANT_UPPER ) /Source/GCC \
102+ -I${BUILD} \
103+ -I${BUILD}/genhdr
104+
105+ # Source Files:
106+ # - background / mphalport: Circuitpython main port files
107+ # - boards/...: board-specific pin objects and source code
108+ # - peripherals/...: MCU-specific pins, peripherals, and helper code
158109SRC_C += $(SRC_MAX32 ) \
110+ background.c \
111+ mphalport.c \
159112 boards/$(BOARD ) /board.c \
160113 boards/$(BOARD ) /pins.c \
161114 peripherals/$(MCU_VARIANT_LOWER ) /pins.c \
@@ -164,22 +117,37 @@ SRC_C += $(SRC_MAX32) \
164117 peripherals/$(MCU_VARIANT_LOWER ) /max32_i2c.c \
165118 peripherals/$(MCU_VARIANT_LOWER ) /max32_spi.c
166119
167- # *******************************************************************************
168- # ## Compiler & Linker Flags ###
169- COMPILER ?= GCC
120+ # Add TinyUSB sources
121+ INC += -I../../lib/tinyusb/src \
122+ -I../../supervisor/shared/usb
123+ SRC_C += lib/tinyusb/src/portable/mentor/musb/dcd_musb.c
170124
125+ # Assembly files for startup & supervisor
171126ifeq ($(COMPILER ) , GCC)
172-
173127STARTUPFILE = $(CMSIS_ROOT ) /Device/Maxim/$(MCU_VARIANT_UPPER ) /Source/GCC/startup_$(MCU_VARIANT_LOWER ) .s
174- # STARTUPFILE = $(ADI_BOARD_DIR)/Source/startup_$(MCU_VARIANT_LOWER).s
128+ endif
129+ SRC_S_UPPER = supervisor/shared/cpu_regs.S
130+ SRC_S += $(STARTUPFILE )
175131
176132# CircuitPython custom linkerfile (necessary for build steps & filesystems)
177133LINKERFILE = linking/$(MCU_VARIANT_LOWER ) _cktpy.ld
178- LDFLAGS += -nostartfiles -specs=nano.specs
134+
135+ # ###############################################################################
136+ # COMPILER & LINKER FLAGS
137+ # ###############################################################################
138+
139+ # Debugging flags
140+ # NOTE: DEBUG=1 is temporarily the default
141+ DEBUG ?= 1
142+ ifeq ($(DEBUG ) ,1)
143+ COPT = -ggdb3 -Og -Os
144+ else
145+ COPT += -Os
179146endif
180147
181- SRC_S_UPPER = supervisor/shared/cpu_regs.S
182- SRC_S += $(STARTUPFILE )
148+ CPU_CORE =cortex-m4
149+ CFLAGS += $(BASE_CFLAGS ) $(INC ) $(COPT ) -mthumb -mcpu=$(CPU_CORE ) -mfloat-abi=softfp \
150+ -mfpu=fpv4-sp-d16 -Werror -Wall -std=gnu11 -nostartfiles
183151
184152# Needed to compile some MAX32 headers
185153CFLAGS += -D$(MCU_VARIANT_UPPER ) \
@@ -195,20 +163,6 @@ CFLAGS += -D$(MCU_VARIANT_UPPER) \
195163# -DSRAM_ORIGIN \
196164# -DSRAM_SIZE
197165
198- CPU_CORE =cortex-m4
199- CFLAGS += -mthumb -mcpu=$(CPU_CORE ) -mfloat-abi=softfp -mfpu=fpv4-sp-d16
200-
201- # NOTE: Start with DEBUG=1 defaults for now
202- ifeq ($(DEBUG ) ,)
203- DEBUG ?= 1
204- endif
205-
206- ifeq ($(DEBUG ) ,1)
207- COPT = -ggdb3 -Og -Os
208- else
209- COPT += -Os
210- endif
211-
212166# TinyUSB CFLAGS
213167CFLAGS += \
214168 -DCFG_TUSB_MCU=OPT_MCU_$(MCU_VARIANT_UPPER ) \
@@ -222,19 +176,6 @@ CFLAGS += \
222176 -DCFG_TUD_VENDOR_RX_BUFSIZE=1024 \
223177 -DCFG_TUD_VENDOR_TX_BUFSIZE=1024
224178
225- # Add TinyUSB sources
226- INC += -I../../lib/tinyusb/src
227- INC += -I../../supervisor/shared/usb
228- SRC_C += lib/tinyusb/src/portable/mentor/musb/dcd_musb.c
229-
230- # Add port sources incl. any board functions
231- SRC_C += \
232- boards/$(BOARD ) /board.c \
233- background.c \
234- mphalport.c \
235-
236- CFLAGS += $(INC ) -Werror -Wall -std=gnu11 -nostartfiles $(BASE_CFLAGS ) $(COPT )
237-
238179# Suppress some errors for MSDK
239180# cast-align warning will be suppressed;
240181# it gets generated by CircuitPy's TLSF memory allocator lib
@@ -249,18 +190,29 @@ CFLAGS += -Wno-error=unused-parameter \
249190 -Wno-error=nested-externs \
250191 -Wno-error=sign-compare \
251192 -Wno-cast-align \
252- -Wno-sign-compare \
193+ -Wno-sign-compare
253194
195+ # Entry point
254196ENTRY = Reset_Handler
255- LDFLAGS += $(CFLAGS ) --entry $(ENTRY ) -Wl,-nostdlib -Wl,-T,$(LINKERFILE ) -Wl,-Map=$@ .map -Wl,-cref -Wl,-gc-sections
256- LIBS := -lgcc -lc
257197
198+ # Libraries
199+ LIBS := -lgcc -lc
258200# If not using CKTPY mathlib, use toolchain mathlib
259201ifndef INTERNAL_LIBM
260202LIBS += -lm
261203endif
262204
263- # *******************************************************************************
205+ # Linker flags
206+ ifeq ($(COMPILER ) , GCC)
207+ LDFLAGS += -nostartfiles -specs=nano.specs
208+ endif
209+ LDFLAGS += $(CFLAGS ) --entry $(ENTRY ) -Wl,-nostdlib -Wl,-T,$(LINKERFILE ) \
210+ -Wl,-Map=$@ .map -Wl,-cref -Wl,-gc-sections
211+
212+ # ###############################################################################
213+ # MAX32 BUILD RULES
214+ # ###############################################################################
215+
264216# ## PORT-DEFINED BUILD RULES ###
265217# This section attempts to build the Python core, the supervisor, and any
266218# port-provided source code.
@@ -288,9 +240,31 @@ SRC_QSTR_PREPROCESSOR +=
288240# Default build target
289241all : $(BUILD ) /firmware.elf $(BUILD ) /firmware.hex $(BUILD ) /firmware.bin
290242
243+ pristine :
244+ $(MAKE ) -s clean
245+ $(MAKE ) --no-print-directory all
246+
291247clean-all :
292248 rm -rf build-*
293249
250+ $(BUILD ) /firmware.elf : $(OBJ )
251+ $(STEPECHO ) " LINK $@ "
252+ $(Q ) echo $^ > $(BUILD ) /firmware.objs
253+ $(Q )$(CC ) -o $@ $(LDFLAGS ) @$(BUILD ) /firmware.objs -Wl,--print-memory-usage -Wl,--start-group $(LIBS ) -Wl,--end-group
254+ $(Q )$(SIZE ) $@ | $(PYTHON ) $(TOP ) /tools/build_memory_info.py $(LINKERFILE ) $(BUILD )
255+
256+ $(BUILD ) /firmware.hex : $(BUILD ) /firmware.elf
257+ $(STEPECHO ) " Create $@ "
258+ $(Q )$(OBJCOPY ) -O ihex $^ $@
259+
260+ $(BUILD ) /firmware.bin : $(BUILD ) /firmware.elf
261+ $(STEPECHO ) " Create $@ "
262+ $(Q )$(OBJCOPY ) -O binary $^ $@
263+
264+ # ###############################################################################
265+ # MAX32 FLASHING RULES
266+ # ###############################################################################
267+
294268# Optional flash option when running within an installed MSDK to use OpenOCD
295269# Mainline OpenOCD does not yet have the MAX32's flash algorithm integrated.
296270# If the MSDK is installed, flash-msdk can be run to utilize the the modified
@@ -318,20 +292,7 @@ COMMAND_FILE := tools/flash_max32.jlink
318292flash-jlink : $(BUILD ) /firmware.bin
319293 @$(JLINKEXE ) -device $(MCU_VARIANT_UPPER ) -NoGui 1 -CommandFile ${COMMAND_FILE}
320294
321- $(BUILD ) /firmware.elf : $(OBJ )
322- $(STEPECHO ) " LINK $@ "
323- $(Q ) echo $^ > $(BUILD ) /firmware.objs
324- $(Q )$(CC ) -o $@ $(LDFLAGS ) @$(BUILD ) /firmware.objs -Wl,--print-memory-usage -Wl,--start-group $(LIBS ) -Wl,--end-group
325- $(Q )$(SIZE ) $@ | $(PYTHON ) $(TOP ) /tools/build_memory_info.py $(LINKERFILE ) $(BUILD )
326-
327- $(BUILD ) /firmware.hex : $(BUILD ) /firmware.elf
328- $(STEPECHO ) " Create $@ "
329- $(Q )$(OBJCOPY ) -O ihex $^ $@
330-
331- $(BUILD ) /firmware.bin : $(BUILD ) /firmware.elf
332- $(STEPECHO ) " Create $@ "
333- $(Q )$(OBJCOPY ) -O binary $^ $@
334-
335- # *******************************************************************************
336- # ## CKTPY BUILD RULES ###
295+ # ###############################################################################
296+ # CKTPY MAIN BUILD RULES
297+ # ###############################################################################
337298include $(TOP ) /py/mkrules.mk
0 commit comments