mirror of https://github.com/wolfSSL/wolfBoot.git
1040 lines
33 KiB
Makefile
1040 lines
33 KiB
Makefile
-include ../.config
|
|
-include ../tools/config.mk
|
|
-include ../options.mk
|
|
-include ./wcs/pkcs11.mk
|
|
|
|
WOLFBOOT_LIB_WOLFSSL?=../lib/wolfssl
|
|
WOLFSSL_LOCAL_OBJDIR?=wolfssl_obj
|
|
vpath %.c $(WOLFBOOT_LIB_WOLFSSL)
|
|
vpath %.S $(WOLFBOOT_LIB_WOLFSSL)
|
|
|
|
TARGET?=none
|
|
ARCH?=ARM
|
|
MCUXPRESSO_CMSIS?=$(MCUXPRESSO)/CMSIS
|
|
ifneq (,$(filter $(TARGET),mcxa mcxw mcxn))
|
|
TEST_APP_NO_RNG?=1
|
|
endif
|
|
ifeq ($(TZEN),1)
|
|
# wcs directory contains a user_settings.h, which will conflict with
|
|
# the one in the include directory if the test app needs it (e.g. wolfHSM)
|
|
CFLAGS:=-I./wcs $(CFLAGS)
|
|
endif
|
|
CFLAGS+=-I. -I..
|
|
DEBUG?=1
|
|
DELTA_DATA_SIZE?=2000
|
|
USE_CLANG?=0
|
|
ifeq ($(USE_CLANG),1)
|
|
USE_GCC?=0
|
|
else
|
|
USE_GCC?=1
|
|
endif
|
|
USE_GCC_HEADLESS?=1
|
|
BOOTLOADER_PARTITION_SIZE?=$$(( $(WOLFBOOT_PARTITION_BOOT_ADDRESS) - $(ARCH_FLASH_OFFSET)))
|
|
|
|
# For test-applications we should only use user_settings.h
|
|
CFLAGS+=-DWOLFSSL_USER_SETTINGS -DWOLFTPM_USER_SETTINGS
|
|
|
|
ifeq ($(WOLFBOOT_ATTESTATION_TEST),1)
|
|
CFLAGS+=-DWOLFBOOT_ATTESTATION_TEST
|
|
endif
|
|
|
|
ifeq ($(HASH),SHA256)
|
|
WOLFCRYPT_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sha256.o
|
|
CFLAGS+=-D"WOLFBOOT_HASH_SHA256"
|
|
endif
|
|
|
|
ifeq ($(NVM_FLASH_WRITEONCE),1)
|
|
CFLAGS+=-D"NVM_FLASH_WRITEONCE"
|
|
endif
|
|
|
|
|
|
ifeq ($(HASH),SHA3_384)
|
|
WOLFCRYPT_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sha3.o
|
|
CFLAGS+=-D"WOLFBOOT_HASH_SHA3_384"
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(TARGET),ti_hercules)
|
|
APP_OBJS:=app_$(TARGET).o ../test-app/libwolfboot.o
|
|
CFLAGS+=-I"../include"
|
|
else
|
|
CFLAGS+=-Wall -ffreestanding -Wno-unused
|
|
# Stack usage computation not supported on TriCore
|
|
ifneq ($(ARCH),AURIX_TC3)
|
|
ifneq ($(USE_CLANG),1)
|
|
CFLAGS+=-Wstack-usage=1024
|
|
endif
|
|
endif
|
|
CFLAGS+=-DTARGET_$(TARGET) -I../include
|
|
CFLAGS+=-g
|
|
ifeq ($(USE_GCC),1)
|
|
CFLAGS+=-ggdb3
|
|
else ifneq ($(ARCH),AURIX_TC3)
|
|
ifneq ($(USE_CLANG),1)
|
|
CFLAGS+=-gstabs
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(ARCH),RENESAS_RX)
|
|
APP_OBJS:=app_renesas_rx.o ../test-app/libwolfboot.o ../src/boot_renesas.o ../src/boot_renesas_start.o ../hal/renesas-rx.o
|
|
LDFLAGS+=-ffreestanding -nostartfiles
|
|
CFLAGS+=-DWOLFBOOT_RENESAS_APP
|
|
else
|
|
APP_OBJS:=app_$(TARGET).o led.o system.o timer.o ../test-app/libwolfboot.o
|
|
endif
|
|
endif
|
|
|
|
include ../arch.mk
|
|
|
|
ifeq ($(USE_CLANG),1)
|
|
APP_NEEDS_STRING:=1
|
|
endif
|
|
|
|
# Optional alias for clearer TZ PSA selection in app builds.
|
|
ifeq ($(WOLFCRYPT_TZ_PSA),1)
|
|
WOLFCRYPT_TZ=1
|
|
WOLFCRYPT_TZ_PSA=1
|
|
endif
|
|
|
|
# Setup default linker flags
|
|
LDFLAGS+=-T $(LSCRIPT) -Wl,-gc-sections -Wl,-Map=image.map -nostartfiles
|
|
|
|
# Setup default objcopy flags
|
|
OBJCOPY_FLAGS+=--gap-fill $(FILL_BYTE)
|
|
OBJCOPY_IMAGE_FLAGS:=
|
|
|
|
ifeq ($(USE_CLANG),1)
|
|
# Clang-built ARM ELFs can keep RAM sections as loadable segments, and raw
|
|
# objcopy output then expands the flash-to-RAM gap into a huge sparse image.
|
|
# The app image only needs the flash-backed output sections.
|
|
ifneq ($(TZEN),1)
|
|
OBJCOPY_IMAGE_FLAGS+=$(CLANG_ARM_OBJCOPY_FLASH_FLAGS_APP)
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(DEBUG_UART),1)
|
|
CFLAGS+=-DDEBUG_UART
|
|
APP_NEEDS_STRING:=1
|
|
endif
|
|
|
|
ifeq ($(APP_NEEDS_STRING),1)
|
|
APP_OBJS+=../src/string.o
|
|
endif
|
|
|
|
# wolfCrypt Test and Benchmark Support
|
|
WOLFCRYPT_SUPPORT=0
|
|
|
|
ifeq ($(WOLFCRYPT_TEST),1)
|
|
CFLAGS+=-DWOLFCRYPT_TEST
|
|
WOLFCRYPT_SUPPORT=1
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/test/test.o
|
|
endif
|
|
|
|
ifeq ($(WOLFCRYPT_BENCHMARK),1)
|
|
CFLAGS+=-DWOLFCRYPT_BENCHMARK
|
|
WOLFCRYPT_SUPPORT=1
|
|
UART_PRINTF_FLOAT?=1
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/benchmark/benchmark.o
|
|
endif
|
|
|
|
ifeq ($(UART_PRINTF_FLOAT),1)
|
|
CFLAGS+=-DUART_PRINTF_FLOAT
|
|
endif
|
|
|
|
ifeq ($(WOLFCRYPT_SUPPORT),1)
|
|
# Add support infrastructure
|
|
APP_OBJS+=wolfcrypt_support.o
|
|
APP_OBJS+=syscalls.o
|
|
|
|
# Add wolfCrypt core implementation files
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/hash.o
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/wc_port.o
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/logging.o
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/misc.o
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/wolfmath.o
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/memory.o
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/asn.o
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/coding.o
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/wc_encrypt.o
|
|
|
|
# Add SHA implementations (needed for test/benchmark)
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sha256.o
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sha512.o
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/hmac.o
|
|
|
|
# Add RNG support (needed for ECC signing and tests)
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/random.o
|
|
|
|
# Add AES support (needed by benchmark for AES-CBC etc.)
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/aes.o
|
|
|
|
# Add ECC support (needed by test suite)
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/ecc.o
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sp_int.o
|
|
|
|
# Add SP C math (all architectures)
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sp_c32.o
|
|
|
|
ifneq ($(NO_ASM),1)
|
|
# SP Cortex M
|
|
ifneq ($(filter ARM ARM_BE,$(ARCH)),)
|
|
ifeq ($(SPMATH),1)
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sp_cortexm.o
|
|
endif
|
|
|
|
ifneq ($(NO_ARM_ASM),1)
|
|
APP_OBJS+= \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/arm/thumb2-aes-asm_c.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/arm/thumb2-sha256-asm_c.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/arm/thumb2-sha512-asm_c.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/arm/thumb2-sha3-asm_c.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/arm/thumb2-chacha-asm_c.o
|
|
|
|
CFLAGS+=-DWOLFSSL_ARMASM -DWOLFSSL_ARMASM_NO_HW_CRYPTO -DWOLFSSL_ARMASM_INLINE \
|
|
-DWOLFSSL_ARMASM_NO_NEON -DWOLFSSL_ARMASM_THUMB2
|
|
endif
|
|
endif
|
|
|
|
# Power PC
|
|
ifeq ($(ARCH),PPC)
|
|
# SP mp int PowerPC ASM
|
|
ifeq ($(PPC64),1)
|
|
CFLAGS+=-DWOLFSSL_SP_PPC64
|
|
else
|
|
CFLAGS+=-DWOLFSSL_SP_PPC
|
|
endif
|
|
|
|
# SHA256
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.o
|
|
CFLAGS+=-DWOLFSSL_PPC32_ASM
|
|
CFLAGS+=-DWOLFSSL_PPC32_ASM_INLINE
|
|
CFLAGS+=-DWOLFSSL_PPC32_ASM_SMALL
|
|
|
|
ifeq ($(PPC64),1) # requires wolfssl PR 9852
|
|
# AES
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/ppc64/ppc64-aes-asm_c.o
|
|
CFLAGS+=-DWOLFSSL_PPC64_ASM
|
|
CFLAGS+=-DWOLFSSL_PPC64_ASM_INLINE
|
|
CFLAGS+=-DWOLFSSL_PPC64_ASM_SMALL
|
|
CFLAGS+=-DWOLFSSL_PPC64_ASM_AES_NO_HARDEN
|
|
endif
|
|
|
|
CFLAGS+=-fomit-frame-pointer
|
|
endif
|
|
endif
|
|
|
|
CFLAGS+=-DWOLFSSL_USER_SETTINGS
|
|
CFLAGS+=-I"$(WOLFBOOT_LIB_WOLFSSL)"
|
|
endif # WOLFCRYPT_SUPPORT
|
|
|
|
ifeq ($(TZEN),1)
|
|
CFLAGS+=-DNONSECURE_APP
|
|
CFLAGS+=-I./
|
|
APP_OBJS+=../hal/$(TARGET)_ns.o
|
|
APP_OBJS+=../src/wolfboot_tz_nsc.o
|
|
ifeq ($(WOLFCRYPT_TZ),1)
|
|
CFLAGS+=-I"$(WOLFBOOT_LIB_WOLFSSL)"
|
|
WOLFCRYPT_APP_OBJS+=\
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/memory.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/hash.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sha.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sha256.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sha512.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sha3.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/hmac.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/pwdbased.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/pkcs12.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/coding.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/asn.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/ecc.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/rsa.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/aes.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/wolfmath.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sp_int.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sp_cortexm.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sp_c32.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/wc_port.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/wolfentropy.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/dh.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/wc_encrypt.o
|
|
ifeq ($(WOLFCRYPT_TZ_PKCS11),1)
|
|
CFLAGS+=-DWOLFSSL_USER_SETTINGS -DWOLFTPM_USER_SETTINGS
|
|
CFLAGS+=-DWOLFBOOT_PKCS11_APP -DSECURE_PKCS11 -DWOLFBOOT_TZ_PKCS11
|
|
ifeq ($(PKCS11_TESTAPP),1)
|
|
CFLAGS+=-DWOLFBOOT_PKCS11_TESTAPP
|
|
endif
|
|
CFLAGS+=-I"$(WOLFBOOT_LIB_WOLFPKCS11)"
|
|
APP_OBJS+=./test_pkcs11.o
|
|
APP_OBJS+=./wcs/pkcs11_stub.o
|
|
APP_OBJS+=./wcs/ecc.o
|
|
APP_OBJS+=./wcs/rsa.o
|
|
APP_OBJS+=./wcs/asn.o
|
|
APP_OBJS+=./wcs/aes.o
|
|
APP_OBJS+=./wcs/hmac.o
|
|
APP_OBJS+=./wcs/pwdbased.o
|
|
APP_OBJS+=./wcs/hash.o
|
|
APP_OBJS+=./wcs/sha256.o
|
|
APP_OBJS+=./wcs/sha512.o
|
|
APP_OBJS+=./wcs/sha3.o
|
|
APP_OBJS+=./wcs/integer.o
|
|
APP_OBJS+=./wcs/tfm.o
|
|
APP_OBJS+=./wcs/sp_c32.o
|
|
APP_OBJS+=./wcs/sp_int.o
|
|
APP_OBJS+=./wcs/cryptocb.o
|
|
APP_OBJS+=./wcs/wc_pkcs11.o
|
|
APP_OBJS+=./wcs/memory.o
|
|
APP_OBJS+=./wcs/wolfmath.o
|
|
APP_OBJS+=./wcs/dh.o
|
|
APP_OBJS+=./wcs/random.o
|
|
APP_OBJS+=./wcs/coding.o
|
|
APP_OBJS+=./wcs/wc_encrypt.o
|
|
APP_OBJS+=./wcs/wc_port.o
|
|
|
|
ifeq ($(SPMATH),1)
|
|
CFLAGS+=-DWOLFSSL_HAVE_SP_RSA -DWOLFSSL_HAVE_SP_ECC
|
|
ifneq ($(NO_ASM),1)
|
|
CFLAGS+=-fomit-frame-pointer # required with debug builds only
|
|
CFLAGS+=-DWOLFSSL_SP_ARM_CORTEX_M_ASM
|
|
APP_OBJS+=./wcs/sp_cortexm.o
|
|
endif
|
|
endif
|
|
else
|
|
ifeq ($(TEST_APP_NO_RNG),1)
|
|
CFLAGS+=-DWC_NO_RNG
|
|
else
|
|
WOLFCRYPT_APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/random.o
|
|
endif
|
|
endif
|
|
CFLAGS+=-DWOLFBOOT_SECURE_CALLS
|
|
ifneq ($(USE_CLANG),1)
|
|
CFLAGS+=-Wstack-usage=19184
|
|
endif
|
|
LDFLAGS+=--specs=nosys.specs -u _printf_float
|
|
endif
|
|
ifeq ($(WOLFCRYPT_TZ_PSA),1)
|
|
CFLAGS+=-DWOLFCRYPT_TZ_PSA -DWOLFSSL_HAVE_PSA
|
|
CFLAGS+=-I../zephyr/include -I../lib/wolfPSA/wolfpsa
|
|
CFLAGS+=-I"$(WOLFBOOT_LIB_WOLFSSL)" -I"$(WOLFBOOT_LIB_WOLFSSL)/wolfssl"
|
|
APP_OBJS+=hal_trng_psa.o
|
|
APP_OBJS+=../zephyr/src/wolfboot_psa_ns_api.o
|
|
APP_OBJS+=arm_tee_ns_interface_stub.o
|
|
APP_OBJS+=../zephyr/src/arm_tee_attest_api.o
|
|
APP_OBJS+=../zephyr/src/arm_tee_crypto_api.o
|
|
WOLFCRYPT_APP_OBJS+=\
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/psa/psa.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/psa/psa_aes.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/psa/psa_hash.o \
|
|
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/psa/psa_pkcbs.o
|
|
endif
|
|
WOLFCRYPT_APP_OBJS := $(patsubst $(WOLFBOOT_LIB_WOLFSSL)/%, \
|
|
$(WOLFSSL_LOCAL_OBJDIR)/%, $(WOLFCRYPT_APP_OBJS))
|
|
ifneq ($(WOLFCRYPT_TZ_PKCS11),1)
|
|
APP_OBJS+=$(sort $(WOLFCRYPT_APP_OBJS))
|
|
endif
|
|
else
|
|
APP_OBJS+=../hal/$(TARGET).o
|
|
endif
|
|
|
|
ifeq ($(ARCH),RISCV)
|
|
APP_OBJS+=startup_riscv.o vector_riscv.o
|
|
endif
|
|
|
|
ifeq ($(ARCH),AARCH64)
|
|
APP_OBJS:=boot_arm64_start.o $(APP_OBJS)
|
|
# Prevent inclusion of standard C runtime startup files that conflict with boot_arm64_start.S
|
|
# Use -Wl, prefix to pass flags directly to linker when GCC is used as linker driver
|
|
LDFLAGS+=-nostartfiles -nostdlib -nodefaultlibs -Wl,--entry=_start
|
|
endif
|
|
|
|
ifeq ($(ARCH),RISCV64)
|
|
APP_OBJS+=startup_riscv.o vector_riscv.o
|
|
endif
|
|
|
|
ifeq ($(ARCH),ARM)
|
|
APP_OBJS+=startup_arm.o
|
|
endif
|
|
ifeq ($(ARCH),ARM_BE)
|
|
APP_OBJS+=startup_arm.o
|
|
CFLAGS+=-DSTACK_PAINTING=0
|
|
endif
|
|
|
|
ifeq ($(ENCRYPT),1)
|
|
CFLAGS+=-D"EXT_ENCRYPTED=1"
|
|
endif
|
|
|
|
ENTRY_POINT=`cat .entry-point-address`
|
|
LSCRIPT:=../config/target-app.ld
|
|
LSCRIPT_TEMPLATE:=$(ARCH).ld
|
|
|
|
ifeq ($(TARGET),stm32f7)
|
|
LSCRIPT_TEMPLATE=ARM-stm32f7.ld
|
|
CFLAGS+=-DDUALBANK_SWAP
|
|
endif
|
|
|
|
ifeq ($(TARGET),stm32h7)
|
|
LSCRIPT_TEMPLATE=ARM-stm32h7.ld
|
|
endif
|
|
|
|
ifeq ($(TARGET),stm32c0)
|
|
LSCRIPT_TEMPLATE=ARM-stm32c0.ld
|
|
endif
|
|
|
|
ifeq ($(TARGET),sama5d3)
|
|
APP_OBJS+=./boot_arm32_start.o
|
|
LSCRIPT_TEMPLATE:=$(ARCH)-$(TARGET).ld
|
|
endif
|
|
|
|
ifeq ($(TARGET),stm32l4)
|
|
APP_OBJS+=$(STM32CUBE)/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash.o
|
|
APP_OBJS+=$(STM32CUBE)/Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ex.o
|
|
CFLAGS+=-DSTM32L4A6xx -DUSE_HAL_DRIVER -I../src -I../hal \
|
|
-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),stm32l5)
|
|
ifeq ($(TZEN),1)
|
|
LSCRIPT_TEMPLATE=ARM-stm32l5-ns.ld
|
|
APP_OBJS+=wcs/wolfcrypt_secure.o
|
|
else
|
|
LSCRIPT_TEMPLATE=ARM-stm32l5.ld
|
|
endif
|
|
CFLAGS+=-mcpu=cortex-m33 -ffunction-sections -fdata-sections -fno-common
|
|
LDFLAGS+=-mcpu=cortex-m33
|
|
LDFLAGS+=-Wl,-gc-sections -Wl,-Map=image.map
|
|
CFLAGS+=-I..
|
|
APP_OBJS+=../hal/uart/uart_drv_$(UART_TARGET).o
|
|
endif
|
|
|
|
ifeq ($(TARGET),stm32h5)
|
|
ifeq ($(TZEN),1)
|
|
LSCRIPT_TEMPLATE=ARM-stm32h5-ns.ld
|
|
APP_OBJS+=wcs/wolfcrypt_secure.o
|
|
ifeq ($(WOLFCRYPT_TZ),1)
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/logging.o
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/test/test.o
|
|
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/benchmark/benchmark.o
|
|
endif
|
|
else
|
|
LSCRIPT_TEMPLATE=ARM-stm32h5.ld
|
|
endif
|
|
CFLAGS+=-DAPP_HAS_SYSTICK
|
|
CFLAGS+=-DRAMFUNCTION='__attribute__((used,section(".ramcode"),long_call))'
|
|
CFLAGS+=-mcpu=cortex-m33 -ffunction-sections -fdata-sections -fno-common
|
|
CFLAGS+=-mlong-calls
|
|
LDFLAGS+=-mcpu=cortex-m33
|
|
LDFLAGS+=-Wl,-gc-sections -Wl,-Map=image.map
|
|
CFLAGS+=-I..
|
|
APP_OBJS+=../hal/uart/uart_drv_$(UART_TARGET).o
|
|
ifneq ($(SIGN),NONE)
|
|
ifeq ($(FLASH_OTP_KEYSTORE),1)
|
|
APP_OBJS+=../src/flash_otp_keystore.o
|
|
else
|
|
APP_OBJS+=../src/keystore.o
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(TARGET),stm32u5)
|
|
ifeq ($(TZEN),1)
|
|
LSCRIPT_TEMPLATE=ARM-stm32u5-ns.ld
|
|
else
|
|
LSCRIPT_TEMPLATE=ARM-stm32u5.ld
|
|
endif
|
|
CFLAGS+=-mcpu=cortex-m33
|
|
LDFLAGS+=-mcpu=cortex-m33
|
|
endif
|
|
|
|
ifeq ($(TARGET),nrf5340)
|
|
ifeq ($(TZEN),1)
|
|
LSCRIPT_TEMPLATE=ARM-nrf5340-ns.ld
|
|
else
|
|
LSCRIPT_TEMPLATE=ARM.ld
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(TARGET),nrf54l)
|
|
ifeq ($(TZEN),1)
|
|
LSCRIPT_TEMPLATE=ARM-nrf54l-ns.ld
|
|
else
|
|
LSCRIPT_TEMPLATE=ARM.ld
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(TARGET),nrf5340_net)
|
|
CFLAGS+=-mcpu=cortex-m33+nodsp+nofp
|
|
LDFLAGS+=-mcpu=cortex-m33+nodsp+nofp
|
|
LSCRIPT_TEMPLATE=ARM-nrf5340_net.ld
|
|
endif
|
|
|
|
ifeq ($(TARGET),ti_hercules)
|
|
LSCRIPT_TEMPLATE=ARM-r5be.ld
|
|
# Override linker flags
|
|
LDFLAGS=--run_linker $(LSCRIPT) --map_file=image.map
|
|
OBJCOPY_FLAGS=
|
|
endif
|
|
|
|
ifeq ($(TARGET),va416x0)
|
|
APP_OBJS+=$(SDK_OBJS)
|
|
LSCRIPT_TEMPLATE=ARM-va416x0.ld
|
|
ifneq ($(SIGN),NONE)
|
|
APP_OBJS+=../src/keystore.o
|
|
endif
|
|
# Reduce size: newlib-nano and section GC
|
|
LDFLAGS+=--specs=nano.specs
|
|
ifneq ($(WOLFCRYPT_SUPPORT),1)
|
|
# Only use nosys stubs when not providing our own syscalls
|
|
LDFLAGS+=--specs=nosys.specs
|
|
endif
|
|
ifeq ($(WOLFCRYPT_BENCHMARK),1)
|
|
# Benchmark needs float printf for results
|
|
LDFLAGS+=-u _printf_float
|
|
endif
|
|
CFLAGS+=-ffunction-sections -fdata-sections
|
|
endif
|
|
|
|
PPC64=0
|
|
ifeq ($(TARGET),nxp_t2080)
|
|
ifneq ($(SIGN),NONE)
|
|
APP_OBJS+=../src/keystore.o
|
|
endif
|
|
CFLAGS+=-ffunction-sections -fdata-sections
|
|
|
|
# PowerPC e6500
|
|
PPC64=1
|
|
endif
|
|
|
|
ifeq ($(TARGET),nxp_t1024)
|
|
ifneq ($(SIGN),NONE)
|
|
APP_OBJS+=../src/keystore.o
|
|
endif
|
|
# PowerPC e5500
|
|
PPC64=1
|
|
endif
|
|
ifeq ($(TARGET),nxp_t1040)
|
|
ifneq ($(SIGN),NONE)
|
|
APP_OBJS+=../src/keystore.o
|
|
endif
|
|
# PowerPC e5500
|
|
PPC64=1
|
|
endif
|
|
|
|
ifeq ($(TARGET),sim)
|
|
# LD on MacOS does not support "-Map="
|
|
LDMAPSUPPORTED=$(shell $(CC) -Wl,-Map=image.map 2>&1 | grep 'unknown option')
|
|
LDFLAGS=
|
|
ifeq ($(FORCE_32BIT),1)
|
|
LDFLAGS+=-m32
|
|
CFLAGS+=-m32
|
|
endif
|
|
ifeq ($(LDMAPSUPPORTED),)
|
|
# Override linker flags
|
|
LDFLAGS+=-Wl,-Map=image.map
|
|
endif
|
|
ifeq ($(ELF_FLASH_SCATTER),1)
|
|
LSCRIPT_TEMPLATE=sim_scattered.ld
|
|
APP_OBJS=app_sim_scattered.o ../src/string.o
|
|
CFLAGS+=-D"WOLFBOOT_ELF_FLASH_SCATTER=1" -nostartfiles -ffreestanding -static -nostdlib
|
|
LDFLAGS+=-ffreestanding -nostartfiles -static -T$(LSCRIPT) -nostdlib
|
|
else
|
|
APP_OBJS=app_sim.o
|
|
APP_OBJS+=../test-app/libwolfboot.o ../hal/$(TARGET).o
|
|
endif
|
|
endif
|
|
|
|
# Self-header verification requires image.c (for verify_integrity/verify_authenticity)
|
|
# and keystore (for public key lookup), plus wolfcrypt for crypto operations
|
|
ifeq ($(WOLFBOOT_SELF_HEADER),1)
|
|
CFLAGS+=-D"WOLFBOOT_SELF_HEADER"
|
|
CFLAGS+=-I"$(WOLFBOOT_LIB_WOLFSSL)"
|
|
# Test app needs additional image, keystore, and crypto objects to do verification
|
|
APP_OBJS+=../src/image.o ../src/keystore.o
|
|
# Only add wolfcrypt objs if WOLFHSM blocks won't provide them
|
|
ifeq ($(WOLFHSM_CLIENT)$(WOLFHSM_SERVER),)
|
|
# remove duplicates for certain object files
|
|
APP_OBJS+=$(sort $(WOLFCRYPT_OBJS))
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(EXT_FLASH),1)
|
|
CFLAGS+=-D"EXT_FLASH=1" -D"PART_UPDATE_EXT=1"
|
|
ifeq ($(NO_XIP),1)
|
|
CFLAGS+=-D"PART_BOOT_EXT=1"
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(SPI_FLASH),1)
|
|
CFLAGS+=-D"SPI_FLASH"
|
|
APP_OBJS+=../src/spi_flash.o
|
|
ifeq ($(ARCH),RENESAS_RX)
|
|
APP_OBJS+=../hal/spi/spi_drv_renesas_rx.o
|
|
else
|
|
APP_OBJS+=../hal/spi/spi_drv_$(SPI_TARGET).o
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(OCTOSPI_FLASH),1)
|
|
QSPI_FLASH = 1
|
|
CFLAGS+=-D"OCTOSPI_FLASH"
|
|
endif
|
|
|
|
ifeq ($(QSPI_FLASH),1)
|
|
CFLAGS+=-D"QSPI_FLASH"
|
|
APP_OBJS+=../src/qspi_flash.o
|
|
ifeq ($(ARCH),RENESAS_RX)
|
|
APP_OBJS+=../hal/spi/spi_drv_renesas_rx.o
|
|
else
|
|
ifeq ($(TZEN),1)
|
|
APP_OBJS+=../hal/spi/spi_drv_$(SPI_TARGET)_ns.o
|
|
else
|
|
APP_OBJS+=../hal/spi/spi_drv_$(SPI_TARGET).o
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(UART_FLASH),1)
|
|
CFLAGS+=-D"UART_FLASH=1"
|
|
APP_OBJS+= ../src/uart_flash.o ../hal/uart/uart_drv_$(UART_TARGET).o
|
|
else
|
|
ifeq ($(TARGET),stm32wb)
|
|
APP_OBJS+=../hal/uart/uart_drv_$(UART_TARGET).o
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(TARGET),kinetis)
|
|
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/drivers/fsl_clock.o
|
|
ifeq ($(MCUXSDK),1)
|
|
APP_OBJS+=\
|
|
$(MCUXPRESSO)/drivers/flash/fsl_ftfx_flash.o \
|
|
$(MCUXPRESSO)/drivers/flash/fsl_ftfx_cache.o \
|
|
$(MCUXPRESSO)/drivers/flash/fsl_ftfx_controller.o
|
|
else
|
|
APP_OBJS+=\
|
|
$(MCUXPRESSO_DRIVERS)/drivers/fsl_ftfx_flash.o \
|
|
$(MCUXPRESSO_DRIVERS)/drivers/fsl_ftfx_cache.o \
|
|
$(MCUXPRESSO_DRIVERS)/drivers/fsl_ftfx_controller.o
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(TARGET),mcxa)
|
|
LSCRIPT_TEMPLATE=ARM-mcxa.ld
|
|
APP_OBJS+=$(MCUXPRESSO_PROJECT_TEMPLATE)/clock_config.o
|
|
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/drivers/fsl_clock.o
|
|
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/drivers/fsl_reset.o
|
|
APP_OBJS+=$(MCUXPRESSO)/drivers/gpio/fsl_gpio.o
|
|
APP_OBJS+=$(MCUXPRESSO)/drivers/mcx_spc/fsl_spc.o
|
|
LDFLAGS+=--specs=nosys.specs
|
|
endif
|
|
|
|
ifeq ($(TARGET),s32k1xx)
|
|
LSCRIPT_TEMPLATE=ARM-s32k1xx.ld
|
|
ifneq ($(SIGN),NONE)
|
|
APP_OBJS+=../src/keystore.o
|
|
endif
|
|
CFLAGS+=-DAPP_HAS_SYSTICK
|
|
CFLAGS+=-DRAM_CODE -DDEBUG_UART
|
|
endif
|
|
|
|
ifeq ($(TARGET),mcxw)
|
|
ifeq ($(TZEN),1)
|
|
LSCRIPT_TEMPLATE=ARM-mcxw-ns.ld
|
|
CFLAGS:=$(filter-out -mcmse, $(CFLAGS))
|
|
else
|
|
LSCRIPT_TEMPLATE=ARM-mcxw.ld
|
|
endif
|
|
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/drivers/fsl_clock.o
|
|
APP_OBJS+=$(MCUXPRESSO)/drivers/gpio/fsl_gpio.o
|
|
APP_OBJS+=$(MCUXPRESSO)/drivers/spc/fsl_spc.o
|
|
APP_OBJS+=$(MCUXPRESSO_PROJECT_TEMPLATE)/clock_config.o
|
|
APP_OBJS+=$(MCUXPRESSO)/drivers/ccm32k/fsl_ccm32k.o
|
|
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/drivers/romapi/fsl_romapi.o
|
|
LDFLAGS+=--specs=nosys.specs
|
|
endif
|
|
|
|
ifeq ($(TARGET),mcxn)
|
|
ifeq ($(TZEN),1)
|
|
LSCRIPT_TEMPLATE=ARM-mcxn-ns.ld
|
|
CFLAGS:=$(filter-out -mcmse, $(CFLAGS))
|
|
else
|
|
LSCRIPT_TEMPLATE=ARM-mcxn.ld
|
|
endif
|
|
APP_OBJS+=\
|
|
$(MCUXPRESSO_PROJECT_TEMPLATE)/clock_config.o \
|
|
$(MCUXPRESSO)/drivers/gpio/fsl_gpio.o \
|
|
$(MCUXPRESSO)/drivers/lpflexcomm/fsl_lpflexcomm.o \
|
|
$(MCUXPRESSO)/drivers/lpuart/fsl_lpuart.o \
|
|
$(MCUXPRESSO_DRIVERS)/drivers/fsl_reset.o \
|
|
$(MCUXPRESSO_DRIVERS)/drivers/fsl_clock.o \
|
|
$(MCUXPRESSO_DRIVERS)/drivers/romapi/flash/src/fsl_flash.o
|
|
ifeq (,$(findstring nosys.specs,$(LDFLAGS)))
|
|
LDFLAGS+=--specs=nosys.specs
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(TARGET),lpc55s69)
|
|
ifeq ($(TZEN),1)
|
|
LSCRIPT_TEMPLATE=ARM-lpc55s69-ns.ld
|
|
CFLAGS:=$(filter-out -mcmse, $(CFLAGS))
|
|
else
|
|
LSCRIPT_TEMPLATE=ARM-lpc55s69.ld
|
|
endif
|
|
APP_OBJS+=\
|
|
$(MCUXPRESSO_PROJECT_TEMPLATE)/clock_config.o \
|
|
$(MCUXPRESSO_DRIVERS)/drivers/fsl_clock.o \
|
|
$(MCUXPRESSO_DRIVERS)/drivers/fsl_reset.o \
|
|
$(MCUXPRESSO)/drivers/common/fsl_common_arm.o \
|
|
$(MCUXPRESSO)/drivers/flexcomm/fsl_flexcomm.o \
|
|
$(MCUXPRESSO)/drivers/flexcomm/usart/fsl_usart.o \
|
|
$(MCUXPRESSO)/drivers/iap1/fsl_iap.o \
|
|
$(MCUXPRESSO)/drivers/lpc_gpio/fsl_gpio.o
|
|
ifeq ($(WOLFCRYPT_TZ),1)
|
|
APP_OBJS+=$(MCUXPRESSO)/drivers/rng_1/fsl_rng.o
|
|
endif
|
|
ifeq (,$(findstring nosys.specs,$(LDFLAGS)))
|
|
LDFLAGS+=--specs=nosys.specs
|
|
endif
|
|
LDFLAGS+=-Wl,--no-warn-rwx-segments
|
|
endif
|
|
|
|
ifeq ($(TARGET),imx_rt)
|
|
LDFLAGS+=\
|
|
-mcpu=cortex-m7 -Wall --specs=nosys.specs -fno-common -ffunction-sections -fdata-sections \
|
|
-ffreestanding -fno-builtin -mthumb -mapcs -Xlinker --gc-sections -Xlinker -static -Xlinker -z \
|
|
-Xlinker muldefs -Xlinker -Map=output.map -static -lm -lc -lnosys
|
|
LSCRIPT_TEMPLATE=imx_rt.ld
|
|
APP_OBJS+=\
|
|
imx_rt_clock_config.o \
|
|
$(MCUXPRESSO_DRIVERS)/drivers/fsl_clock.o \
|
|
$(MCUXPRESSO)/components/uart/fsl_adapter_lpuart.o \
|
|
$(MCUXPRESSO)/components/serial_manager/fsl_component_serial_manager.o \
|
|
$(MCUXPRESSO)/components/lists/fsl_component_generic_list.o \
|
|
$(MCUXPRESSO)/components/serial_manager/fsl_component_serial_port_uart.o \
|
|
$(MCUXPRESSO)/components/flash/nor/flexspi/fsl_flexspi_nor_flash.o
|
|
ifeq ($(MCUXSDK),1)
|
|
APP_OBJS+=\
|
|
$(MCUXPRESSO)/drivers/igpio/fsl_gpio.o \
|
|
$(MCUXPRESSO)/drivers/cache/armv7-m7/fsl_cache.o \
|
|
$(MCUXPRESSO)/drivers/common/fsl_common.o \
|
|
$(MCUXPRESSO)/drivers/common/fsl_common_arm.o \
|
|
$(MCUXPRESSO)/drivers/flexspi/fsl_flexspi.o \
|
|
$(MCUXPRESSO)/drivers/lpuart/fsl_lpuart.o \
|
|
$(MCUXPRESSO)/components/str/fsl_str.o \
|
|
$(MCUXPRESSO)/components/debug_console/fsl_debug_console.o
|
|
else
|
|
APP_OBJS+=\
|
|
$(MCUXPRESSO_DRIVERS)/drivers/fsl_gpio.o \
|
|
$(MCUXPRESSO_DRIVERS)/drivers/fsl_cache.o \
|
|
$(MCUXPRESSO_DRIVERS)/drivers/fsl_common.o \
|
|
$(MCUXPRESSO_DRIVERS)/drivers/fsl_common_arm.o \
|
|
$(MCUXPRESSO_DRIVERS)/drivers/fsl_flexspi.o \
|
|
$(MCUXPRESSO_DRIVERS)/utilities/str/fsl_str.o \
|
|
$(MCUXPRESSO_DRIVERS)/drivers/fsl_lpuart.o \
|
|
$(MCUXPRESSO_DRIVERS)/utilities/debug_console/fsl_debug_console.o
|
|
endif
|
|
|
|
ifeq ($(MCUXPRESSO_CPU),MIMXRT1042XJM5B)
|
|
ifeq ($(MCUXSDK),1)
|
|
CFLAGS+=-I$(MCUXPRESSO)/examples/_boards/evkmimxrt1040/project_template \
|
|
-I$(MCUXPRESSO)/examples/_boards/evkmimxrt1040/xip/
|
|
else
|
|
CFLAGS+=-I$(MCUXPRESSO_DRIVERS)/project_template/ \
|
|
-I$(MCUXPRESSO)/boards/evkmimxrt1040/xip/
|
|
endif
|
|
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/system_MIMXRT1042.o
|
|
else ifeq ($(MCUXPRESSO_CPU),MIMXRT1052DVJ6B)
|
|
ifeq ($(MCUXSDK),1)
|
|
CFLAGS+=-I$(MCUXPRESSO)/examples/_boards/evkbimxrt1050/project_template \
|
|
-I$(MCUXPRESSO)/examples/_boards/evkbimxrt1050/xip/
|
|
else
|
|
CFLAGS+=-I$(MCUXPRESSO_DRIVERS)/project_template/ \
|
|
-I$(MCUXPRESSO)/boards/evkmimxrt1050/xip/
|
|
endif
|
|
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/system_MIMXRT1052.o
|
|
else
|
|
ifeq ($(MCUXPRESSO_CPU),MIMXRT1062DVL6A)
|
|
ifeq ($(MCUXSDK),1)
|
|
CFLAGS+=-I$(MCUXPRESSO)/examples/_boards/evkmimxrt1060/project_template \
|
|
-I$(MCUXPRESSO)/examples/_boards/evkmimxrt1060/xip/
|
|
else
|
|
CFLAGS+=-I$(MCUXPRESSO_DRIVERS)/project_template/ \
|
|
-I$(MCUXPRESSO)/boards/evkmimxrt1060/xip/
|
|
endif
|
|
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/system_MIMXRT1062.o
|
|
endif
|
|
ifeq ($(MCUXPRESSO_CPU),MIMXRT1062DVL6B)
|
|
ifeq ($(MCUXSDK),1)
|
|
CFLAGS+=-I$(MCUXPRESSO)/examples/_boards/evkbmimxrt1060/project_template \
|
|
-I$(MCUXPRESSO)/examples/_boards/evkbmimxrt1060/xip/
|
|
else
|
|
CFLAGS+=-I$(MCUXPRESSO_DRIVERS)/project_template/ \
|
|
-I$(MCUXPRESSO)/boards/evkbmimxrt1060/xip/
|
|
endif
|
|
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/system_MIMXRT1062.o
|
|
endif
|
|
ifeq ($(MCUXPRESSO_CPU),MIMXRT1064DVL6A)
|
|
ifeq ($(MCUXSDK),1)
|
|
CFLAGS+=-I$(MCUXPRESSO)/examples/_boards/evkmimxrt1064/project_template \
|
|
-I$(MCUXPRESSO)/examples/_boards/evkmimxrt1064/xip/
|
|
else
|
|
CFLAGS+=-I$(MCUXPRESSO_DRIVERS)/project_template/ \
|
|
-I$(MCUXPRESSO)/boards/evkmimxrt1064/xip/
|
|
endif
|
|
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/system_MIMXRT1064.o
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(TARGET),stm32g0)
|
|
CFLAGS+=-DNVM_FLASH_WRITEONCE=1
|
|
endif
|
|
ifeq ($(TARGET),stm32c0)
|
|
CFLAGS+=-DNVM_FLASH_WRITEONCE=1
|
|
endif
|
|
|
|
ifeq ($(TARGET),hifive1.freedom)
|
|
CFLAGS+=-I$(FREEDOM_E_SDK)/freedom-metal/ -D__METAL_MACHINE_HEADER=\"$(FREEDOM_E_SDK)/bsp/sifive-hifive1/metal.h\"
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/clock.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/led.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/cache.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/cpu.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/gpio.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/interrupt.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/uart.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/tty.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/spi.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/shutdown.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/timer.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/drivers/sifive,fe310-g000,hfrosc.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/drivers/sifive,fe310-g000,hfxosc.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/drivers/sifive,fe310-g000,pll.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/drivers/sifive,fe310-g000,prci.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/drivers/sifive,spi0.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/drivers/sifive,uart0.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/drivers/sifive,global-external-interrupts0.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/drivers/sifive,local-external-interrupts0.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/drivers/sifive,gpio0.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/drivers/sifive,gpio-leds.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/drivers/riscv,clint0.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/drivers/riscv,plic0.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/drivers/riscv,cpu.o
|
|
APP_OBJS+=$(FREEDOM_E_SDK)/freedom-metal/src/drivers/fixed-clock.o
|
|
endif
|
|
|
|
ifeq ($(TARGET),hifive1)
|
|
CFLAGS+=-DRAMFUNCTION='__attribute__((used,section(".ramcode")))'
|
|
APP_OBJS+=hifive1_write_page.o
|
|
endif
|
|
|
|
ifeq ($(TARGET),mpfs250)
|
|
LSCRIPT_TEMPLATE:=RISCV64-mpfs250.ld
|
|
CFLAGS+=-DRAMFUNCTION='__attribute__((used,section(".ramcode")))'
|
|
endif
|
|
|
|
# $(CYPRESS_PDL)/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/system_psoc6_cm0plus.o
|
|
|
|
ifeq ($(TARGET),psoc6)
|
|
LSCRIPT_TEMPLATE:=ARM-psoc6.ld
|
|
APP_OBJS+= $(CYPRESS_PDL)/drivers/source/cy_gpio.o
|
|
APP_OBJS+= $(CYPRESS_PDL)/drivers/source/cy_device.o
|
|
CFLAGS+=-I$(CYPRESS_PDL)/drivers/include/
|
|
CFLAGS+=-I$(CYPRESS_PDL)/devices/include
|
|
CFLAGS+=-I$(CYPRESS_PDL)/cmsis/include
|
|
CFLAGS+=-I$(CYPRESS_TARGET_LIB)
|
|
CFLAGS+=-I$(CYPRESS_CORE_LIB)/include
|
|
CFLAGS+=-I$(CYPRESS_PDL)/devices/include/ip
|
|
CFLAGS+=-I$(CYPRESS_PDL)/devices/templates/COMPONENT_MTB
|
|
CFLAGS+=-DCY8C624ABZI_D44
|
|
endif
|
|
|
|
ifeq ($(TARGET),x86_fsp_qemu)
|
|
APP_OBJS:=app_$(TARGET).o ../hal/x86_uart.o ../src/x86/common.o ../src/string.o
|
|
LSCRIPT_TEMPLATE:=x86_fsp.ld
|
|
LDFLAGS=
|
|
endif
|
|
|
|
ifeq ($(TARGET),versal)
|
|
LSCRIPT_TEMPLATE:=AARCH64.ld
|
|
LDFLAGS+=-nostdlib
|
|
# Enable DEBUG_UART for test-app to use wolfBoot_printf and hal functions
|
|
DEBUG_UART:=1
|
|
CFLAGS+=-DDEBUG_UART
|
|
endif
|
|
|
|
ifeq ($(TARGET),zynq)
|
|
LSCRIPT_TEMPLATE:=AARCH64.ld
|
|
endif
|
|
|
|
ifeq ($(TARGET),pic32ck)
|
|
APP_OBJS+=../hal/pic32c.o
|
|
endif
|
|
|
|
ifeq ($(TARGET), pic32cz)
|
|
APP_OBJS+=../hal/pic32c.o
|
|
endif
|
|
|
|
CFLAGS+=-I"$(WOLFBOOT_LIB_WOLFSSL)"
|
|
|
|
ifeq ($(TARGET),aurix_tc3xx)
|
|
# Add BSP objects (same as in arch.mk for wolfBoot)
|
|
APP_OBJS += $(TC3_DIR)/src/tc3_clock.o \
|
|
$(TC3_DIR)/src/tc3_flash.o \
|
|
$(TC3_DIR)/src/tc3_gpio.o \
|
|
$(TC3_DIR)/src/tc3_uart.o \
|
|
$(TC3_DIR)/src/tc3.o
|
|
|
|
ifeq ($(AURIX_TC3_HSM),1)
|
|
APP_OBJS += $(TC3_DIR)/src/tc3arm_crt.o \
|
|
$(TC3_DIR)/src/tc3arm.o
|
|
# Use TC3 Arm app linker script
|
|
LSCRIPT_TEMPLATE = tc3arm_app.ld
|
|
else
|
|
APP_OBJS += $(TC3_DIR)/src/tc3tc_isr.o \
|
|
$(TC3_DIR)/src/tc3tc_traps.o \
|
|
$(TC3_DIR)/src/tc3tc.o \
|
|
$(TC3_DIR)/src/tc3tc_crt.o
|
|
# Use TC3 app linker script
|
|
LSCRIPT_TEMPLATE = tc3tc_app.ld
|
|
endif
|
|
|
|
|
|
ifeq ($(WOLFHSM_SERVER),1)
|
|
APP_OBJS += $(WOLFBOOT_LIB_WOLFHSM)/src/wh_transport_mem.o
|
|
APP_OBJS += $(WOLFHSM_INFINEON_TC3XX)/port/server/port_halflash_df1.o
|
|
endif
|
|
endif
|
|
|
|
# Capture final flags for locally built wolfSSL objects.
|
|
WOLFSSL_CFLAGS:=$(CFLAGS)
|
|
|
|
ifeq ($(WOLFHSM_CLIENT),1)
|
|
CFLAGS += -DSTRING_USER -I"$(WOLFBOOT_LIB_WOLFSSL)"
|
|
APP_OBJS += $(WOLFHSM_OBJS)
|
|
APP_OBJS += $(sort $(patsubst $(WOLFBOOT_LIB_WOLFSSL)/%, $(WOLFBOOT_LIB_WOLFSSL)/%, $(WOLFCRYPT_OBJS)))
|
|
endif
|
|
|
|
ifeq ($(WOLFHSM_SERVER),1)
|
|
CFLAGS += -DSTRING_USER -I"$(WOLFBOOT_LIB_WOLFSSL)"
|
|
APP_OBJS += $(WOLFHSM_OBJS)
|
|
APP_OBJS += $(sort $(patsubst $(WOLFBOOT_LIB_WOLFSSL)/%, $(WOLFBOOT_LIB_WOLFSSL)/%, $(WOLFCRYPT_OBJS)))
|
|
endif
|
|
|
|
|
|
standalone:CFLAGS+=-D"TEST_APP_STANDALONE"
|
|
standalone:LDFLAGS:=-T standalone.ld -Wl,-gc-sections -Wl,-Map=image.map
|
|
|
|
delta-extra-data:CFLAGS+=-D"TEST_DELTA_DATA=$(DELTA_DATA_SIZE)" -ffunction-sections -fdata-sections
|
|
delta-extra-data:LDFLAGS=-Wl,-Map=image.map
|
|
|
|
image.bin: image.elf
|
|
@echo "\t[BIN] $@"
|
|
$(Q)$(OBJCOPY) $(OBJCOPY_FLAGS) $(OBJCOPY_IMAGE_FLAGS) -O binary $^ $@
|
|
|
|
image.hex: image.elf
|
|
@echo "\t[HEX] $@"
|
|
$(Q)$(OBJCOPY) $(OBJCOPY_FLAGS) $(OBJCOPY_IMAGE_FLAGS) -O ihex $^ $@
|
|
|
|
image.srec: image.elf
|
|
@echo "\t[SREC] $@"
|
|
$(Q)$(OBJCOPY) $(OBJCOPY_FLAGS) $(OBJCOPY_IMAGE_FLAGS) -O srec $^ $@
|
|
|
|
APP_OBJS := $(patsubst $(WOLFBOOT_LIB_WOLFSSL)/%, \
|
|
$(WOLFSSL_LOCAL_OBJDIR)/%, $(APP_OBJS))
|
|
|
|
ifeq ($(ELF_FLASH_SCATTER),1)
|
|
# When ELF_FLASH_SCATTER=1, preprocess the ELF file with the squashelf tool
|
|
SQUASHELF_TOOL = ../tools/squashelf/squashelf
|
|
image-orig.elf: $(APP_OBJS) $(LSCRIPT)
|
|
@echo "\t[LD] $@"
|
|
$(Q)$(LD) $(LDFLAGS) $(LSCRIPT_FLAGS) $(APP_OBJS) $(LIBS) $(OUTPUT_FLAG) $@
|
|
|
|
image.elf: image-orig.elf
|
|
@echo "\t[SQUASHELF] $@"
|
|
$(Q)$(SQUASHELF_TOOL) -v --nosht $< $@
|
|
else
|
|
# Default behavior when ELF_FLASH_SCATTER is not set
|
|
image.elf: $(APP_OBJS) $(LSCRIPT)
|
|
@echo "\t[LD] $@"
|
|
$(Q)$(LD) $(LDFLAGS) $(LSCRIPT_FLAGS) $(APP_OBJS) $(LIBS) $(OUTPUT_FLAG) $@
|
|
endif
|
|
|
|
standalone: image.bin
|
|
|
|
delta-extra-data: image.bin
|
|
|
|
../test-app/libwolfboot.o: ../src/libwolfboot.c FORCE
|
|
@echo "\t[CC-$(ARCH)] $@"
|
|
$(Q)$(CC) $(CFLAGS) -c $(OUTPUT_FLAG) $@ ../src/libwolfboot.c
|
|
|
|
../hal/$(TARGET).o: ../hal/$(TARGET).c FORCE
|
|
$(Q)$(CC) $(CFLAGS) -c -o $(@) ../hal/$(TARGET).c
|
|
|
|
../hal/$(TARGET)_ns.o: ../hal/$(TARGET).c FORCE
|
|
$(Q)$(CC) $(CFLAGS) -c -o $(@) ../hal/$(TARGET).c -DNONSECURE_APP
|
|
|
|
../hal/spi/spi_drv_$(SPI_TARGET)_ns.o: ../hal/spi/spi_drv_$(SPI_TARGET).c FORCE
|
|
$(Q)$(CC) $(CFLAGS) -c -o $(@) ../hal/spi/spi_drv_$(SPI_TARGET).c -DNONSECURE_APP
|
|
|
|
%.o:%.c
|
|
@echo "\t[CC-$(ARCH)] $@"
|
|
$(Q)$(CC) $(CFLAGS) -c $(OUTPUT_FLAG) $@ $^
|
|
|
|
%.o:%.S
|
|
@echo "\t[AS-$(ARCH)] $@"
|
|
$(Q)$(CC) $(CFLAGS) -c $(OUTPUT_FLAG) $@ $^
|
|
|
|
$(WOLFSSL_LOCAL_OBJDIR)/%.o: %.c
|
|
@echo "\t[CC-$(ARCH)] $@"
|
|
$(Q)mkdir -p $(dir $@)
|
|
$(Q)$(CC) $(WOLFSSL_CFLAGS) -c $(OUTPUT_FLAG) $@ $<
|
|
|
|
$(WOLFSSL_LOCAL_OBJDIR)/%.o: %.S
|
|
@echo "\t[AS-$(ARCH)] $@"
|
|
$(Q)mkdir -p $(dir $@)
|
|
$(Q)$(CC) $(WOLFSSL_CFLAGS) -c $(OUTPUT_FLAG) $@ $<
|
|
|
|
clean:
|
|
$(Q)rm -f *.bin *.elf tags *.o $(LSCRIPT) $(APP_OBJS) wcs/*.o
|
|
$(Q)rm -rf $(WOLFSSL_LOCAL_OBJDIR)
|
|
|
|
$(LSCRIPT): $(LSCRIPT_TEMPLATE) FORCE
|
|
$(Q)printf "%d" $(WOLFBOOT_PARTITION_BOOT_ADDRESS) > .wolfboot-offset
|
|
$(Q)printf "%d" $(WOLFBOOT_PARTITION_SIZE) > .partition-size
|
|
$(Q)printf "%d" $(IMAGE_HEADER_SIZE) > .header-size
|
|
ifeq ($(ELF_FLASH_SCATTER),1)
|
|
# Optionally set the base address for the test-app linker MEMORY{} region if the
|
|
# HAL allows for it to be specified in the config via WOLFBOOT_ELF_EXEC_ADDRESS
|
|
ifdef WOLFBOOT_ELF_EXEC_ADDRESS
|
|
# For ELF scatter mode, use execution space address directly (with no header offset)
|
|
$(Q)printf "%d" $(WOLFBOOT_ELF_EXEC_ADDRESS) > .entry-point
|
|
$(Q)printf "0x%X" `cat .entry-point` > .entry-point
|
|
$(Q)printf "%d" $(WOLFBOOT_ELF_EXEC_SIZE) > .app-size
|
|
$(Q)printf "0x%X" `cat .app-size` > .app-size
|
|
endif
|
|
else
|
|
# Standard mode: boot partition address + header offset
|
|
$(Q)expr `cat .wolfboot-offset` + `cat .header-size` > .entry-point
|
|
$(Q)printf "0x%X" `cat .entry-point` > .entry-point
|
|
$(Q)expr `cat .partition-size` - `cat .header-size` > .app-size
|
|
$(Q)printf "0x%X" `cat .app-size` > .app-size
|
|
endif
|
|
$(Q)cat $(LSCRIPT_TEMPLATE) | \
|
|
sed -e "s/@WOLFBOOT_TEST_APP_SIZE@/`cat .app-size`/g" | \
|
|
sed -e "s/@WOLFBOOT_TEST_APP_ADDRESS@/`cat .entry-point`/g" | \
|
|
sed -e "s/@WOLFBOOT_LOAD_ADDRESS@/$(WOLFBOOT_LOAD_ADDRESS)/g" | \
|
|
sed -e "s/@WOLFBOOT_PARTITION_BOOT_ADDRESS@/$(WOLFBOOT_PARTITION_BOOT_ADDRESS)/g" | \
|
|
sed -e "s/@WOLFBOOT_PARTITION_SIZE@/$(WOLFBOOT_PARTITION_SIZE)/g" | \
|
|
sed -e "s/@WOLFBOOT_PARTITION_UPDATE_ADDRESS@/$(WOLFBOOT_PARTITION_UPDATE_ADDRESS)/g" | \
|
|
sed -e "s/@WOLFBOOT_PARTITION_SWAP_ADDRESS@/$(WOLFBOOT_PARTITION_SWAP_ADDRESS)/g" \
|
|
> $(@)
|
|
$(Q)rm -f .app-size .entry-point .wolfboot-offset .partition-size .header-size
|
|
|
|
|
|
|
|
|
|
FORCE:
|
|
|
|
.PHONY: FORCE clean
|