summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Ebensberger <philipp.ebensberger@3bricks-software.de>2022-06-19 23:00:38 +0200
committerDamien George <damien@micropython.org>2022-06-24 17:58:25 +1000
commitfbc50196ad60fa548e79f8d1e5d87c3fa93c7848 (patch)
tree19916ac9bfc5b309f96fd239bda26cd19b2d6b72
parentdb7682e02d3ffd3338f20effc9ad4735a48bf774 (diff)
mimxrt/Makefile: Refactor Makefile and divide it into sections.
Reworks grouping of Makefile variables and reorders variable values in alphabetic order.
-rw-r--r--ports/mimxrt/Makefile363
1 files changed, 226 insertions, 137 deletions
diff --git a/ports/mimxrt/Makefile b/ports/mimxrt/Makefile
index 759fb5c45..7f93a6826 100644
--- a/ports/mimxrt/Makefile
+++ b/ports/mimxrt/Makefile
@@ -1,72 +1,61 @@
+# =============================================================================
+# Parameter Configuration
+# =============================================================================
+
BOARD ?= TEENSY40
BOARD_DIR ?= boards/$(BOARD)
BUILD ?= build-$(BOARD)
-
PORT ?= /dev/ttyACM0
-
CROSS_COMPILE ?= arm-none-eabi-
+GIT_SUBMODULES = lib/tinyusb lib/nxp_driver lib/lwip lib/mbedtls
-ifeq ($(wildcard $(BOARD_DIR)/.),)
-$(error Invalid BOARD specified: $(BOARD_DIR))
-endif
-
-include ../../py/mkenv.mk
-include $(BOARD_DIR)/mpconfigboard.mk
+# MicroPython feature configurations
+FROZEN_MANIFEST ?= boards/manifest.py
+MICROPY_VFS_LFS2 ?= 1
+MICROPY_VFS_FAT ?= 1
-LD_MEMORY_CONFIG_DEFINES += \
- MICROPY_HW_FLASH_TYPE=$(MICROPY_HW_FLASH_TYPE) \
- MICROPY_HW_FLASH_SIZE=$(MICROPY_HW_FLASH_SIZE)
+# qstr definitions (must come before including py.mk)
+QSTR_DEFS = qstrdefsport.h
+QSTR_GLOBAL_DEPENDENCIES = $(BOARD_DIR)/mpconfigboard.h
-ifdef MICROPY_HW_FLASH_RESERVED
-LD_MEMORY_CONFIG_DEFINES += MICROPY_HW_FLASH_RESERVED=$(MICROPY_HW_FLASH_RESERVED)
-endif
+# Generation scripts
+MAKE_PINS = boards/make-pins.py
+MAKE_FLEXRAM_LD = boards/make-flexram-config.py
-ifdef MICROPY_HW_SDRAM_AVAIL
-CFLAGS += \
- -DMICROPY_HW_SDRAM_AVAIL=$(MICROPY_HW_SDRAM_AVAIL) \
- -DMICROPY_HW_SDRAM_SIZE=$(MICROPY_HW_SDRAM_SIZE)
+# Include py make environment
+include ../../py/mkenv.mk
-LD_MEMORY_CONFIG_DEFINES += \
- MICROPY_HW_SDRAM_AVAIL=$(MICROPY_HW_SDRAM_AVAIL) \
- MICROPY_HW_SDRAM_SIZE=$(MICROPY_HW_SDRAM_SIZE)
+# Include micropython configuration board makefile
+ifeq ($(wildcard $(BOARD_DIR)/.),)
+$(error Invalid BOARD specified: $(BOARD_DIR))
endif
-
-# Qstr definitions (must come before including py.mk)
-QSTR_DEFS = qstrdefsport.h
-QSTR_GLOBAL_DEPENDENCIES = $(BOARD_DIR)/mpconfigboard.h
-
-# MicroPython feature configurations
-FROZEN_MANIFEST ?= boards/manifest.py
-MICROPY_VFS_LFS2 ?= 1
-MICROPY_VFS_FAT ?= 1
+include $(BOARD_DIR)/mpconfigboard.mk
# Include py core make definitions
include $(TOP)/py/py.mk
include $(TOP)/extmod/extmod.mk
-GIT_SUBMODULES = lib/tinyusb lib/nxp_driver lib/lwip lib/mbedtls
-
+# Set SDK directory based on MCU_SERIES
MCU_DIR = lib/nxp_driver/sdk/devices/$(MCU_SERIES)
+
+# Select linker scripts based on MCU_SERIES
LD_FILES = boards/$(MCU_SERIES).ld boards/common.ld
-MAKE_PINS = boards/make-pins.py
-MAKE_FLEXRAM_LD = boards/make-flexram-config.py
-BOARD_PINS = $(BOARD_DIR)/pins.csv
+# Parameter configurations for generation
AF_FILE = boards/$(MCU_SERIES)_af.csv
+BOARD_PINS = $(BOARD_DIR)/pins.csv
PREFIX_FILE = boards/mimxrt_prefix.c
-GEN_PINS_SRC = $(BUILD)/pins_gen.c
-GEN_PINS_HDR = $(HEADER_BUILD)/pins.h
-GEN_PINS_QSTR = $(BUILD)/pins_qstr.h
+GEN_FLEXRAM_CONFIG_SRC = $(BUILD)/flexram_config.s
GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h
GEN_PINS_AF_PY = $(BUILD)/pins_af.py
-GEN_FLEXRAM_CONFIG_SRC = $(BUILD)/flexram_config.s
+GEN_PINS_HDR = $(HEADER_BUILD)/pins.h
+GEN_PINS_QSTR = $(BUILD)/pins_qstr.h
+GEN_PINS_SRC = $(BUILD)/pins_gen.c
-# mcu driver cause following warnings
-#CFLAGS += -Wno-error=float-equal -Wno-error=nested-externs
-CFLAGS += -Wno-error=unused-parameter
+# =============================================================================
+# Includes
+# =============================================================================
-INC += -I.
-INC += -Ihal
INC += -I$(BOARD_DIR)
INC += -I$(BUILD)
INC += -I$(TOP)
@@ -77,90 +66,19 @@ INC += -I$(TOP)/lib/oofatfs
INC += -I$(TOP)/lib/tinyusb/hw
INC += -I$(TOP)/lib/tinyusb/hw/bsp/teensy_40
INC += -I$(TOP)/lib/tinyusb/src
-
-CFLAGS_MCU = -mtune=cortex-m7 -mcpu=cortex-m7
-CFLAGS += $(INC) -Wall -Werror -Wdouble-promotion -Wfloat-conversion -std=c99 -nostdlib -mthumb $(CFLAGS_MCU)
-CFLAGS += -DCPU_$(MCU_SERIES) -DCPU_$(MCU_VARIANT) -DBOARD_$(BOARD)
-CFLAGS += -DXIP_EXTERNAL_FLASH=1 \
- -DXIP_BOOT_HEADER_ENABLE=1 \
- -DFSL_SDK_ENABLE_DRIVER_CACHE_CONTROL=1 \
- -DCFG_TUSB_MCU=OPT_MCU_MIMXRT10XX \
- -D__STARTUP_CLEAR_BSS \
- -D__STARTUP_INITIALIZE_RAMFUNCTION \
- -D__START=main \
- -DCPU_HEADER_H='<$(MCU_SERIES).h>' \
- -DCLOCK_CONFIG_H='<boards/$(MCU_SERIES)_clock_config.h>' \
- -DBOARD_FLASH_SIZE=$(MICROPY_HW_FLASH_SIZE) \
- -DMICROPY_HW_FLASH_SIZE=$(MICROPY_HW_FLASH_SIZE) \
-
-CFLAGS += -DI2C_RETRY_TIMES=1000000 -DSPI_RETRY_TIMES=1000000 -DUART_RETRY_TIMES=1000000
-
-ifeq ($(MICROPY_PY_MACHINE_SDCARD),1)
-CFLAGS += -DMICROPY_PY_MACHINE_SDCARD=1
-endif
-
-CFLAGS += $(CFLAGS_MOD) $(CFLAGS_EXTRA)
-
-# Configure floating point support
-ifeq ($(MICROPY_FLOAT_IMPL),double)
-CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_DOUBLE
-CFLAGS_MCU += -mfloat-abi=hard -mfpu=fpv5-d16
-else
-ifeq ($(MICROPY_FLOAT_IMPL),none)
-CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_NONE
-else
-CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_FLOAT
-CFLAGS += -fsingle-precision-constant
-CFLAGS_MCU += -mfloat-abi=softfp -mfpu=fpv5-sp-d16
-endif
-endif
-
-SUPPORTS_HARDWARE_FP_SINGLE = 0
-SUPPORTS_HARDWARE_FP_DOUBLE = 0
-
-LDFLAGS = -Map=$@.map --cref --print-memory-usage
-LDDEFINES = $(addprefix -D, $(LD_MEMORY_CONFIG_DEFINES))
-LIBS = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
-
-# Tune for Debugging or Optimization
-ifeq ($(DEBUG),1)
-CFLAGS += -Og -ggdb
-LDFLAGS += --gc-sections
-CFLAGS += -fdata-sections -ffunction-sections
-else
-CFLAGS += -Os -DNDEBUG
-LDFLAGS += --gc-sections
-CFLAGS += -fdata-sections -ffunction-sections
-endif
+INC += -I.
+INC += -Ihal
# All settings for Ethernet support are controller by the value of MICROPY_PY_LWIP
ifeq ($(MICROPY_PY_LWIP), 1)
-
INC += -Ilwip_inc
INC += -Ihal/phy
-
-SRC_MOD := $(filter-out %/mbedtls/library/error.c, $(SRC_MOD))
-
-SRC_ETH_C += \
- hal/phy/mdio/enet/fsl_enet_mdio.c \
- hal/phy/device/phydp83825/fsl_phydp83825.c \
- hal/phy/device/phydp83848/fsl_phydp83848.c \
- hal/phy/device/phyksz8081/fsl_phyksz8081.c \
- hal/phy/device/phylan8720/fsl_phylan8720.c \
- lib/mbedtls_errors/mp_mbedtls_errors.c \
- $(MCU_DIR)/drivers/fsl_enet.c \
-
-SRC_QSTR += \
- extmod/modnetwork.c \
- extmod/moduwebsocket.c \
- extmod/modusocket.c \
- network_lan.c \
-
-CFLAGS += -DFSL_FEATURE_PHYKSZ8081_USE_RMII50M_MODE=1 \
- -DMBEDTLS_CONFIG_FILE='"mbedtls/mbedtls_config.h"'
-
endif
+# =============================================================================
+# Sources
+# =============================================================================
+
# TinyUSB Stack source
SRC_TINYUSB_C += \
lib/tinyusb/src/class/cdc/cdc_device.c \
@@ -176,6 +94,20 @@ SRC_TINYUSB_C += \
lib/tinyusb/src/portable/nxp/transdimension/dcd_transdimension.c \
lib/tinyusb/src/tusb.c
+# All settings for Ethernet support are controller by the value of MICROPY_PY_LWIP
+ifeq ($(MICROPY_PY_LWIP), 1)
+SRC_MOD := $(filter-out %/mbedtls/library/error.c, $(SRC_MOD))
+SRC_ETH_C += \
+ $(MCU_DIR)/drivers/fsl_enet.c \
+ hal/phy/device/phydp83825/fsl_phydp83825.c \
+ hal/phy/device/phydp83848/fsl_phydp83848.c \
+ hal/phy/device/phyksz8081/fsl_phyksz8081.c \
+ hal/phy/device/phylan8720/fsl_phylan8720.c \
+ hal/phy/mdio/enet/fsl_enet_mdio.c \
+ lib/mbedtls_errors/mp_mbedtls_errors.c
+endif
+
+# NXP SDK sources
SRC_HAL_IMX_C += \
$(MCU_DIR)/drivers/fsl_adc.c \
$(MCU_DIR)/drivers/fsl_cache.c \
@@ -213,6 +145,7 @@ SRC_HAL_IMX_C += \
$(MCU_DIR)/drivers/fsl_qtmr.c
endif
+# C source files
SRC_C += \
board_init.c \
boards/$(MCU_SERIES)_clock_config.c \
@@ -254,9 +187,9 @@ SRC_C += \
sdcard.c \
shared/libc/printf.c \
shared/libc/string0.c \
+ shared/netutils/dhcpserver.c \
shared/netutils/netutils.c \
shared/netutils/trace.c \
- shared/netutils/dhcpserver.c \
shared/readline/readline.c \
shared/runtime/gchelper_native.c \
shared/runtime/interrupt_char.c \
@@ -273,33 +206,28 @@ SRC_C += \
$(SRC_ETH_C) \
ifeq ($(MICROPY_HW_FLASH_TYPE), qspi_nor)
-CFLAGS += -DBOARD_FLASH_OPS_HEADER_H=\"hal/flexspi_nor_flash.h\"
SRC_C += hal/flexspi_nor_flash.c
ifeq ($(MICROPY_HW_BOARD_FLASH_FILES), 1)
-CFLAGS += -DBOARD_FLASH_CONFIG_HEADER_H=\"$(BOARD)_flexspi_flash_config.h\"
SRC_C += $(BOARD_DIR)/qspi_nor_flash_config.c
else
-CFLAGS += -DBOARD_FLASH_CONFIG_HEADER_H=\"hal/flexspi_flash_config.h\"
SRC_C += hal/qspi_nor_flash_config.c
-endif
+endif # qspi_nor
#
else ifeq ($(MICROPY_HW_FLASH_TYPE), hyperflash)
-CFLAGS += -DBOARD_FLASH_OPS_HEADER_H=\"hal/flexspi_hyper_flash.h\"
SRC_C += hal/flexspi_hyper_flash.c
ifeq ($(MICROPY_HW_BOARD_FLASH_FILES), 1)
-CFLAGS += -DBOARD_FLASH_CONFIG_HEADER_H=\"$(BOARD)_flexspi_flash_config.h\"
SRC_C += $(BOARD_DIR)/qspi_hyper_flash_config.c
else
-CFLAGS += -DBOARD_FLASH_CONFIG_HEADER_H=\"hal/flexspi_flash_config.h\"
SRC_C += hal/qspi_hyper_flash_config.c
-endif
+endif # hyperflash
#
else
$(error Error: Unknown board flash type $(MICROPY_HW_FLASH_TYPE))
endif
+# Math library source files
ifeq ($(MICROPY_FLOAT_IMPL),double)
LIBM_SRC_C += $(addprefix lib/libm_dbl/,\
__cos.c \
@@ -386,19 +314,31 @@ LIBM_SRC_C += lib/libm/ef_sqrt.c
endif
endif
-LIBM_O = $(addprefix $(BUILD)/, $(LIBM_SRC_C:.c=.o))
-
-# Too many warnings in libm_dbl, disable for now.
-ifeq ($(MICROPY_FLOAT_IMPL),double)
-$(LIBM_O): CFLAGS := $(filter-out -Wdouble-promotion -Wfloat-conversion, $(CFLAGS))
-endif
+# Reset variables
+SUPPORTS_HARDWARE_FP_SINGLE = 0
+SUPPORTS_HARDWARE_FP_DOUBLE = 0
+# Assembly source files
SRC_SS = \
$(MCU_DIR)/gcc/startup_$(MCU_SERIES).S \
hal/resethandler_MIMXRT10xx.S
SRC_S += shared/runtime/gchelper_m3.s \
+# =============================================================================
+# QSTR Sources
+# =============================================================================
+
+# All settings for Ethernet support are controller by the value of MICROPY_PY_LWIP
+ifeq ($(MICROPY_PY_LWIP), 1)
+SRC_QSTR += \
+ extmod/modlwip.c \
+ extmod/modnetwork.c \
+ extmod/modusocket.c \
+ extmod/moduwebsocket.c \
+ network_lan.c
+endif
+
# List of sources for qstr extraction
SRC_QSTR += \
extmod/modonewire.c \
@@ -421,7 +361,150 @@ SRC_QSTR += \
pin.c \
shared/runtime/mpirq.c \
shared/runtime/sys_stdio_mphal.c \
- $(GEN_PINS_SRC) \
+ $(GEN_PINS_SRC)
+
+# =============================================================================
+# Compiler Flags
+# =============================================================================
+
+ifeq ($(DEBUG),1)
+CFLAGS += -Og -ggdb
+else
+CFLAGS += -Os -DNDEBUG
+endif
+
+# Configure default compiler flags
+CFLAGS += \
+ $(INC) \
+ -D__START=main \
+ -D__STARTUP_CLEAR_BSS \
+ -D__STARTUP_INITIALIZE_RAMFUNCTION \
+ -DBOARD_$(BOARD) \
+ -DBOARD_FLASH_SIZE=$(MICROPY_HW_FLASH_SIZE) \
+ -DCFG_TUSB_MCU=OPT_MCU_MIMXRT10XX \
+ -DCLOCK_CONFIG_H='<boards/$(MCU_SERIES)_clock_config.h>' \
+ -DCPU_$(MCU_SERIES) \
+ -DCPU_$(MCU_VARIANT) \
+ -DCPU_HEADER_H='<$(MCU_SERIES).h>' \
+ -DFSL_SDK_ENABLE_DRIVER_CACHE_CONTROL=1 \
+ -DI2C_RETRY_TIMES=1000000 \
+ -DMICROPY_HW_FLASH_SIZE=$(MICROPY_HW_FLASH_SIZE) \
+ -DSPI_RETRY_TIMES=1000000 \
+ -DUART_RETRY_TIMES=1000000 \
+ -DXIP_BOOT_HEADER_ENABLE=1 \
+ -DXIP_EXTERNAL_FLASH=1 \
+ -fdata-sections \
+ -ffunction-sections \
+ -mcpu=cortex-m7 \
+ -mthumb \
+ -mtune=cortex-m7 \
+ -nostdlib \
+ -std=c99 \
+ -Wall \
+ -Wdouble-promotion \
+ -Werror \
+ -Wfloat-conversion \
+ -Wno-error=unused-parameter
+
+ifeq ($(MICROPY_HW_FLASH_TYPE), qspi_nor)
+CFLAGS += -DBOARD_FLASH_OPS_HEADER_H=\"hal/flexspi_nor_flash.h\"
+
+ifeq ($(MICROPY_HW_BOARD_FLASH_FILES), 1)
+CFLAGS += -DBOARD_FLASH_CONFIG_HEADER_H=\"$(BOARD)_flexspi_flash_config.h\"
+else
+CFLAGS += -DBOARD_FLASH_CONFIG_HEADER_H=\"hal/flexspi_flash_config.h\"
+endif # qspi_nor
+#
+else ifeq ($(MICROPY_HW_FLASH_TYPE), hyperflash)
+CFLAGS += -DBOARD_FLASH_OPS_HEADER_H=\"hal/flexspi_hyper_flash.h\"
+
+ifeq ($(MICROPY_HW_BOARD_FLASH_FILES), 1)
+CFLAGS += -DBOARD_FLASH_CONFIG_HEADER_H=\"$(BOARD)_flexspi_flash_config.h\"
+else
+CFLAGS += -DBOARD_FLASH_CONFIG_HEADER_H=\"hal/flexspi_flash_config.h\"
+endif # hyperflash
+#
+else
+$(error Error: Unknown board flash type $(MICROPY_HW_FLASH_TYPE))
+endif
+
+# Configure floating point support
+ifeq ($(MICROPY_FLOAT_IMPL),double)
+CFLAGS += \
+ -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_DOUBLE \
+ -mfloat-abi=hard \
+ -mfpu=fpv5-d16
+else
+ifeq ($(MICROPY_FLOAT_IMPL),none)
+CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_NONE
+else
+CFLAGS += \
+ -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_FLOAT \
+ -fsingle-precision-constant \
+ -mfloat-abi=softfp \
+ -mfpu=fpv5-sp-d16
+endif
+endif
+
+# Configure feature specific compiler flags
+ifeq ($(MICROPY_PY_MACHINE_SDCARD),1)
+CFLAGS += -DMICROPY_PY_MACHINE_SDCARD=1
+endif
+
+# All settings for Ethernet support are controller by the value of MICROPY_PY_LWIP
+ifeq ($(MICROPY_PY_LWIP), 1)
+CFLAGS += \
+ -DFSL_FEATURE_PHYKSZ8081_USE_RMII50M_MODE=1 \
+ -DMBEDTLS_CONFIG_FILE='"mbedtls/mbedtls_config.h"'
+endif
+
+ifdef MICROPY_HW_SDRAM_AVAIL
+CFLAGS += \
+ -DMICROPY_HW_SDRAM_AVAIL=$(MICROPY_HW_SDRAM_AVAIL) \
+ -DMICROPY_HW_SDRAM_SIZE=$(MICROPY_HW_SDRAM_SIZE)
+endif
+
+CFLAGS += $(CFLAGS_MOD) $(CFLAGS_EXTRA)
+
+# =============================================================================
+# Linker Flags
+# =============================================================================
+
+LDFLAGS = \
+ --cref \
+ --gc-sections \
+ --print-memory-usage \
+ -Map=$@.map
+
+# LDDEFINES are used for link time adaptation of linker scripts, utilizing
+# the C preprocessor. Therefore keep LDDEFINES separated from LDFLAGS!
+
+LDDEFINES = \
+ -DMICROPY_HW_FLASH_TYPE=$(MICROPY_HW_FLASH_TYPE) \
+ -DMICROPY_HW_FLASH_SIZE=$(MICROPY_HW_FLASH_SIZE)
+
+ifdef MICROPY_HW_FLASH_RESERVED
+LDDEFINES += -DMICROPY_HW_FLASH_RESERVED=$(MICROPY_HW_FLASH_RESERVED)
+endif
+
+ifdef MICROPY_HW_SDRAM_AVAIL
+LDDEFINES += \
+ -DMICROPY_HW_SDRAM_AVAIL=$(MICROPY_HW_SDRAM_AVAIL) \
+ -DMICROPY_HW_SDRAM_SIZE=$(MICROPY_HW_SDRAM_SIZE)
+endif
+
+# =============================================================================
+# Library and Object files
+# =============================================================================
+
+LIBS = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
+LIBM_O = $(addprefix $(BUILD)/, $(LIBM_SRC_C:.c=.o))
+
+# Too many warnings in libm_dbl, disable for now.
+ifeq ($(MICROPY_FLOAT_IMPL),double)
+$(LIBM_O): CFLAGS := $(filter-out -Wdouble-promotion -Wfloat-conversion, $(CFLAGS))
+endif
+
OBJ += $(PY_O)
OBJ += $(LIBM_O)
@@ -434,8 +517,14 @@ OBJ += $(BUILD)/pins_gen.o
# Workaround for bug in older gcc, warning on "static usbd_device_t _usbd_dev = { 0 };"
$(BUILD)/lib/tinyusb/src/device/usbd.o: CFLAGS += -Wno-missing-braces
+# =============================================================================
+# Build targets
+# =============================================================================
+
all: $(BUILD)/firmware.hex $(BUILD)/firmware.bin
+# Process linker scripts with C preprocessor to exchange LDDEFINES and
+# aggregate output of preprocessor in a single linker script `link.ld`
$(BUILD)/firmware.elf: $(OBJ)
$(ECHO) "PREPROCESS LINK $@"
$(Q)$(CC) -E -x c $(LDDEFINES) $(LD_FILES) | grep -v '^#' > $(BUILD)/link.ld