wolfBoot/arch.mk

1029 lines
31 KiB
Makefile

## CPU Architecture selection via $ARCH
# check for math library
ifeq ($(SPMATH),1)
# SP Math
MATH_OBJS:=./lib/wolfssl/wolfcrypt/src/sp_int.o
else
ifeq ($(SPMATHALL),1)
# SP Math all
CFLAGS+=-DWOLFSSL_SP_MATH_ALL
MATH_OBJS:=./lib/wolfssl/wolfcrypt/src/sp_int.o
else
# Fastmath
CFLAGS+=-DUSE_FAST_MATH
MATH_OBJS:=./lib/wolfssl/wolfcrypt/src/integer.o ./lib/wolfssl/wolfcrypt/src/tfm.o
endif
endif
# Default flash offset
ARCH_FLASH_OFFSET?=0x0
# Default SPI driver name
SPI_TARGET=$(TARGET)
# Default UART driver name
UART_TARGET=$(TARGET)
# Include SHA256 module because it's implicitly needed by RSA
WOLFCRYPT_OBJS+=./lib/wolfssl/wolfcrypt/src/sha256.o
ifeq ($(ARCH),x86_64)
CFLAGS+=-DARCH_x86_64
ifeq ($(FORCE_32BIT),1)
NO_ASM=1
CFLAGS+=-DFORCE_32BIT
endif
ifeq ($(SPMATH),1)
ifeq ($(NO_ASM),1)
ifeq ($(FORCE_32BIT),1)
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
CFLAGS+=-DWOLFSSL_SP_DIV_WORD_HALF
else
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c64.o
endif
else
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_x86_64.o
endif
endif
ifeq ($(TARGET),x86_64_efi)
OBJS+=src/boot_x86_64.o
ifeq ($(DEBUG),1)
CFLAGS+=-DWOLFBOOT_DEBUG_EFI=1
endif
endif
endif
## ARM
ifeq ($(ARCH),AARCH64)
CROSS_COMPILE?=aarch64-none-elf-
CFLAGS+=-DARCH_AARCH64 -march=armv8-a
OBJS+=src/boot_aarch64.o src/boot_aarch64_start.o
CFLAGS+=-DNO_QNX
ifeq ($(SPMATH),1)
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_arm64.o
endif
endif
ifeq ($(ARCH),ARM)
CROSS_COMPILE?=arm-none-eabi-
CFLAGS+=-mthumb -mlittle-endian -mthumb-interwork -DARCH_ARM
LDFLAGS+=-mthumb -mlittle-endian -mthumb-interwork
OBJS+=src/boot_arm.o
## Target specific configuration
ifeq ($(TARGET),samr21)
CORTEX_M0=1
endif
ifeq ($(TARGET),imx_rt)
CORTEX_M7=1
endif
ifeq ($(TARGET),stm32l0)
CORTEX_M0=1
SPI_TARGET=stm32
endif
ifeq ($(TARGET),stm32c0)
CORTEX_M0=1
ARCH_FLASH_OFFSET=0x08000000
endif
ifeq ($(TARGET),stm32g0)
CORTEX_M0=1
ARCH_FLASH_OFFSET=0x08000000
endif
ifeq ($(TARGET),stm32f4)
ARCH_FLASH_OFFSET=0x08000000
SPI_TARGET=stm32
endif
ifeq ($(TARGET),stm32l4)
SPI_TARGET=stm32
ARCH_FLASH_OFFSET=0x08000000
OBJS+=$(STM32CUBE)/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash.o
OBJS+=$(STM32CUBE)/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ex.o
CFLAGS+=-DSTM32L4A6xx -DUSE_HAL_DRIVER -Isrc -Ihal \
-I$(STM32CUBE)/Drivers/STM32L4xx_HAL_Driver/Inc/ \
-I$(STM32CUBE)/Drivers/BSP/STM32L4xx_Nucleo_144/ \
-I$(STM32CUBE)/Drivers/CMSIS/Device/ST/STM32L4xx/Include/ \
-I$(STM32CUBE)/Drivers/CMSIS/Include/
endif
ifeq ($(TARGET),stm32f7)
CORTEX_M7=1
ARCH_FLASH_OFFSET=0x08000000
SPI_TARGET=stm32
endif
ifeq ($(TARGET),stm32h7)
CORTEX_M7=1
ARCH_FLASH_OFFSET=0x08000000
SPI_TARGET=stm32
endif
ifeq ($(TARGET),stm32wb)
ARCH_FLASH_OFFSET=0x08000000
SPI_TARGET=stm32
ifneq ($(PKA),0)
PKA_EXTRA_OBJS+= $(STM32CUBE)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pka.o ./lib/wolfssl/wolfcrypt/src/port/st/stm32.o
PKA_EXTRA_CFLAGS+=-DWOLFSSL_STM32_PKA -I$(STM32CUBE)/Drivers/STM32WBxx_HAL_Driver/Inc \
-Isrc -I$(STM32CUBE)/Drivers/BSP/P-NUCLEO-WB55.Nucleo/ -I$(STM32CUBE)/Drivers/CMSIS/Device/ST/STM32WBxx/Include \
-I$(STM32CUBE)/Drivers/STM32WBxx_HAL_Driver/Inc/ \
-I$(STM32CUBE)/Drivers/CMSIS/Include \
-Ihal \
-DSTM32WB55xx
endif
endif
ifeq ($(TARGET),stm32l5)
CORTEX_M33=1
CFLAGS+=-Ihal
ARCH_FLASH_OFFSET=0x08000000
ifeq ($(TZEN),1)
WOLFBOOT_ORIGIN=0x0C000000
else
WOLFBOOT_ORIGIN=0x08000000
LSCRIPT_IN=hal/$(TARGET)-ns.ld
endif
endif
ifeq ($(TARGET),stm32u5)
CORTEX_M33=1
CFLAGS+=-Ihal
ARCH_FLASH_OFFSET=0x08000000
ifeq ($(TZEN),1)
WOLFBOOT_ORIGIN=0x0C000000
else
WOLFBOOT_ORIGIN=0x08000000
LSCRIPT_IN=hal/$(TARGET)-ns.ld
endif
SPI_TARGET=stm32
endif
ifeq ($(TARGET),stm32h5)
CORTEX_M33=1
CFLAGS+=-Ihal
ARCH_FLASH_OFFSET=0x08000000
ifeq ($(TZEN),1)
WOLFBOOT_ORIGIN=0x0C000000
else
WOLFBOOT_ORIGIN=0x08000000
LSCRIPT_IN=hal/$(TARGET)-ns.ld
endif
SPI_TARGET=stm32
endif
## Cortex-M CPU
ifeq ($(CORTEX_M33),1)
CFLAGS+=-mcpu=cortex-m33 -DCORTEX_M33
LDFLAGS+=-mcpu=cortex-m33
ifeq ($(TZEN),1)
OBJS+=hal/stm32_tz.o
CFLAGS+=-mcmse
ifeq ($(WOLFCRYPT_TZ),1)
SECURE_OBJS+=./src/wc_callable.o
SECURE_OBJS+=./lib/wolfssl/wolfcrypt/src/random.o
CFLAGS+=-DWOLFCRYPT_SECURE_MODE
SECURE_LDFLAGS+=-Wl,--cmse-implib -Wl,--out-implib=./src/wc_secure_calls.o
endif
endif # TZEN=1
ifeq ($(NO_ASM),1)
ifeq ($(SPMATH),1)
ifeq ($(NO_ASM),1)
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
else
CFLAGS+=-DWOLFSSL_SP_ASM -DWOLFSSL_SP_ARM_CORTEX_M_ASM
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_cortexm.o
endif
endif
else
ifeq ($(SPMATH),1)
CFLAGS+=-DWOLFSSL_SP_ASM -DWOLFSSL_SP_ARM_CORTEX_M_ASM
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_cortexm.o
endif
endif
else
ifeq ($(CORTEX_M7),1)
CFLAGS+=-mcpu=cortex-m7
LDFLAGS+=-mcpu=cortex-m7
ifeq ($(SPMATH),1)
ifeq ($(NO_ASM),1)
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
else
CFLAGS+=-DWOLFSSL_SP_ASM -DWOLFSSL_SP_ARM_CORTEX_M_ASM
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_cortexm.o
endif
endif
else
ifeq ($(CORTEX_M0),1)
CFLAGS+=-mcpu=cortex-m0
LDFLAGS+=-mcpu=cortex-m0
ifeq ($(SPMATH),1)
ifeq ($(NO_ASM),1)
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
else
CFLAGS+=-DWOLFSSL_SP_ASM -DWOLFSSL_SP_ARM_THUMB_ASM
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_armthumb.o
endif
endif
else
ifeq ($(CORTEX_M3),1)
CFLAGS+=-mcpu=cortex-m3
LDFLAGS+=-mcpu=cortex-m3
ifeq ($(NO_ASM),1)
ifeq ($(SPMATH),1)
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
endif
else
ifeq ($(SPMATH),1)
CFLAGS+=-DWOLFSSL_SP_ASM -DWOLFSSL_SP_ARM_CORTEX_M_ASM -DWOLFSSL_SP_NO_UMAAL
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_cortexm.o
endif
endif
else
# default Cortex M4
CFLAGS+=-mcpu=cortex-m4
LDFLAGS+=-mcpu=cortex-m4
ifeq ($(NO_ASM),1)
ifeq ($(SPMATH),1)
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
endif
else
CFLAGS+=-fomit-frame-pointer # required with debug builds only
ifeq ($(SPMATH),1)
CFLAGS+=-DWOLFSSL_SP_ASM -DWOLFSSL_SP_ARM_CORTEX_M_ASM
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_cortexm.o
endif
endif
endif
endif
endif
endif
endif
ifeq ($(TZEN),1)
CFLAGS+=-DTZEN
endif
## Renesas RX
ifeq ($(ARCH),RENESAS_RX)
RX_GCC_PATH?=~/toolchains/gcc_8.3.0.202311_rx_elf
CROSS_COMPILE?=$(RX_GCC_PATH)/bin/rx-elf-
## Toolchain setup
ifeq ($(USE_GCC),0)
CC=$(CROSS_COMPILE)gcc
# Must use LD directly (gcc link calls LD with sysroot and is not supported)
LD=$(CROSS_COMPILE)ld
AS=$(CROSS_COMPILE)gcc
OBJCOPY?=$(CROSS_COMPILE)objcopy
SIZE=$(CROSS_COMPILE)size
# Override flags
USE_GCC_HEADLESS=0
LD_START_GROUP=--start-group
LD_END_GROUP=--end-group
CFLAGS+=-Wall -Wextra -ffreestanding -Wno-unused -nostartfiles -fno-common
CFLAGS+=-ffunction-sections -fdata-sections
CFLAGS+=-B$(dir $(CROSS_COMPILE))
LDFLAGS+=-gc-sections -Map=wolfboot.map
LDFLAGS+=-T $(LSCRIPT) -L$(dir $(CROSS_COMPILE))../lib
LIBS+=-lgcc
endif
# Renesas specific files
OBJS+=src/boot_renesas.o src/boot_renesas_start.o hal/renesas-rx.o
ifeq ($(SPMATH),1)
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
endif
# RX parts support big or little endian data depending on MDE register
CFLAGS+=-fomit-frame-pointer -nofpu
ifeq ($(BIG_ENDIAN),1)
CFLAGS+=-mbig-endian-data
ifeq ($(USE_GCC),1)
LDFLAGS+=-Wl,--oformat=elf32-rx-be
CFLAGS+=-misa=v2
else
LDFLAGS+=--oformat=elf32-rx-be
endif
else
CFLAGS+=-mlittle-endian-data
ifeq ($(USE_GCC),1)
LDFLAGS+=-Wl,--oformat=elf32-rx-le
CFLAGS+=-misa=v2
else
LDFLAGS+=--oformat=elf32-rx-le
endif
endif
ifeq ($(PKA),1)
CFLAGS+=-DWOLFBOOT_RENESAS_TSIP
RX_DRIVER_PATH?=./lib
OBJS+=./lib/wolfssl/wolfcrypt/src/cryptocb.o \
./lib/wolfssl/wolfcrypt/src/port/Renesas/renesas_common.o \
./lib/wolfssl/wolfcrypt/src/port/Renesas/renesas_tsip_util.o
# RX TSIP uses pre-compiled .a library by default
ifeq ($(RX_TSIP_SRC),)
ifeq ($(TARGET),rx65n)
ifeq ($(BIG_ENDIAN),1)
LIBS+=$(RX_DRIVER_PATH)/r_tsip_rx/lib/gcc/libr_tsip_rx65n_big.a
else
LIBS+=$(RX_DRIVER_PATH)/r_tsip_rx/lib/gcc/libr_tsip_rx65n_little.a
endif
endif
ifeq ($(TARGET),rx72n)
ifeq ($(BIG_ENDIAN),1)
LIBS+=$(RX_DRIVER_PATH)/r_tsip_rx/lib/gcc/libr_tsip_rx72m_rx72n_rx66n_big.a
else
LIBS+=$(RX_DRIVER_PATH)/r_tsip_rx/lib/gcc/libr_tsip_rx72m_rx72n_rx66n_little.a
endif
endif
else
CFLAGS+=-DRX_TSIP_SRC
ifeq ($(TARGET),rx65n)
RX_TSIP_SRC_PATH?=$(RX_DRIVER_PATH)/r_tsip_rx/src/targets/rx65n
endif
ifeq ($(TARGET),rx72n)
RX_TSIP_SRC_PATH?=$(RX_DRIVER_PATH)/r_tsip_rx/src/targets/rx72m_rx72n_rx66n
endif
# Use RX_TSIP_SRC if building TSIP sources directly
OBJS+=$(RX_TSIP_SRC_PATH)/r_tsip_rx.o \
$(RX_TSIP_SRC_PATH)/r_tsip_rx_private.o \
$(RX_TSIP_SRC_PATH)/r_tsip_aes_rx.o \
$(RX_TSIP_SRC_PATH)/r_tsip_hash_rx.o \
$(RX_TSIP_SRC_PATH)/r_tsip_ecc_rx.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_pfa.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_pfb.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_pf1.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_pf5.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_pf6.o \
$(RX_TSIP_SRC_PATH)/ip/s_flash.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_p00.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_p01.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_p02.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_p23.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_p26.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_p72.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_subprc01.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_subprc02.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function004.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function005.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function006.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function009.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function010.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function011.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function023.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function027.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function028.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function050.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function051.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function052.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function053.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function054.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function100.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function101.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function102.o \
$(RX_TSIP_SRC_PATH)/ip/r_tsip_rx_function103.o
endif
OBJS+=$(RX_DRIVER_PATH)/r_bsp/mcu/all/r_bsp_cpu.o \
$(RX_DRIVER_PATH)/r_bsp/mcu/all/r_bsp_interrupts.o \
$(RX_DRIVER_PATH)/r_bsp/mcu/all/r_rx_intrinsic_functions.o
ifeq ($(TARGET),rx65n)
OBJS+=$(RX_DRIVER_PATH)/r_bsp/mcu/rx65n/mcu_interrupts.o
endif
ifeq ($(TARGET),rx72n)
OBJS+=$(RX_DRIVER_PATH)/r_bsp/mcu/rx72n/mcu_interrupts.o
endif
CFLAGS+=-Ihal -I./lib/wolfssl \
-I$(RX_DRIVER_PATH)/r_bsp \
-I$(RX_DRIVER_PATH)/r_config \
-I$(RX_DRIVER_PATH)/r_tsip_rx \
-I$(RX_DRIVER_PATH)/r_tsip_rx/src
endif
endif
## RISCV
ifeq ($(ARCH),RISCV)
CROSS_COMPILE?=riscv32-unknown-elf-
CFLAGS+=-fno-builtin-printf -DUSE_M_TIME -g -march=rv32imac -mabi=ilp32 -mcmodel=medany -nostartfiles -DARCH_RISCV
LDFLAGS+=-march=rv32imac -mabi=ilp32 -mcmodel=medany
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
# Prune unused functions and data
CFLAGS +=-ffunction-sections -fdata-sections
LDFLAGS+=-Wl,--gc-sections
OBJS+=src/boot_riscv.o src/vector_riscv.o
ARCH_FLASH_OFFSET=0x20010000
endif
# powerpc
ifeq ($(ARCH),PPC)
CROSS_COMPILE?=powerpc-linux-gnu-
LDFLAGS+=-Wl,--build-id=none
CFLAGS+=-DARCH_PPC
ifeq ($(DEBUG_UART),0)
CFLAGS+=-fno-builtin-printf
endif
# Prune unused functions and data
CFLAGS+=-ffunction-sections -fdata-sections
LDFLAGS+=-Wl,--gc-sections
OBJS+=src/boot_ppc_start.o src/boot_ppc.o
endif
ifeq ($(TARGET),kinetis)
CFLAGS+=\
-I$(MCUXPRESSO_DRIVERS) \
-I$(MCUXPRESSO_DRIVERS)/drivers \
-I$(MCUXPRESSO)/drivers \
-I$(MCUXPRESSO)/drivers/common \
-I$(MCUXPRESSO_CMSIS)/Include \
-I$(MCUXPRESSO_CMSIS)/Core/Include
CFLAGS+=\
-DCPU_$(MCUXPRESSO_CPU) -DDEBUG_CONSOLE_ASSERT_DISABLE=1 -DNVM_FLASH_WRITEONCE=1
OBJS+=\
$(MCUXPRESSO_DRIVERS)/drivers/fsl_clock.o
ifeq ($(MCUXSDK),1)
CFLAGS+=\
-I$(MCUXPRESSO)/drivers/flash \
-I$(MCUXPRESSO)/drivers/sysmpu \
-I$(MCUXPRESSO)/drivers/ltc \
-I$(MCUXPRESSO)/drivers/port \
-I$(MCUXPRESSO)/drivers/gpio
OBJS+=\
$(MCUXPRESSO)/drivers/flash/fsl_ftfx_flash.o \
$(MCUXPRESSO)/drivers/flash/fsl_ftfx_cache.o \
$(MCUXPRESSO)/drivers/flash/fsl_ftfx_controller.o
else
OBJS+=\
$(MCUXPRESSO_DRIVERS)/drivers/fsl_ftfx_flash.o \
$(MCUXPRESSO_DRIVERS)/drivers/fsl_ftfx_cache.o \
$(MCUXPRESSO_DRIVERS)/drivers/fsl_ftfx_controller.o
endif
## The following lines can be used to enable HW acceleration
ifeq ($(MCUXPRESSO_CPU),MK82FN256VLL15)
ifeq ($(PKA),1)
PKA_EXTRA_CFLAGS+=-DFREESCALE_USE_LTC
PKA_EXTRA_OBJS+=./lib/wolfssl/wolfcrypt/src/port/nxp/ksdk_port.o
ifeq ($(MCUXSDK),1)
PKA_EXTRA_OBJS+=$(MCUXPRESSO)/drivers/ltc/fsl_ltc.o
else
PKA_EXTRA_OBJS+=$(MCUXPRESSO_DRIVERS)/drivers/fsl_ltc.o
endif
endif
endif
endif
ifeq ($(TARGET),mcxa)
CORTEX_M33=1
CFLAGS+=\
-I$(MCUXPRESSO_DRIVERS) \
-I$(MCUXPRESSO_DRIVERS)/drivers \
-I$(MCUXPRESSO)/drivers \
-I$(MCUXPRESSO)/drivers/common \
-I$(MCUXPRESSO_CMSIS)/Include \
-I$(MCUXPRESSO_CMSIS)/Core/Include
CFLAGS+=-DCPU_$(MCUXPRESSO_CPU) -DDEBUG_CONSOLE_ASSERT_DISABLE=1
CFLAGS+=-DWOLFSSL_SP_NO_UMAAL
CFLAGS+=-Wno-old-style-declaration
CFLAGS+=-mcpu=cortex-m33 -DCORTEX_M33 -U__ARM_FEATURE_DSP
LDFLAGS+=-mcpu=cortex-m33
OBJS+=\
$(MCUXPRESSO_DRIVERS)/drivers/fsl_clock.o \
$(MCUXPRESSO_DRIVERS)/drivers/fsl_spc.o
ifeq ($(MCUXSDK),1)
CFLAGS+=\
-I$(MCUXPRESSO)/drivers/flash \
-I$(MCUXPRESSO)/drivers/sysmpu \
-I$(MCUXPRESSO)/drivers/ltc \
-I$(MCUXPRESSO)/drivers/port \
-I$(MCUXPRESSO)/drivers/gpio
else
endif
endif
ifeq ($(TARGET),imx_rt)
CFLAGS+=\
-I$(MCUXPRESSO_DRIVERS) \
-I$(MCUXPRESSO_DRIVERS)/drivers \
-I$(MCUXPRESSO)/drivers \
-I$(MCUXPRESSO)/drivers/cache/armv7-m7 \
-I$(MCUXPRESSO)/drivers/common \
-I$(MCUXPRESSO)/drivers/flexspi \
-I$(MCUXPRESSO)/drivers/lpuart \
-I$(MCUXPRESSO)/drivers/igpio \
-I$(MCUXPRESSO)/components/uart \
-I$(MCUXPRESSO)/components/flash/nor \
-I$(MCUXPRESSO)/components/flash/nor/flexspi \
-I$(MCUXPRESSO)/components/serial_manager \
-I$(MCUXPRESSO_DRIVERS)/project_template \
-I$(MCUXPRESSO_CMSIS)/Include \
-I$(MCUXPRESSO_CMSIS)/Core/Include
CFLAGS+=\
-DCPU_$(MCUXPRESSO_CPU) \
-DDEBUG_CONSOLE_ASSERT_DISABLE=1 \
-DXIP_EXTERNAL_FLASH=1 -DDEBUG_CONSOLE_ASSERT_DISABLE=1 -DPRINTF_ADVANCED_ENABLE=1 \
-DSCANF_ADVANCED_ENABLE=1 -DSERIAL_PORT_TYPE_UART=1 -DNDEBUG=1
ifeq ($(MCUXSDK),1)
CFLAGS+=\
-I$(MCUXPRESSO)/utilities/str \
-I$(MCUXPRESSO)/utilities/debug_console
OBJS+=\
$(MCUXPRESSO_DRIVERS)/drivers/fsl_clock.o \
$(MCUXPRESSO)/drivers/flexspi/fsl_flexspi.o \
$(MCUXPRESSO)/drivers/cache/armv7-m7/fsl_cache.o
ifeq ($(DEBUG_UART),1)
OBJS+= $(MCUXPRESSO)/drivers/lpuart/fsl_lpuart.o
endif
else
CFLAGS+=\
-I$(MCUXPRESSO_DRIVERS)/utilities/str \
-I$(MCUXPRESSO_DRIVERS)/utilities/debug_console
OBJS+=\
$(MCUXPRESSO_DRIVERS)/drivers/fsl_clock.o \
$(MCUXPRESSO_DRIVERS)/drivers/fsl_flexspi.o \
$(MCUXPRESSO_DRIVERS)/drivers/fsl_cache.o
ifeq ($(DEBUG_UART),1)
OBJS+= $(MCUXPRESSO_DRIVERS)/drivers/fsl_lpuart.o
endif
endif
ifeq ($(TARGET_IMX_HAB),1)
LSCRIPT_IN:=hal/$(TARGET)_hab.ld
else
LSCRIPT_IN:=hal/$(TARGET).ld
endif
ifeq ($(MCUXPRESSO_CPU),MIMXRT1064DVL6A)
ARCH_FLASH_OFFSET=0x70000000
CFLAGS+=-I$(MCUXPRESSO)/boards/evkmimxrt1064/xip/
endif
ifeq ($(MCUXPRESSO_CPU),MIMXRT1062DVL6A)
ARCH_FLASH_OFFSET=0x60000000
CFLAGS+=-I$(MCUXPRESSO)/boards/evkmimxrt1060/xip/
endif
ifeq ($(MCUXPRESSO_CPU),MIMXRT1062DVL6B)
ARCH_FLASH_OFFSET=0x60000000
CFLAGS+=-I$(MCUXPRESSO)/boards/evkbmimxrt1060/xip/
endif
ifeq ($(MCUXPRESSO_CPU),MIMXRT1061CVJ5B)
ARCH_FLASH_OFFSET=0x60000000
CFLAGS+=-I$(MCUXPRESSO)/boards/evkmimxrt1060/xip/
endif
ifeq ($(MCUXPRESSO_CPU),MIMXRT1052DVJ6B)
ARCH_FLASH_OFFSET=0x60000000
CFLAGS+=-I$(MCUXPRESSO)/boards/evkbimxrt1050/xip/
endif
ifeq ($(MCUXPRESSO_CPU),MIMXRT1042XJM5B)
ARCH_FLASH_OFFSET=0x60000000
CFLAGS+=-I$(MCUXPRESSO)/boards/evkmimxrt1040/xip/
endif
ifeq ($(PKA),1)
ifeq ($(MCUXSDK),1)
PKA_EXTRA_OBJS+= $(MCUXPRESSO)/drivers/dcp/fsl_dcp.o
else
PKA_EXTRA_OBJS+= $(MCUXPRESSO_DRIVERS)/drivers/fsl_dcp.o
endif
PKA_EXTRA_OBJS+=./lib/wolfssl/wolfcrypt/src/port/nxp/dcp_port.o
PKA_EXTRA_CFLAGS+=\
-DWOLFSSL_IMXRT_DCP \
-I$(MCUXPRESSO)/drivers/cache/armv7-m7 \
-I$(MCUXPRESSO)/drivers/dcp
endif
endif
# ARM Big Endian
ifeq ($(ARCH),ARM_BE)
OBJS+=src/boot_arm.o
ifeq ($(SPMATH),1)
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
endif
endif
ifeq ($(TARGET),nxp_t1024)
# Power PC big endian
ARCH_FLAGS=-mhard-float -mcpu=e5500
CFLAGS+=$(ARCH_FLAGS)
BIG_ENDIAN=1
CFLAGS+=-DMMU -DWOLFBOOT_DUALBOOT
CFLAGS+=-pipe # use pipes instead of temp files
CFLAGS+=-feliminate-unused-debug-types
LDFLAGS+=$(ARCH_FLAGS)
LDFLAGS+=-Wl,--hash-style=both # generate both sysv and gnu symbol hash table
LDFLAGS+=-Wl,--as-needed # remove weak functions not used
OBJS+=src/boot_ppc_mp.o # support for spin table
OBJS+=src/fdt.o
OBJS+=src/pci.o
CFLAGS+=-DWOLFBOOT_USE_PCI
UPDATE_OBJS:=src/update_ram.o
ifeq ($(SPMATH),1)
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
else
# Use the SP math all assembly accelerations
CFLAGS+=-DWOLFSSL_SP_PPC
endif
SPI_TARGET=nxp
OPTIMIZATION_LEVEL=0 # using default -Os causes issues with alignment
endif
ifeq ($(TARGET),nxp_t2080)
# Power PC big endian
ARCH_FLAGS=-mhard-float -mcpu=e6500
CFLAGS+=$(ARCH_FLAGS)
BIG_ENDIAN=1
CFLAGS+=-DMMU -DWOLFBOOT_DUALBOOT
CFLAGS+=-pipe # use pipes instead of temp files
CFLAGS+=-feliminate-unused-debug-types
LDFLAGS+=$(ARCH_FLAGS)
LDFLAGS+=-Wl,--hash-style=both # generate both sysv and gnu symbol hash table
LDFLAGS+=-Wl,--as-needed # remove weak functions not used
UPDATE_OBJS:=src/update_ram.o
OBJS+=src/fdt.o
ifeq ($(SPMATH),1)
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
else
# Use the SP math all assembly accelerations
CFLAGS+=-DWOLFSSL_SP_PPC
endif
endif
ifeq ($(TARGET),nxp_p1021)
# Power PC big endian
ARCH_FLAGS=-m32 -mhard-float -mcpu=e500mc
ARCH_FLAGS+=-fno-builtin -ffreestanding -nostartfiles
CFLAGS+=$(ARCH_FLAGS)
BIG_ENDIAN=1
CFLAGS+=-DWOLFBOOT_DUALBOOT
CFLAGS+=-pipe # use pipes instead of temp files
LDFLAGS+=$(ARCH_FLAGS)
LDFLAGS+=-Wl,--as-needed # remove weak functions not used
OBJS+=src/boot_ppc_mp.o # support for spin table
UPDATE_OBJS:=src/update_ram.o
# Use PPC stdlib for memcpy, etc.
#CFLAGS+=-DWOLFBOOT_USE_STDLIBC
ifeq ($(SPMATH),1)
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
else
# Use the SP math all assembly accelerations
CFLAGS+=-DWOLFSSL_SP_PPC
endif
SPI_TARGET=nxp
endif
ifeq ($(TARGET),zynq)
# Support detection and skip of U-Boot legecy header */
CFLAGS+=-DWOLFBOOT_UBOOT_LEGACY
CFLAGS+=-DWOLFBOOT_DUALBOOT
endif
ifeq ($(TARGET),ti_hercules)
# HALCoGen Source and Include?
CORTEX_R5=1
CFLAGS+=-D"CORTEX_R5" -D"NVM_FLASH_WRITEONCE" -D"FLASHBUFFER_SIZE=32"
BIG_ENDIAN=1
STACK_USAGE=0
USE_GCC=0
USE_GCC_HEADLESS=0
ifeq ($(CCS_ROOT),)
$(error "CCS_ROOT must be defined to root of tools")
endif
CROSS_COMPILE?=$(CCS_ROOT)/bin/
CC=$(CROSS_COMPILE)armcl
LD=$(CROSS_COMPILE)armcl
AS=$(CROSS_COMPILE)armasm
OBJCOPY=$(CROSS_COMPILE)armobjcopy
SIZE=$(CROSS_COMPILE)armsize
OUTPUT_FLAG=--output_file
F021_DIR?=c:\\ti\\Hercules\\F021\ Flash\ API\\02.01.01
ARCH_FLAGS=-mv7R5 --code_state=32 --float_support=VFPv3D16 --enum_type=packed --abi=eabi -I"$(CCS_ROOT)/include" -I"$(F021_DIR)/include"
CFLAGS+=$(ARCH_FLAGS)
LDFLAGS+=$(ARCH_FLAGS) -i"$(CCS_ROOT)/lib" -i"$(F021_DIR)" -z --be32 --map_file=wolfboot.map --reread_libs --diag_wrap=off --display_error_number --warn_sections --heap_size=0 --stack_size=0x800 --ram_model
LD_START_GROUP= #--start-group
LD_END_GROUP= -llibc.a -l"$(F021_DIR)/F021_API_CortexR4_BE_L2FMC_V3D16.lib"
OPTIMIZATION_LEVEL=2
endif
ifeq ($(TARGET),lpc)
CFLAGS+=\
-I$(MCUXPRESSO_DRIVERS) \
-I$(MCUXPRESSO_DRIVERS)/drivers \
-I$(MCUXPRESSO)/drivers \
-I$(MCUXPRESSO)/drivers/common \
-I$(MCUXPRESSO_CMSIS)/Include \
-I$(MCUXPRESSO_CMSIS)/Core/Include
CFLAGS+=\
-DCPU_$(MCUXPRESSO_CPU) -DDEBUG_CONSOLE_ASSERT_DISABLE=1
OBJS+=\
$(MCUXPRESSO_DRIVERS)/drivers/fsl_clock.o \
$(MCUXPRESSO_DRIVERS)/drivers/fsl_power.o \
$(MCUXPRESSO_DRIVERS)/drivers/fsl_reset.o
LIBS+=\
$(MCUXPRESSO_DRIVERS)/mcuxpresso/libpower_softabi.a
ifeq ($(MCUXSDK),1)
CFLAGS+=\
-I$(MCUXPRESSO)/drivers/flashiap \
-I$(MCUXPRESSO)/drivers/flexcomm
OBJS+=\
$(MCUXPRESSO)/drivers/common/fsl_common.o \
$(MCUXPRESSO)/drivers/common/fsl_common_arm.o \
$(MCUXPRESSO)/drivers/flashiap/fsl_flashiap.o \
$(MCUXPRESSO)/drivers/flexcomm/usart/fsl_usart.o \
$(MCUXPRESSO)/drivers/flexcomm/fsl_flexcomm.o
else
OBJS+=\
$(MCUXPRESSO_DRIVERS)/drivers/fsl_common.o \
$(MCUXPRESSO_DRIVERS)/drivers/fsl_flashiap.o \
$(MCUXPRESSO_DRIVERS)/drivers/fsl_usart.o \
$(MCUXPRESSO_DRIVERS)/drivers/fsl_flexcomm.o
endif
endif
ifeq ($(TARGET),psoc6)
CORTEX_M0=1
OBJS+=\
$(CYPRESS_PDL)/drivers/source/cy_flash.o \
$(CYPRESS_PDL)/drivers/source/cy_ipc_pipe.o \
$(CYPRESS_PDL)/drivers/source/cy_ipc_sema.o \
$(CYPRESS_PDL)/drivers/source/cy_ipc_drv.o \
$(CYPRESS_PDL)/drivers/source/cy_device.o \
$(CYPRESS_PDL)/drivers/source/cy_sysclk.o \
$(CYPRESS_PDL)/drivers/source/cy_sysint.o \
$(CYPRESS_PDL)/drivers/source/cy_syslib.o \
$(CYPRESS_PDL)/drivers/source/cy_ble_clk.o \
$(CYPRESS_PDL)/drivers/source/cy_wdt.o \
$(CYPRESS_PDL)/drivers/source/TOOLCHAIN_GCC_ARM/cy_syslib_gcc.o \
$(CYPRESS_PDL)/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/system_psoc6_cm0plus.o
PSOC6_CRYPTO_OBJS=\
./lib/wolfssl/wolfcrypt/src/port/cypress/psoc6_crypto.o \
$(CYPRESS_PDL)/drivers/source/cy_crypto_core_vu.o \
$(CYPRESS_PDL)/drivers/source/cy_crypto_core_ecc_domain_params.o \
$(CYPRESS_PDL)/drivers/source/cy_crypto_core_ecc_nist_p.o \
$(CYPRESS_PDL)/drivers/source/cy_crypto_core_ecc_ecdsa.o \
$(CYPRESS_PDL)/drivers/source/cy_crypto_core_sha_v2.o \
$(CYPRESS_PDL)/drivers/source/cy_crypto_core_sha_v1.o \
$(CYPRESS_PDL)/drivers/source/cy_crypto_core_mem_v2.o \
$(CYPRESS_PDL)/drivers/source/cy_crypto_core_mem_v1.o \
$(CYPRESS_PDL)/drivers/source/cy_crypto_core_hw.o \
$(CYPRESS_PDL)/drivers/source/cy_crypto_core_hw_v1.o \
$(CYPRESS_PDL)/drivers/source/cy_crypto.o
CFLAGS+=\
-I$(CYPRESS_PDL)/drivers/include \
-I$(CYPRESS_PDL)/devices/include \
-I$(CYPRESS_PDL)/cmsis/include \
-I$(CYPRESS_TARGET_LIB) \
-I$(CYPRESS_CORE_LIB)/include \
-I$(CYPRESS_PDL)/devices/include/ip \
-I$(CYPRESS_PDL)/devices/templates/COMPONENT_MTB \
-DCY8C624ABZI_D44
ARCH_FLASH_OFFSET=0x10000000
ifneq ($(PSOC6_CRYPTO),0)
CFLAGS+=-DWOLFSSL_PSOC6_CRYPTO
OBJS+=$(PSOC6_CRYPTO_OBJS)
endif
endif
ifeq ($(USE_GCC),1)
## Toolchain setup
CC=$(CROSS_COMPILE)gcc
LD=$(CROSS_COMPILE)gcc
AS=$(CROSS_COMPILE)gcc
OBJCOPY?=$(CROSS_COMPILE)objcopy
SIZE=$(CROSS_COMPILE)size
endif
OUTPUT_FLAG?=-o
ifeq ($(filter $(TARGET),x86_fsp_qemu kontron_vx3060_s2),$(TARGET))
FSP=1
CFLAGS+=-ffunction-sections -fdata-sections -ffreestanding -nostdlib -static
# some std libc have headers that bring in extra symbols used in
# FORTIFY_SOURCE realated checks. Use -U_FORTIFY_SOURCE to avoid that.
CFLAGS+=-U_FORTIFY_SOURCE
ifeq ($(TARGET), kontron_vx3060_s2)
FSP_TGL=1
CFLAGS+=-DWOLFBOOT_TGL=1
endif
endif
ifeq ($(TARGET),x86_fsp_qemu)
ifeq ($(filter-out $(STAGE1),1),)
OBJS+=src/x86/qemu_fsp.o
endif
endif
# x86-64 FSP targets
ifeq ("${FSP}", "1")
CFLAGS+=-DWOLFBOOT_FSP=1
USE_GCC_HEADLESS=0
LD_START_GROUP =
LD_END_GROUP =
LD := ld
ifeq ($(filter-out $(STAGE1),1),)
# building stage1
ifeq ($(FSP_TGL), 1)
LSCRIPT_IN = ../hal/x86_fsp_tgl_stage1.ld
else
LSCRIPT_IN = ../hal/$(TARGET)_stage1.ld
endif
# using ../wolfboot.map as stage1 is built from stage1 sub-directory
LDFLAGS = --defsym main=0x`nm ../wolfboot.elf | grep -w main | awk '{print $$1}'` \
--defsym wb_start_bss=0x`nm ../wolfboot.elf | grep -w _start_bss | awk '{print $$1}'` \
--defsym wb_end_bss=0x`nm ../wolfboot.elf | grep -w _end_bss | awk '{print $$1}'` \
--defsym _stage2_params=0x`nm ../wolfboot.elf | grep -w _stage2_params | awk '{print $$1}'`
LDFLAGS += --gc-sections --entry=reset_vector -T $(LSCRIPT) -m elf_i386 -Map=loader_stage1.map
OBJS += src/boot_x86_fsp.o
OBJS += src/boot_x86_fsp_start.o
OBJS += src/fsp_m.o
OBJS += src/fsp_s.o
OBJS += src/fsp_t.o
OBJS += src/wolfboot_raw.o
OBJS += src/x86/common.o
OBJS += src/x86/hob.o
OBJS += src/pci.o
CFLAGS+=-DWOLFBOOT_USE_PCI
OBJS += hal/x86_uart.o
OBJS += src/string.o
OBJS += src/stage2_params.o
ifeq ($(filter-out $(STAGE1_AUTH),1),)
OBJS += src/libwolfboot.o
OBJS += src/image.o
OBJS += src/keystore.o
OBJS += src/sig_wolfboot_raw.o
OBJS += src/sig_fsp_s.o
ifeq ($(TARGET), kontron_vx3060_s2)
OBJS += hal/kontron_vx3060_s2_loader.o
endif
OBJS += $(WOLFCRYPT_OBJS)
CFLAGS+=-DSTAGE1_AUTH
endif
CFLAGS += -fno-stack-protector -m32 -fno-PIC -fno-pie -mno-mmx -mno-sse -DDEBUG_UART
ifeq ($(FSP_TGL), 1)
OBJS+=src/x86/tgl_fsp.o
OBJS+=src/ucode0.o
CFLAGS += -DUCODE0_ADDRESS=$(UCODE0_BASE)
endif
ifeq ($(TARGET),x86_fsp_qemu)
OBJS += hal/x86_fsp_qemu_loader.o
endif
else
# building wolfBoot
ifeq ($(FSP_TGL), 1)
LSCRIPT_IN = hal/x86_fsp_tgl.ld.in
else
LSCRIPT_IN = hal/$(TARGET).ld.in
endif
LDFLAGS = --gc-sections --entry=main -T $(LSCRIPT) -Map=wolfboot.map
CFLAGS += -fno-stack-protector -fno-PIC -fno-pie -mno-mmx -mno-sse -Os -DDEBUG_UART
OBJS += hal/x86_fsp_tgl.o
OBJS += hal/x86_uart.o
OBJS += src/boot_x86_fsp_payload.o
OBJS += src/x86/common.o
OBJS += src/x86/hob.o
OBJS += src/pci.o
CFLAGS+=-DWOLFBOOT_USE_PCI
OBJS += src/x86/ahci.o
OBJS += src/x86/ata.o
OBJS += src/x86/gpt.o
OBJS += src/x86/mptable.o
OBJS += src/stage2_params.o
OBJS += src/x86/exceptions.o
UPDATE_OBJS := src/update_disk.o
CFLAGS+=-DWOLFBOOT_UPDATE_DISK
ifeq ($(64BIT),1)
LDFLAGS += -m elf_x86_64 --oformat elf64-x86-64
CFLAGS += -m64
else
CFLAGS += -m32
LDFLAGS += -m elf_i386 --oformat elf32-i386
endif
endif
ifeq ($(64BIT),1)
OBJS += src/x86/paging.o
endif
endif
ifneq ($(CROSS_COMPILE_PATH),)
# optional path for cross compiler includes
CFLAGS+=-I$(CROSS_COMPILE_PATH)/usr/include --sysroot=$(CROSS_COMPILE_PATH)
LDFLAGS+=-L$(CROSS_COMPILE_PATH)/usr/lib --sysroot=$(CROSS_COMPILE_PATH)
endif
ifeq ($(TARGET),x86_64_efi)
USE_GCC_HEADLESS=0
GNU_EFI_LIB_PATH?=/usr/lib
GNU_EFI_CRT0=$(GNU_EFI_LIB_PATH)/crt0-efi-x86_64.o
GNU_EFI_LSCRIPT=$(GNU_EFI_LIB_PATH)/elf_x86_64_efi.lds
CFLAGS += -fpic -ffreestanding -fno-stack-protector -fno-stack-check \
-fshort-wchar -mno-red-zone -maccumulate-outgoing-args
CFLAGS += -I/usr/include/efi -I/usr/include/efi/x86_64 \
-DTARGET_X86_64_EFI -DWOLFBOOT_DUALBOOT
# avoid using of fixed LOAD_ADDRESS, uefi target uses dynamic location
CFLAGS += -DWOLFBOOT_NO_LOAD_ADDRESS
LDFLAGS = -shared -Bsymbolic -L/usr/lib -T$(GNU_EFI_LSCRIPT)
LD_START_GROUP = $(GNU_EFI_CRT0)
LD_END_GROUP = -lgnuefi -lefi
LD = ld
UPDATE_OBJS:=src/update_ram.o
endif
ifeq ($(TARGET),sim)
USE_GCC_HEADLESS=0
LD = gcc
UPDATE_OBJS:=src/update_flash.o
LD_START_GROUP=
LD_END_GROUP=
BOOT_IMG=test-app/image.elf
CFLAGS+=-DARCH_SIM
ifeq ($(FORCE_32BIT),1)
CFLAGS+=-m32
LDFLAGS+=-m32
endif
ifeq ($(SPMATH),1)
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
CFLAGS+=-DWOLFSSL_SP_DIV_WORD_HALF
endif
endif
CFLAGS+=-DARCH_FLASH_OFFSET=$(ARCH_FLASH_OFFSET)
BOOT_IMG?=test-app/image.bin
## Update mechanism
ifeq ($(ARCH),AARCH64)
CFLAGS+=-DMMU -DWOLFBOOT_DUALBOOT
OBJS+=src/fdt.o
UPDATE_OBJS:=src/update_ram.o
endif
ifeq ($(DUALBANK_SWAP),1)
CFLAGS+=-DWOLFBOOT_DUALBOOT
UPDATE_OBJS:=src/update_flash_hwswap.o
endif
# Set default update object (if not library)
ifneq ($(TARGET),library)
ifeq ($(UPDATE_OBJS),)
UPDATE_OBJS:=./src/update_flash.o
endif
endif
## wolfBoot origin
ifeq ($(WOLFBOOT_ORIGIN),)
WOLFBOOT_ORIGIN=$(ARCH_FLASH_OFFSET)
endif
CFLAGS+=-DWOLFBOOT_ORIGIN=$(WOLFBOOT_ORIGIN)
CFLAGS+=-DBOOTLOADER_PARTITION_SIZE=$(BOOTLOADER_PARTITION_SIZE)
## Debug
WOLFCRYPT_OBJS+=./lib/wolfssl/wolfcrypt/src/logging.o
# Debug UART
ifeq ($(DEBUG_UART),1)
CFLAGS+=-DDEBUG_UART
endif
ifeq ($(NXP_CUSTOM_DCD),1)
CFLAGS+=-DNXP_CUSTOM_DCD
OBJS+=$(NXP_CUSTOM_DCD_OBJS)
endif
ifeq ($(BIG_ENDIAN),1)
CFLAGS+=-D"BIG_ENDIAN_ORDER"
endif
CFLAGS+=-DWOLFBOOT_ARCH_$(ARCH)
CFLAGS+=-DTARGET_$(TARGET)