1- # ###############################################################################
2- # Initial setup of Makefile environment
3-
41BOARD ?= ALIF_ENSEMBLE
52BOARD_DIR ?= boards/$(BOARD )
63BUILD ?= build-$(BOARD )
7-
8- ifeq ($(wildcard $(BOARD_DIR ) /.) ,)
9- $(error Invalid BOARD specified : $(BOARD_DIR ) )
10- endif
11-
12- include ../../py/mkenv.mk
13- include mpconfigport.mk
14- include $(BOARD_DIR ) /mpconfigboard.mk
15-
16- # qstr definitions (must come before including py.mk)
17- QSTR_DEFS += qstrdefsport.h
18-
19- # include py core make definitions
20- include $(TOP ) /py/py.mk
21- include $(TOP ) /extmod/extmod.mk
22-
23- # ###############################################################################
24- # Project specific settings and compiler/linker flags
25-
26- CROSS_COMPILE ?= arm-none-eabi-
4+ MCU_CORE ?= M55_HP
275GIT_SUBMODULES += lib/tinyusb lib/alif_ensemble-cmsis-dfp lib/alif-security-toolkit
286PORT ?= /dev/ttyACM0
297
308ALIF_TOOLS ?= ../../lib/alif-security-toolkit/toolkit
31- ALIF_DFP_REL_TOP ?= lib/alif_ensemble-cmsis-dfp
32- ALIF_DFP_REL_HERE ?= $(TOP ) /lib/alif_ensemble-cmsis-dfp
33- CMSIS_DIR ?= $(TOP ) /lib/cmsis/inc
34-
35- MCU_CORE ?= M55_HP
36- ALIF_CONFIG ?= mcu/$(MCU_CORE ) _cfg.json
37- LD_FILE ?= mcu/ensemble.ld.S
38-
39- INC += -I.
40- INC += -I$(TOP )
41- INC += -I$(BUILD )
42- INC += -I$(BOARD_DIR )
43- INC += -I$(CMSIS_DIR )
44- INC += -I$(ALIF_DFP_REL_HERE ) /drivers/include/
45- INC += -I$(ALIF_DFP_REL_HERE ) /se_services/include/
46- INC += -I$(ALIF_DFP_REL_HERE ) /ospi_xip/source/ospi
47- INC += -I$(ALIF_DFP_REL_HERE ) /Device/common/config/
48- INC += -I$(ALIF_DFP_REL_HERE ) /Device/common/include/
49- INC += -I$(ALIF_DFP_REL_HERE ) /Device/core/$(MCU_CORE ) /config/
50- INC += -I$(ALIF_DFP_REL_HERE ) /Device/core/$(MCU_CORE ) /include/
51- INC += -I$(ALIF_DFP_REL_HERE ) /Device/$(MCU_SERIES ) /$(MCU_VARIANT ) /
52- INC += -I$(TOP ) /lib/tinyusb/src
53- INC += -Itinyusb_port
54-
55- GEN_PIN_MKPINS = mcu/make-pins.py
56- GEN_PIN_PREFIX = mcu/pins_prefix.c
57- GEN_PINS_BOARD_CSV = $(BOARD_DIR ) /pins.csv
58- GEN_PINS_SRC = $(BUILD ) /pins_board.c
59- GEN_PINS_HDR = $(HEADER_BUILD ) /pins_board.h
60-
61- CFLAGS_FPU += -mfloat-abi=hard -mfpu=fpv5-d16
62- CFLAGS_CORTEX_M55 += -mthumb -mcpu=cortex-m55 -mtune=cortex-m55 $(CFLAGS_FPU )
63-
64- CFLAGS += $(INC ) -Wall -Werror -std=c99 $(CFLAGS_CORTEX_M55 ) -nostdlib
65- CFLAGS += -Wdouble-promotion -Wfloat-conversion
66- CFLAGS += -fdata-sections -ffunction-sections
67- CFLAGS += -D$(MCU_CORE ) -DCORE_$(MCU_CORE ) -DALIF_CMSIS_H="\"$(MCU_CORE ) .h\""
68-
69- ifeq ($(MICROPY_FLOAT_IMPL ) ,float)
70- CFLAGS += -fsingle-precision-constant
71- CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_FLOAT
72- else
73- CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_DOUBLE
74- endif
75-
76- AFLAGS = -mthumb -march=armv8.1-m.main $(CFLAGS_FPU )
77-
78- LDFLAGS += -nostdlib
79- LDFLAGS += -T$(BUILD ) /ensemble.ld -Map=$@ .map --cref --gc-sections
80- LDFLAGS += --wrap=dcd_event_handler
819
82- # Tune for Debugging or Optimization
83- ifeq ($(DEBUG ) , 1)
84- CFLAGS += -Og -ggdb3
85- # Disable text compression in debug builds
86- MICROPY_ROM_TEXT_COMPRESSION = 0
87- else
88- CFLAGS += -O2 -DNDEBUG
89- endif
90-
91- LIBS += "$(shell $(CC ) $(CFLAGS ) -print-libgcc-file-name) "
92-
93- JLINK_CMD = '\
10+ JLINK_CMD_PREFIX = \
9411ExitOnError 1\n\
9512Device $(JLINK_DEV ) \n\
9613SelectInterface SWD\n\
9714Speed auto\n\
9815Connect\n\
9916Reset\n\
100- ShowHWStatus\n\
101- LoadFile "$(BUILD ) /firmware_toc.bin",0x8057f1c0\n\
102- LoadFile "$(BUILD ) /firmware.bin",0x80000000\n\
103- Reset\n\
104- Exit'
105-
106- # ###############################################################################
107- # Source files and libraries
17+ ShowHWStatus\n
10818
109- SRC_O += \
110- shared/runtime/gchelper_thumb2.o
19+ JLINK_CMD_SUFFIX = \
20+ Reset\n\
21+ Exit
11122
112- SRC_C = \
113- alif_flash.c \
114- fatfs_port.c \
115- machine_pin.c \
116- main.c \
117- modalif.c \
118- mphalport.c \
119- mpuart.c \
120- msc_disk.c \
121- ospi_flash.c \
122- pendsv.c \
123- system_tick.c \
124- se_services.c \
125- usbd.c \
126- $(wildcard $(BOARD_DIR ) /* .c)
23+ ifeq ($(MCU_CORE ) ,M55_HP)
12724
128- ifeq ($(MICROPY_FLOAT_IMPL ) ,float)
129- LIBM_SRC_C += $(SRC_LIB_LIBM_C )
130- LIBM_SRC_C += $(SRC_LIB_LIBM_SQRT_HW_C )
131- $(BUILD ) /lib/libm/% .o : CFLAGS += -Wno-maybe-uninitialized
132- else
133- LIBM_SRC_C += $(SRC_LIB_LIBM_DBL_C )
134- LIBM_SRC_C += $(SRC_LIB_LIBM_DBL_SQRT_HW_C )
135- $(BUILD ) /lib/libm_dbl/% .o : CFLAGS += -Wno-maybe-uninitialized
136- endif
25+ ALIF_TOC_CONFIG = mcu/M55_HP_cfg.json
26+ ALIF_TOC_APPS = $(BUILD ) /M55_HP/firmware.bin
27+ JLINK_CMD = '\
28+ $(JLINK_CMD_PREFIX ) \
29+ LoadFile "$(BUILD ) /M55_HP/firmware.bin",0x80020000\n\
30+ $(JLINK_CMD_SUFFIX ) '
13731
138- SHARED_SRC_C += $(addprefix shared/,\
139- libc/string0.c \
140- netutils/dhcpserver.c \
141- netutils/netutils.c \
142- netutils/trace.c \
143- readline/readline.c \
144- runtime/gchelper_native.c \
145- runtime/interrupt_char.c \
146- runtime/mpirq.c \
147- runtime/pyexec.c \
148- runtime/softtimer.c \
149- runtime/stdout_helpers.c \
150- runtime/sys_stdio_mphal.c \
151- timeutils/timeutils.c \
152- tinyusb/mp_usbd.c \
153- tinyusb/mp_usbd_cdc.c \
154- tinyusb/mp_usbd_descriptor.c \
155- )
32+ else ifeq ($(MCU_CORE),M55_HE)
15633
157- DRIVERS_SRC_C += $( addprefix drivers/,\
158- bus/softspi.c \
159- bus/softqspi.c \
160- memory/spiflash.c \
161- dht/dht.c \
162- )
34+ ALIF_TOC_CONFIG = mcu/M55_HE_cfg.json
35+ ALIF_TOC_APPS = $( BUILD ) /M55_HE/firmware.bin
36+ JLINK_CMD = ' \
37+ $( JLINK_CMD_PREFIX ) \
38+ LoadFile " $( BUILD ) /M55_HE/firmware.bin",0x80320000\n \
39+ $( JLINK_CMD_SUFFIX ) '
16340
164- TINYUSB_SRC_C += \
165- lib/tinyusb/src/tusb.c \
166- lib/tinyusb/src/class/cdc/cdc_device.c \
167- lib/tinyusb/src/class/msc/msc_device.c \
168- lib/tinyusb/src/common/tusb_fifo.c \
169- lib/tinyusb/src/device/usbd.c \
170- lib/tinyusb/src/device/usbd_control.c \
171- tinyusb_port/tusb_alif_dcd.c \
41+ else ifeq ($(MCU_CORE),M55_DUAL)
17242
173- ALIF_SRC_C += $(addprefix $(ALIF_DFP_REL_TOP ) /,\
174- Device/common/source/clk.c \
175- Device/common/source/mpu_M55.c \
176- Device/common/source/system_M55.c \
177- Device/common/source/system_utils.c \
178- Device/core/$(MCU_CORE ) /source/startup_$(MCU_CORE ) .c \
179- drivers/source/adc.c \
180- drivers/source/mhu_driver.c \
181- drivers/source/mhu_receiver.c \
182- drivers/source/mhu_sender.c \
183- drivers/source/pinconf.c \
184- drivers/source/uart.c \
185- drivers/source/utimer.c \
186- ospi_xip/source/ospi/ospi_drv.c \
187- se_services/source/services_host_application.c \
188- se_services/source/services_host_boot.c \
189- se_services/source/services_host_clocks.c \
190- se_services/source/services_host_cryptocell.c \
191- se_services/source/services_host_handler.c \
192- se_services/source/services_host_system.c \
193- )
43+ ALIF_TOC_CONFIG = mcu/M55_DUAL_cfg.json
44+ ALIF_TOC_APPS = $(BUILD ) /M55_HP/firmware.bin $(BUILD ) /M55_HE/firmware.bin
45+ JLINK_CMD = '\
46+ $(JLINK_CMD_PREFIX ) \
47+ LoadFile "$(BUILD ) /M55_HP/firmware.bin",0x80020000\n\
48+ LoadFile "$(BUILD ) /M55_HE/firmware.bin",0x80320000\n\
49+ $(JLINK_CMD_SUFFIX ) '
19450
195- $(BUILD ) /tinyusb_port/tusb_alif_dcd.o : CFLAGS += -Wno-unused-variable -DTUSB_ALIF_NO_IRQ_CFG=1
196- $(BUILD ) /$(ALIF_DFP_REL_TOP ) /se_services/source/services_host_boot.o : CFLAGS += -Wno-stringop-truncation
51+ else
52+ $(error Invalid MCU core specified))
53+ endif
19754
198- # List of sources for qstr extraction
199- SRC_QSTR += $(SRC_C ) $(SHARED_SRC_C ) $(GEN_PINS_SRC )
55+ include ../../py/mkenv.mk
56+ include mpconfigport.mk
57+ include $(BOARD_DIR ) /mpconfigboard.mk
20058
201- OBJ += $(PY_O )
202- OBJ += $(addprefix $(BUILD ) /, $(SRC_O ) )
203- OBJ += $(addprefix $(BUILD ) /, $(SRC_C:.c=.o ) )
204- OBJ += $(addprefix $(BUILD ) /, $(LIBM_SRC_C:.c=.o ) )
205- OBJ += $(addprefix $(BUILD ) /, $(SHARED_SRC_C:.c=.o ) )
206- OBJ += $(addprefix $(BUILD ) /, $(DRIVERS_SRC_C:.c=.o ) )
207- OBJ += $(addprefix $(BUILD ) /, $(TINYUSB_SRC_C:.c=.o ) )
208- OBJ += $(addprefix $(BUILD ) /, $(ALIF_SRC_C:.c=.o ) )
209- OBJ += $(GEN_PINS_SRC:.c=.o )
59+ # include py core make definitions
60+ include $(TOP ) /py/py.mk
61+ include $(TOP ) /extmod/extmod.mk
21062
21163# ###############################################################################
21264# Main targets
21365
214- .DELETE_ON_ERROR :
215-
21666.PHONY : all
217- all : $(BUILD ) /firmware_toc.bin
67+ all : $(BUILD ) /firmware.toc.bin
68+
69+ # Force make commands to run the targets every time
70+ # regardless of whether firmware.toc.bin already exists
71+ # to detect changes in the source files and rebuild.
72+ .PHONY : $(BUILD ) /M55_HE/firmware.bin
73+ .PHONY : $(BUILD ) /M55_HP/firmware.bin
21874
219- $(BUILD ) /ensemble.ld : $(LD_FILE )
220- $(ECHO ) " Preprocess linker script $@ "
221- $(Q )$(CPP ) -P -E $(CFLAGS ) $^ > $@
75+ $(BUILD ) :
76+ $(MKDIR ) -p $@
22277
223- $(BUILD ) /firmware.elf : $(OBJ ) $(BUILD ) /ensemble.ld
224- $(ECHO ) " Link $@ "
225- $(Q )$(LD ) $(LDFLAGS ) -o $@ $(OBJ ) $(LIBS )
226- $(Q )$(SIZE ) $@
78+ $(BUILD ) /M55_HP/firmware.bin :
79+ make -f alif.mk MCU_CORE=M55_HP
22780
228- $(BUILD ) /firmware.bin : $( BUILD ) /firmware.elf
229- $( Q )$( OBJCOPY ) -Obinary $^ $( BUILD ) /firmware.bin
81+ $(BUILD ) /M55_HE/ firmware.bin :
82+ make -f alif.mk MCU_CORE=M55_HE
23083
231- $(BUILD ) /firmware_toc. bin : $(BUILD ) /firmware.bin
84+ $(BUILD ) /firmware.toc. bin : $(ALIF_TOC_APPS )
23285 $(Q ) python $(ALIF_TOOLS ) /app-gen-toc.py \
233- --filename $(abspath $(BUILD ) /$(ALIF_TOC_CONFIG ) ) \
86+ --filename $(abspath $(ALIF_TOC_CONFIG ) ) \
87+ --config-dir $(BOARD_DIR ) \
23488 --output-dir $(BUILD ) \
23589 --firmware-dir $(BUILD ) \
23690 --output $@
23791
23892.PHONY : deploy
239- deploy : $(BUILD ) /firmware_toc .bin
93+ deploy : $(BUILD ) /firmware.toc .bin
24094 $(ECHO ) " Writing $< to the board"
24195 $(Q ) python $(ALIF_TOOLS ) /app-write-mram.py \
24296 --cfg-part $(ALIF_TOOLKIT_CFG_PART ) \
@@ -245,7 +99,7 @@ deploy: $(BUILD)/firmware_toc.bin
24599 --images file:$(BUILD ) /application_package.ds
246100
247101.PHONY : deploy-jlink
248- deploy-jlink : $(BUILD ) /firmware_toc.bin
102+ deploy-jlink : $(ALIF_TOC_APPS )
249103 $(Q ) echo -e $(JLINK_CMD ) | $(JLINK_EXE )
250104
251105.PHONY : maintenance
@@ -260,17 +114,4 @@ update-system-package:
260114 --cfg-part $(ALIF_TOOLKIT_CFG_PART ) \
261115 --port $(PORT )
262116
263- # ###############################################################################
264- # Remaining make rules
265-
266- # Use a pattern rule here so that make will only call make-pins.py once to make
267- # both pins_board.c and pins_board.h
268- $(BUILD ) /% _board.c $(HEADER_BUILD ) /% _board.h : $(BOARD_DIR ) /% .csv $(GEN_PIN_MKPINS ) $(GEN_PIN_PREFIX ) | $(HEADER_BUILD )
269- $(ECHO ) " GEN $@ "
270- $(Q )$(PYTHON ) $(GEN_PIN_MKPINS ) \
271- --board-csv $(GEN_PINS_BOARD_CSV ) \
272- --prefix $(GEN_PIN_PREFIX ) \
273- --output-source $(GEN_PINS_SRC ) \
274- --output-header $(GEN_PINS_HDR )
275-
276117include $(TOP ) /py/mkrules.mk
0 commit comments