Skip to content

Commit 2835b62

Browse files
committed
ports: analog: Refactor port Makefile
Cleanup and re-organize port-level Makefile. - Eliminate redundant include / source additions - Unify comment style and create logical sections - Inlude MSDK peripheral makefiles for each target - Mostly unify separate INC and SRC_C blocks - Refactor CFLAGs ordering - Add "pristine" build target for convenience - Reorganize build & flash rules
1 parent 15fd991 commit 2835b62

1 file changed

Lines changed: 118 additions & 157 deletions

File tree

ports/analog/Makefile

Lines changed: 118 additions & 157 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,15 @@ CROSS_COMPILE = arm-none-eabi-
1313
# along with numerous other shared environment makefiles.
1414
include ../../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:]')
2130
MCU_VARIANT_LOWER := $(shell echo $(MCU_VARIANT) | tr '[:upper:]' '[:lower:]')
2231
MCU_VARIANT_UPPER := $(shell echo $(MCU_VARIANT) | tr '[:lower:]' '[:upper:]')
2332

24-
# *******************************************************************************
25-
#### MSDK INCLUDES ####
2633
# Necessary for msdk makefiles
2734
TARGET := $(MCU_VARIANT_UPPER)
2835
TARGET_UC := $(MCU_VARIANT_UPPER)
2936
TARGET_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
3942
ifeq ($(MCU_VARIANT_LOWER),max32690)
4043
DIE_TYPE=me18
4144
else ifeq ($(MCU_VARIANT_LOWER),max32650)
4245
DIE_TYPE=me10
4346
else ifeq ($(MCU_VARIANT_LOWER),max32665)
4447
DIE_TYPE=me14
45-
else
48+
else
4649
DIE_TYPE=me18
4750
endif
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
5061
ifneq ($(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))
6071
endif
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)
8391
INC += \
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
158109
SRC_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
171126
ifeq ($(COMPILER), GCC)
172-
173127
STARTUPFILE = $(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)
177133
LINKERFILE = 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
179146
endif
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
185153
CFLAGS += -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
213167
CFLAGS += \
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
254196
ENTRY = 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
259201
ifndef INTERNAL_LIBM
260202
LIBS += -lm
261203
endif
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
289241
all: $(BUILD)/firmware.elf $(BUILD)/firmware.hex $(BUILD)/firmware.bin
290242

243+
pristine:
244+
$(MAKE) -s clean
245+
$(MAKE) --no-print-directory all
246+
291247
clean-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
318292
flash-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+
################################################################################
337298
include $(TOP)/py/mkrules.mk

0 commit comments

Comments
 (0)