509 lines
14 KiB
Makefile
509 lines
14 KiB
Makefile
# Select the board to build for:
|
|
ifdef BOARD_DIR
|
|
# Custom board path - remove trailing slash and get the final component of
|
|
# the path as the board name.
|
|
BOARD ?= $(notdir $(BOARD_DIR:/=))
|
|
else
|
|
# If not given on the command line, then default to RA6M2_EK.
|
|
BOARD ?= EK_RA6M2
|
|
BOARD_DIR ?= boards/$(BOARD)
|
|
endif
|
|
|
|
ifeq ($(wildcard $(BOARD_DIR)/.),)
|
|
$(error Invalid BOARD specified: $(BOARD_DIR))
|
|
endif
|
|
|
|
# If the build directory is not given, make it reflect the board name.
|
|
BUILD ?= build-$(BOARD)
|
|
|
|
# select use wrapper function of FSP library
|
|
USE_FSP_FLASH = 1
|
|
|
|
include ../../py/mkenv.mk
|
|
-include mpconfigport.mk
|
|
include $(BOARD_DIR)/mpconfigboard.mk
|
|
|
|
USE_FSP_LPM ?= 1
|
|
USE_FSP_QSPI ?= 0
|
|
FSP_BOARD_NAME ?= $(shell echo $(BOARD) | tr '[:upper:]' '[:lower:]')
|
|
|
|
# qstr definitions (must come before including py.mk)
|
|
QSTR_DEFS += qstrdefsport.h
|
|
|
|
# Files that are generated and needed before the QSTR build.
|
|
QSTR_GLOBAL_DEPENDENCIES += mpconfigboard_common.h $(BOARD_DIR)/mpconfigboard.h
|
|
|
|
# MicroPython feature configurations
|
|
MICROPY_ROM_TEXT_COMPRESSION ?= 1
|
|
|
|
# File containing description of content to be frozen into firmware.
|
|
FROZEN_MANIFEST ?= boards/manifest.py
|
|
|
|
# include py core make definitions
|
|
include $(TOP)/py/py.mk
|
|
include $(TOP)/extmod/extmod.mk
|
|
|
|
GIT_SUBMODULES += lib/fsp lib/tinyusb
|
|
|
|
MCU_SERIES_UPPER = $(shell echo $(MCU_SERIES) | tr '[:lower:]' '[:upper:]')
|
|
CMSIS_MCU_LOWER = $(shell echo $(CMSIS_MCU) | tr '[:upper:]' '[:lower:]')
|
|
|
|
LD_DIR=boards
|
|
CMSIS_DIR=lib/cmsis/inc
|
|
HAL_DIR=lib/fsp
|
|
STARTUP_FILE ?= lib/fsp/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.o
|
|
SYSTEM_FILE ?= lib/fsp/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.o
|
|
|
|
# Select the cross compile prefix
|
|
CROSS_COMPILE ?= arm-none-eabi-
|
|
|
|
INC += -imacros boards/compiler_barrier.h
|
|
INC += -I.
|
|
INC += -Ifsp_cfg
|
|
INC += -I$(TOP)
|
|
INC += -I$(BUILD)
|
|
INC += -I$(TOP)/$(CMSIS_DIR)
|
|
INC += -I$(TOP)/$(HAL_DIR)
|
|
INC += -I$(TOP)/$(HAL_DIR)/ra/fsp/inc
|
|
INC += -I$(TOP)/$(HAL_DIR)/ra/fsp/inc/api
|
|
INC += -I$(TOP)/$(HAL_DIR)/ra/fsp/inc/instances
|
|
INC += -I$(TOP)/$(HAL_DIR)/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include
|
|
INC += -I$(TOP)/lib/tinyusb/hw
|
|
INC += -I$(TOP)/lib/tinyusb/src
|
|
INC += -I$(TOP)/shared/tinyusb
|
|
INC += -Ilwip_inc
|
|
ifeq ($(CMSIS_MCU),$(filter $(CMSIS_MCU),RA4M1 RA4W1 RA6M1 RA6M2 RA6M5))
|
|
INC += -Ira
|
|
endif
|
|
INC += -I$(BOARD_DIR)/ra_gen
|
|
INC += -I$(BOARD_DIR)/ra_cfg/driver
|
|
INC += -I$(BOARD_DIR)/ra_cfg/fsp_cfg
|
|
INC += -I$(BOARD_DIR)/ra_cfg/fsp_cfg/bsp
|
|
INC += -Idebug
|
|
|
|
CFLAGS += -D$(CMSIS_MCU)
|
|
CFLAGS += -DRA_HAL_H='<$(CMSIS_MCU)_hal.h>'
|
|
CFLAGS += -DRA_CFG_H='<$(FSP_BOARD_NAME)_conf.h>'
|
|
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_RAXXX
|
|
|
|
# Basic Cortex-M flags
|
|
CFLAGS_CORTEX_M = -mthumb
|
|
|
|
# Select hardware floating-point support
|
|
SUPPORTS_HARDWARE_FP_SINGLE = 0
|
|
SUPPORTS_HARDWARE_FP_DOUBLE = 0
|
|
ifeq ($(MCU_SERIES),$(filter $(MCU_SERIES),m4))
|
|
CFLAGS_CORTEX_M += -mfpu=fpv4-sp-d16 -mfloat-abi=hard
|
|
SUPPORTS_HARDWARE_FP_SINGLE = 1
|
|
endif
|
|
|
|
ifeq ($(MCU_SERIES),$(filter $(MCU_SERIES),m33))
|
|
CFLAGS_CORTEX_M += -mfpu=fpv5-sp-d16 -mfloat-abi=hard
|
|
SUPPORTS_HARDWARE_FP_SINGLE = 1
|
|
endif
|
|
|
|
# Options for particular MCU series
|
|
CFLAGS_MCU_RA4M1 = $(CFLAGS_CORTEX_M) -mtune=cortex-m4 -mcpu=cortex-m4
|
|
CFLAGS_MCU_RA4W1 = $(CFLAGS_CORTEX_M) -mtune=cortex-m4 -mcpu=cortex-m4
|
|
CFLAGS_MCU_RA6M1 = $(CFLAGS_CORTEX_M) -mtune=cortex-m4 -mcpu=cortex-m4
|
|
CFLAGS_MCU_RA6M2 = $(CFLAGS_CORTEX_M) -mtune=cortex-m4 -mcpu=cortex-m4
|
|
CFLAGS_MCU_RA6M5 = $(CFLAGS_CORTEX_M) -mtune=cortex-m33 -mcpu=cortex-m33
|
|
|
|
ASFLAGS += $(CFLAGS_CORTEX_M) -mcpu=cortex-$(MCU_SERIES)
|
|
CFLAGS += $(INC) -Wall -Wpointer-arith -Werror -Wdouble-promotion -Wfloat-conversion -std=gnu99 -nostdlib $(CFLAGS_EXTRA)
|
|
#CFLAGS += -D$(CMSIS_MCU)
|
|
CFLAGS += $(CFLAGS_MCU_$(CMSIS_MCU))
|
|
CFLAGS += $(COPT)
|
|
CFLAGS += -I$(BOARD_DIR)
|
|
|
|
# Configure floating point support
|
|
ifeq ($(MICROPY_FLOAT_IMPL),double)
|
|
CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_DOUBLE
|
|
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
|
|
endif
|
|
endif
|
|
|
|
LDFLAGS += -nostdlib -L $(LD_DIR) $(addprefix -T,$(LD_FILES)) -Map=$(@:.elf=.map) --cref
|
|
LDFLAGS += --defsym=_estack_reserve=8
|
|
LIBS += "$(shell $(CC) $(CFLAGS) -print-libgcc-file-name)"
|
|
|
|
# Remove uncalled code from the final image.
|
|
CFLAGS += -fdata-sections -ffunction-sections
|
|
LDFLAGS += --gc-sections
|
|
|
|
# Debugging/Optimization
|
|
CFLAGS += -g # always include debug info in the ELF
|
|
ifeq ($(DEBUG), 1)
|
|
CFLAGS += -DPENDSV_DEBUG
|
|
#COPT = -Og
|
|
COPT = -Os
|
|
# Disable text compression in debug builds
|
|
MICROPY_ROM_TEXT_COMPRESSION = 0
|
|
else
|
|
COPT += -Os -DNDEBUG
|
|
endif
|
|
|
|
# Flags for optional C++ source code
|
|
CXXFLAGS += $(filter-out -Wmissing-prototypes -Wold-style-definition -std=gnu99,$(CFLAGS))
|
|
|
|
# TODO make this common -- shouldn't be using these "private" vars from py.mk
|
|
ifneq ($(SRC_CXX)$(SRC_USERMOD_CXX)$(SRC_USERMOD_LIB_CXX),)
|
|
LIBSTDCPP_FILE_NAME = "$(shell $(CXX) $(CXXFLAGS) -print-file-name=libstdc++.a)"
|
|
LDFLAGS += -L"$(shell dirname $(LIBSTDCPP_FILE_NAME))"
|
|
endif
|
|
|
|
# Options for mpy-cross
|
|
MPY_CROSS_FLAGS += -march=armv7m
|
|
|
|
SHARED_SRC_C += $(addprefix shared/,\
|
|
libc/string0.c \
|
|
netutils/dhcpserver.c \
|
|
netutils/netutils.c \
|
|
netutils/trace.c \
|
|
readline/readline.c \
|
|
runtime/gchelper_native.c \
|
|
runtime/interrupt_char.c \
|
|
runtime/mpirq.c \
|
|
runtime/pyexec.c \
|
|
runtime/softtimer.c \
|
|
runtime/stdout_helpers.c \
|
|
runtime/sys_stdio_mphal.c \
|
|
timeutils/timeutils.c \
|
|
tinyusb/mp_cdc_common.c \
|
|
tinyusb/mp_usbd.c \
|
|
tinyusb/mp_usbd_descriptor.c \
|
|
)
|
|
|
|
# TinyUSB Stack source
|
|
TINYUSB_SRC_C += $(addprefix lib/tinyusb/,\
|
|
src/class/cdc/cdc_device.c \
|
|
src/class/dfu/dfu_rt_device.c \
|
|
src/class/hid/hid_device.c \
|
|
src/class/midi/midi_device.c \
|
|
src/class/msc/msc_device.c \
|
|
src/class/usbtmc/usbtmc_device.c \
|
|
src/class/vendor/vendor_device.c \
|
|
src/common/tusb_fifo.c \
|
|
src/device/usbd.c \
|
|
src/device/usbd_control.c \
|
|
src/portable/renesas/rusb2/dcd_rusb2.c \
|
|
src/portable/renesas/rusb2/hcd_rusb2.c \
|
|
src/portable/renesas/rusb2/rusb2_common.c \
|
|
src/tusb.c \
|
|
)
|
|
|
|
ifeq ($(MICROPY_FLOAT_IMPL),double)
|
|
LIBM_SRC_C += $(SRC_LIB_LIBM_DBL_C)
|
|
ifeq ($(SUPPORTS_HARDWARE_FP_DOUBLE),1)
|
|
LIBM_SRC_C += $(SRC_LIB_LIBM_DBL_SQRT_HW_C)
|
|
else
|
|
LIBM_SRC_C += $(SRC_LIB_LIBM_DBL_SQRT_SW_C)
|
|
endif
|
|
else
|
|
LIBM_SRC_C += $(SRC_LIB_LIBM_C)
|
|
ifeq ($(SUPPORTS_HARDWARE_FP_SINGLE),1)
|
|
LIBM_SRC_C += $(SRC_LIB_LIBM_SQRT_HW_C)
|
|
else
|
|
LIBM_SRC_C += $(SRC_LIB_LIBM_SQRT_SW_C)
|
|
endif
|
|
endif
|
|
|
|
DRIVERS_SRC_C += $(addprefix drivers/,\
|
|
bus/softspi.c \
|
|
bus/softqspi.c \
|
|
memory/spiflash.c \
|
|
dht/dht.c \
|
|
)
|
|
|
|
SRC_C += \
|
|
boardctrl.c \
|
|
main.c \
|
|
ra_hal.c \
|
|
ra_it.c \
|
|
rng.c \
|
|
mphalport.c \
|
|
mpnetworkport.c \
|
|
mpthreadport.c \
|
|
irq.c \
|
|
pendsv.c \
|
|
systick.c \
|
|
powerctrl.c \
|
|
powerctrlboot.c \
|
|
pybthread.c \
|
|
factoryreset.c \
|
|
timer.c \
|
|
led.c \
|
|
uart.c \
|
|
gccollect.c \
|
|
help.c \
|
|
machine_dac.c \
|
|
machine_i2c.c \
|
|
machine_spi.c \
|
|
machine_pin.c \
|
|
machine_rtc.c \
|
|
machine_sdcard.c \
|
|
extint.c \
|
|
usrsw.c \
|
|
flash.c \
|
|
flashbdev.c \
|
|
storage.c \
|
|
fatfs_port.c \
|
|
usbd.c \
|
|
$(wildcard $(BOARD_DIR)/*.c)
|
|
|
|
SRC_C += $(addprefix $(BOARD_DIR)/ra_gen/,\
|
|
common_data.c \
|
|
hal_data.c \
|
|
pin_data.c \
|
|
vector_data.c \
|
|
)
|
|
|
|
ifeq ($(MICROPY_SSL_MBEDTLS),1)
|
|
LIB_SRC_C += mbedtls/mbedtls_port.c
|
|
endif
|
|
|
|
ifeq ($(MICROPY_PY_BLUETOOTH),1)
|
|
SRC_C += mpbthciport.c
|
|
endif
|
|
|
|
ifeq ($(MICROPY_BLUETOOTH_NIMBLE),1)
|
|
SRC_C += mpnimbleport.c
|
|
endif
|
|
|
|
SRC_O += \
|
|
$(STARTUP_FILE) \
|
|
$(SYSTEM_FILE)
|
|
|
|
SRC_O += \
|
|
shared/runtime/gchelper_thumb2.o
|
|
|
|
HAL_SRC_C += $(addprefix $(HAL_DIR)/ra/fsp/src/bsp/mcu/all/,\
|
|
bsp_clocks.c \
|
|
bsp_common.c \
|
|
bsp_delay.c \
|
|
bsp_group_irq.c \
|
|
bsp_guard.c \
|
|
bsp_io.c \
|
|
bsp_irq.c \
|
|
bsp_register_protection.c \
|
|
bsp_rom_registers.c \
|
|
bsp_sbrk.c \
|
|
bsp_security.c \
|
|
)
|
|
|
|
HAL_SRC_C += $(addprefix $(HAL_DIR)/ra/fsp/src/,\
|
|
r_ioport/r_ioport.c \
|
|
r_sci_uart/r_sci_uart.c \
|
|
)
|
|
|
|
CFLAGS_FSP = -Wno-unused-variable -Wno-unused-function
|
|
$(BUILD)/lib/fsp/ra/fsp/src/r_sci_uart/r_sci_uart.o: CFLAGS += $(CFLAGS_FSP)
|
|
|
|
ifeq ($(USE_FSP_QSPI), 1)
|
|
CFLAGS += -DUSE_FSP_QSPI
|
|
HAL_SRC_C += $(HAL_DIR)/ra/fsp/src/r_qspi/r_qspi.c
|
|
endif
|
|
|
|
ifeq ($(USE_FSP_SDHI), 1)
|
|
CFLAGS += -DUSE_FSP_SDHI
|
|
HAL_SRC_C += $(HAL_DIR)/ra/fsp/src/r_sdhi/r_sdhi.c \
|
|
$(HAL_DIR)/ra/fsp/src/r_dtc/r_dtc.c
|
|
endif
|
|
|
|
ifeq ($(USE_FSP_LPM), 1)
|
|
CFLAGS += -DUSE_FSP_LPM
|
|
HAL_SRC_C += $(HAL_DIR)/ra/fsp/src/r_lpm/r_lpm.c
|
|
endif
|
|
|
|
ifeq ($(CMSIS_MCU),$(filter $(CMSIS_MCU),RA4M1 RA4W1))
|
|
ifeq ($(USE_FSP_FLASH), 1)
|
|
CFLAGS += -DUSE_FSP_FLASH
|
|
HAL_SRC_C += $(HAL_DIR)/ra/fsp/src/r_flash_lp/r_flash_lp.c
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(CMSIS_MCU),$(filter $(CMSIS_MCU),RA6M1 RA6M2 RA6M5))
|
|
ifeq ($(USE_FSP_FLASH), 1)
|
|
CFLAGS += -DUSE_FSP_FLASH
|
|
HAL_SRC_C += $(HAL_DIR)/ra/fsp/src/r_flash_hp/r_flash_hp.c
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(CMSIS_MCU),$(filter $(CMSIS_MCU),RA4M1 RA4W1 RA6M1 RA6M2 RA6M5))
|
|
HAL_SRC_C += $(addprefix ra/,\
|
|
ra_adc.c \
|
|
ra_dac.c \
|
|
ra_flash.c \
|
|
ra_gpio.c \
|
|
ra_i2c.c \
|
|
ra_icu.c \
|
|
ra_init.c \
|
|
ra_int.c \
|
|
ra_rtc.c \
|
|
ra_sci.c \
|
|
ra_spi.c \
|
|
ra_timer.c \
|
|
ra_gpt.c \
|
|
ra_utils.c \
|
|
)
|
|
|
|
endif
|
|
|
|
ifeq ($(MICROPY_HW_ENABLE_RNG),1)
|
|
CRYPTO_DIR = ra/fsp/src/r_sce_protected/crypto_procedures_protected/src/sce9/
|
|
|
|
INC += -I$(TOP)/$(HAL_DIR)/$(CRYPTO_DIR)/inc
|
|
INC += -I$(TOP)/$(HAL_DIR)/$(CRYPTO_DIR)/inc/api
|
|
INC += -I$(TOP)/$(HAL_DIR)/$(CRYPTO_DIR)/private/inc
|
|
INC += -I$(TOP)/$(HAL_DIR)/$(CRYPTO_DIR)/inc/instances
|
|
|
|
# The following FSP files are required for the random number generator.
|
|
HAL_SRC_C += $(addprefix $(HAL_DIR)/$(CRYPTO_DIR)/,\
|
|
public/r_sce.c \
|
|
public/r_sce_ecc.c \
|
|
public/r_sce_sha.c \
|
|
public/r_sce_aes.c \
|
|
private/r_sce_private.c \
|
|
primitive/r_sce_p00.c \
|
|
primitive/r_sce_p20.c \
|
|
primitive/r_sce_p26.c \
|
|
primitive/r_sce_p81.c \
|
|
primitive/r_sce_p82.c \
|
|
primitive/r_sce_p92.c \
|
|
primitive/r_sce_p40.c \
|
|
primitive/r_sce_func050.c \
|
|
primitive/r_sce_func051.c \
|
|
primitive/r_sce_func052.c \
|
|
primitive/r_sce_func053.c \
|
|
primitive/r_sce_func054.c \
|
|
primitive/r_sce_func100.c \
|
|
primitive/r_sce_func101.c \
|
|
primitive/r_sce_func040.c \
|
|
primitive/r_sce_func048.c \
|
|
primitive/r_sce_func102.c \
|
|
primitive/r_sce_func103.c \
|
|
primitive/r_sce_subprc01.c\
|
|
)
|
|
endif
|
|
|
|
OBJ += $(PY_O)
|
|
OBJ += $(addprefix $(BUILD)/, $(LIB_SRC_C:.c=.o))
|
|
OBJ += $(addprefix $(BUILD)/, $(LIBM_SRC_C:.c=.o))
|
|
OBJ += $(addprefix $(BUILD)/, $(SHARED_SRC_C:.c=.o))
|
|
OBJ += $(addprefix $(BUILD)/, $(DRIVERS_SRC_C:.c=.o))
|
|
OBJ += $(addprefix $(BUILD)/, $(HAL_SRC_C:.c=.o))
|
|
OBJ += $(addprefix $(BUILD)/, $(TINYUSB_SRC_C:.c=.o))
|
|
OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
|
|
OBJ += $(addprefix $(BUILD)/, $(SRC_CXX:.cpp=.o))
|
|
OBJ += $(addprefix $(BUILD)/, $(SRC_O))
|
|
OBJ += $(BUILD)/pins_$(BOARD).o
|
|
|
|
ifeq ($(CMSIS_MCU),RA6M5)
|
|
$(BUILD)/shared/runtime/gchelper_thumb2.o: $(TOP)/shared/runtime/gchelper_thumb2.s
|
|
$(ECHO) "AS $<"
|
|
$(Q)$(AS) $(ASFLAGS) -o $@ $<
|
|
endif
|
|
|
|
# This file contains performance critical functions so turn up the optimisation
|
|
# level. It doesn't add much to the code size and improves performance a bit.
|
|
# Don't use -O3 with this file because gcc tries to optimise memset in terms of itself.
|
|
$(BUILD)/shared/libc/string0.o: COPT += -O2
|
|
|
|
# We put several files into the first 16K section with the ISRs.
|
|
# If we compile these using -O0 then it won't fit. So if you really want these
|
|
# to be compiled with -O0, then edit boards/common.ld (in the .isr_vector section)
|
|
# and comment out the following lines.
|
|
$(BUILD)/$(OOFATFS_DIR)/ff.o: COPT += -Os
|
|
$(filter $(PY_BUILD)/../extmod/vfs_fat_%.o, $(PY_O)): COPT += -Os
|
|
$(PY_BUILD)/formatfloat.o: COPT += -Os
|
|
$(PY_BUILD)/parsenum.o: COPT += -Os
|
|
$(PY_BUILD)/mpprint.o: COPT += -Os
|
|
|
|
all: $(TOP)/lib/fsp/README.md $(BUILD)/firmware.hex $(BUILD)/firmware.bin
|
|
|
|
# For convenience, automatically fetch required submodules if they don't exist
|
|
$(TOP)/lib/fsp/README.md:
|
|
$(ECHO) "fsp submodule not found, fetching it now..."
|
|
(cd $(TOP) && git submodule update --init lib/fsp)
|
|
|
|
define GENERATE_ELF
|
|
$(ECHO) "LINK $(1)"
|
|
$(Q)$(LD) $(LDFLAGS) -o $(1) $(2) $(LDFLAGS_MOD) $(LIBS)
|
|
$(Q)$(SIZE) $(1)
|
|
endef
|
|
|
|
define GENERATE_BIN
|
|
$(ECHO) "GEN $(1)"
|
|
$(Q)$(OBJCOPY) -I ihex -O binary $(2) $(1)
|
|
endef
|
|
|
|
define GENERATE_HEX
|
|
$(ECHO) "GEN $(1)"
|
|
$(Q)$(OBJCOPY) -O ihex $(2) $(1)
|
|
endef
|
|
|
|
.PHONY:
|
|
|
|
$(BUILD)/firmware.bin: $(BUILD)/firmware.hex
|
|
$(call GENERATE_BIN,$@,$^)
|
|
|
|
$(BUILD)/firmware.hex: $(BUILD)/firmware.elf
|
|
$(call GENERATE_HEX,$@,$^)
|
|
|
|
$(BUILD)/firmware.elf: $(OBJ)
|
|
$(call GENERATE_ELF,$@,$^)
|
|
|
|
MAKE_PINS = boards/make-pins.py
|
|
BOARD_PINS = $(BOARD_DIR)/pins.csv
|
|
PREFIX_FILE = boards/ra_pin_prefix.c
|
|
ifeq ($(CMSIS_MCU),$(filter $(CMSIS_MCU),RA4M1))
|
|
AF_FILE = boards/ra4m1_af.csv
|
|
endif
|
|
ifeq ($(CMSIS_MCU),$(filter $(CMSIS_MCU),RA4W1))
|
|
AF_FILE = boards/ra4w1_af.csv
|
|
endif
|
|
ifeq ($(CMSIS_MCU),$(filter $(CMSIS_MCU),RA6M1))
|
|
AF_FILE = boards/ra6m1_af.csv
|
|
endif
|
|
ifeq ($(CMSIS_MCU),$(filter $(CMSIS_MCU),RA6M2))
|
|
AF_FILE = boards/ra6m2_af.csv
|
|
endif
|
|
ifeq ($(CMSIS_MCU),$(filter $(CMSIS_MCU),RA6M5))
|
|
AF_FILE = boards/ra6m5_af.csv
|
|
endif
|
|
GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c
|
|
GEN_PINS_HDR = $(HEADER_BUILD)/pins.h
|
|
|
|
FILE2H = $(TOP)/tools/file2h.py
|
|
|
|
# List of sources for qstr extraction
|
|
SRC_QSTR += $(SRC_C) $(SRC_CXX) $(SHARED_SRC_C) $(GEN_PINS_SRC)
|
|
|
|
# Making OBJ use an order-only depenedency on the generated pins.h file
|
|
# has the side effect of making the pins.h file before we actually compile
|
|
# any of the objects. The normal dependency generation will deal with the
|
|
# case when pins.h is modified. But when it doesn't exist, we don't know
|
|
# which source files might need it.
|
|
$(OBJ): | $(GEN_PINS_HDR)
|
|
|
|
# With conditional pins, we may need to regenerate qstrdefs.h when config
|
|
# options change.
|
|
$(HEADER_BUILD)/qstrdefs.generated.h: $(BOARD_DIR)/mpconfigboard.h
|
|
|
|
# Use a pattern rule here so that make will only call make-pins.py once to make
|
|
# both pins_$(BOARD).c and pins.h
|
|
.PRECIOUS: $(GEN_PINS_SRC)
|
|
$(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h: $(BOARD_DIR)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD)
|
|
$(ECHO) "GEN $@"
|
|
$(Q)$(PYTHON) $(MAKE_PINS) --board-csv $(BOARD_PINS) --af-csv $(AF_FILE) --prefix $(PREFIX_FILE) \
|
|
--output-source $(GEN_PINS_SRC) --output-header $(GEN_PINS_HDR)
|
|
|
|
CMSIS_MCU_HDR = $(CMSIS_DIR)/$(CMSIS_MCU_LOWER).h
|
|
|
|
include $(TOP)/py/mkrules.mk
|