Skip to content

Commit 8f82089

Browse files
iabdalkaderdpgeorge
authored andcommitted
alif: Support building the port for HE or HP or both cores.
With this new Makefile you can build the following: make BOARD=MY_BOARD MCU_CORE=M55_HP # build HP firmware/ToC. make BOARD=MY_BOARD MCU_CORE=M55_HE # build HE firmware/ToC. make BOARD=MY_BOARD MCU_CORE=M55_DUAL # build HE+HP firmware + ToC. Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
1 parent b7df5aa commit 8f82089

3 files changed

Lines changed: 343 additions & 226 deletions

File tree

ports/alif/Makefile

Lines changed: 55 additions & 214 deletions
Original file line numberDiff line numberDiff line change
@@ -1,242 +1,96 @@
1-
################################################################################
2-
# Initial setup of Makefile environment
3-
41
BOARD ?= ALIF_ENSEMBLE
52
BOARD_DIR ?= boards/$(BOARD)
63
BUILD ?= 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
275
GIT_SUBMODULES += lib/tinyusb lib/alif_ensemble-cmsis-dfp lib/alif-security-toolkit
286
PORT ?= /dev/ttyACM0
297

308
ALIF_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 = \
9411
ExitOnError 1\n\
9512
Device $(JLINK_DEV)\n\
9613
SelectInterface SWD\n\
9714
Speed auto\n\
9815
Connect\n\
9916
Reset\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-
276117
include $(TOP)/py/mkrules.mk

0 commit comments

Comments
 (0)