1#------------------------------------------------------------------------------- 2# Copyright (c) 2020-2022, Arm Limited. All rights reserved. 3# Copyright (c) 2021 STMicroelectronics. All rights reserved. 4# 5# SPDX-License-Identifier: BSD-3-Clause 6# 7#------------------------------------------------------------------------------- 8 9cmake_policy(SET CMP0076 NEW) 10set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}) 11 12#========================= Platform region defs ===============================# 13 14target_include_directories(platform_region_defs 15 INTERFACE 16 partition 17 include 18 ${CMAKE_CURRENT_SOURCE_DIR}/boards 19) 20 21target_compile_definitions(platform_region_defs 22 INTERFACE 23 $<$<OR:$<BOOL:${TFM_NS_REG_TEST}>,$<BOOL:${TFM_S_REG_TEST}>>:FLASH_LAYOUT_FOR_TEST> 24) 25 26#========================= Platform common defs ===============================# 27target_add_scatter_file(tfm_s 28 $<$<AND:$<VERSION_LESS:${TFM_ISOLATION_LEVEL},3>,$<C_COMPILER_ID:ARMClang>>:${CMAKE_SOURCE_DIR}/platform/ext/common/armclang/tfm_common_s.sct> 29 $<$<AND:$<VERSION_LESS:${TFM_ISOLATION_LEVEL},3>,$<C_COMPILER_ID:GNU>>:${CMAKE_SOURCE_DIR}/platform/ext/common/gcc/tfm_common_s.ld> 30 $<$<AND:$<VERSION_LESS:${TFM_ISOLATION_LEVEL},3>,$<C_COMPILER_ID:IAR>>:${CMAKE_SOURCE_DIR}/platform/ext/common/iar/tfm_common_s.icf> 31 $<$<AND:$<VERSION_EQUAL:${TFM_ISOLATION_LEVEL},3>,$<C_COMPILER_ID:ARMClang>>:${CMAKE_BINARY_DIR}/generated/platform/ext/common/armclang/tfm_isolation_l3.sct> 32 $<$<AND:$<VERSION_EQUAL:${TFM_ISOLATION_LEVEL},3>,$<C_COMPILER_ID:GNU>>:${CMAKE_BINARY_DIR}/generated/platform/ext/common/gcc/tfm_isolation_l3.ld> 33 $<$<AND:$<VERSION_EQUAL:${TFM_ISOLATION_LEVEL},3>,$<C_COMPILER_ID:IAR>>:${CMAKE_BINARY_DIR}/generated/platform/ext/common/iar/tfm_isolation_l3.icf> 34) 35 36if(BL2) 37 target_add_scatter_file(bl2 38 $<$<C_COMPILER_ID:GNU>:${STM_COMMON_DIR}/hal/template/gcc/bl2.ld> 39 $<$<C_COMPILER_ID:ARMClang>:${STM_COMMON_DIR}/hal/template/armclang/bl2.sct> 40 $<$<C_COMPILER_ID:IAR>:${STM_COMMON_DIR}/hal/template/iar/bl2.icf> 41 ) 42endif() 43 44#========================= Platform Secure ====================================# 45 46target_include_directories(platform_s 47 PUBLIC 48 ${CMAKE_CURRENT_SOURCE_DIR} 49 ${STM_COMMON_DIR}/hal/Native_Driver 50 ${STM_COMMON_DIR}/hal/CMSIS_Driver 51 ${CMAKE_CURRENT_SOURCE_DIR}/Device/Include 52 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Inc 53 ${MBEDCRYPTO_PATH}/library 54) 55 56target_sources(platform_s 57 PRIVATE 58 ${CMAKE_CURRENT_SOURCE_DIR}/secure/system_stm32l5xx.c 59 ${STM_COMMON_DIR}/hal/Native_Driver/tick.c 60 ${STM_COMMON_DIR}/hal/Native_Driver/mpu_armv8m_drv.c 61 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal.c 62 ${CMAKE_CURRENT_SOURCE_DIR}/secure/low_level_device.c 63 ${STM_COMMON_DIR}/hal/CMSIS_Driver/low_level_flash.c 64 ${STM_COMMON_DIR}/hal/CMSIS_Driver/low_level_com.c 65 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal.c 66 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_cortex.c 67 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_flash.c 68 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_flash_ex.c 69 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_dma.c 70 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_pwr.c 71 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_pwr_ex.c 72 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_gpio.c 73 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_uart.c 74 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_uart_ex.c 75 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_rcc.c 76 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_rcc_ex.c 77 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_gtzc.c 78 $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/secure/tfm_platform_system.c> 79 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_rng.c 80 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_rng_ex.c 81 PUBLIC 82 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_hash.c 83 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_hash_ex.c 84 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_pka.c 85 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_cryp.c 86 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_cryp_ex.c 87 ${STM_COMMON_DIR}/hal/Native_Driver/low_level_rng.c 88) 89 90target_compile_options(platform_s 91 PUBLIC 92 ${COMPILER_CMSE_FLAG} 93) 94 95# GNU ld has some strange behaviour to do with weak functions, and does not deal 96# well with strong functions in static libraries overriding weak functions in 97# object files. For this reason, the file mailbox_ipc_intr is linked directly to 98# the ns binary as an object file. This issue does not affect armclang, but the 99# fix is compatible. 100target_sources(tfm_s 101 PRIVATE 102 ${STM_COMMON_DIR}/hal/Native_Driver/tick.c 103) 104 105#========================= Platform Non-Secure ================================# 106 107# Install linker scripts 108install(FILES 109 ${STM_COMMON_DIR}/hal/template/iar/appli_ns.icf 110 ${STM_COMMON_DIR}/hal/template/gcc/appli_ns.ld 111 ${STM_COMMON_DIR}/hal/template/armclang/appli_ns.sct 112 DESTINATION ${INSTALL_PLATFORM_NS_DIR}/linker_scripts 113) 114 115install(DIRECTORY 116 ${CMAKE_CURRENT_SOURCE_DIR}/Device/Include 117 DESTINATION ${INSTALL_PLATFORM_NS_DIR}/Device 118) 119 120install(FILES 121 ${PLATFORM_DIR}/ext/common/test_interrupt.h 122 ${PLATFORM_DIR}/ext/driver/Driver_USART.h 123 ${PLATFORM_DIR}/ext/driver/Driver_Common.h 124 ${PLATFORM_DIR}/include/tfm_plat_defs.h 125 DESTINATION ${INSTALL_PLATFORM_NS_DIR}/include 126) 127 128install(DIRECTORY 129 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Inc 130 DESTINATION ${INSTALL_PLATFORM_NS_DIR}/hal 131) 132 133install(FILES 134 ${STM_COMMON_DIR}/hal/CMSIS_Driver/low_level_com.c 135 DESTINATION ${INSTALL_PLATFORM_NS_DIR}/CMSIS_Driver 136) 137install(FILES 138 ${CMAKE_CURRENT_SOURCE_DIR}/Device/Source/Templates/system_stm32l5xx.c 139 DESTINATION ${INSTALL_PLATFORM_NS_DIR}/Device/Source/ 140) 141 142install(FILES 143 ${CMAKE_CURRENT_SOURCE_DIR}/boards/cmsis.h 144 ${CMAKE_CURRENT_SOURCE_DIR}/boards/target_cfg.h 145 ${CMAKE_CURRENT_SOURCE_DIR}/boards/tfm_peripherals_def.h 146 DESTINATION ${INSTALL_PLATFORM_NS_DIR}/include 147) 148 149 150install(FILES 151 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal.c 152 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_dma.c 153 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_pwr.c 154 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_pwr_ex.c 155 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_rcc.c 156 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_gpio.c 157 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_uart.c 158 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_uart_ex.c 159 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_cortex.c 160 DESTINATION ${INSTALL_PLATFORM_NS_DIR}/hal/Src 161) 162#========================= Platform BL2 =======================================# 163 164if(BL2) 165 target_include_directories(platform_bl2 166 PUBLIC 167 ${CMAKE_CURRENT_SOURCE_DIR} 168 ${STM_COMMON_DIR}/hal/Native_Driver 169 ${STM_COMMON_DIR}/hal/CMSIS_Driver 170 ${CMAKE_CURRENT_SOURCE_DIR}/Device/Include 171 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Inc 172 ${MCUBOOT_PATH}/boot/bootutil/include 173 $<TARGET_PROPERTY:bl2,BINARY_DIR>/ext/mcuboot 174 ${CMAKE_SOURCE_DIR}/bl2/ext/mcuboot/include 175 ) 176 177 target_sources(platform_bl2 178 PRIVATE 179 ${CMAKE_CURRENT_SOURCE_DIR}/Device/Source/Templates/system_stm32l5xx.c 180 ${CMAKE_CURRENT_SOURCE_DIR}/bl2/boot_hal_bl2.c 181 ${STM_COMMON_DIR}/hal/Native_Driver/mpu_armv8m_drv.c 182 ${CMAKE_CURRENT_SOURCE_DIR}/bl2/tfm_low_level_security.c 183 ${CMAKE_CURRENT_SOURCE_DIR}/bl2/low_level_device.c 184 ${STM_COMMON_DIR}/hal/CMSIS_Driver/low_level_flash.c 185 ${STM_COMMON_DIR}/hal/CMSIS_Driver/low_level_com.c 186 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal.c 187 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_flash.c 188 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_flash_ex.c 189 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_pwr_ex.c 190 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_dma.c 191 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_pwr.c 192 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_rcc.c 193 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_rcc_ex.c 194 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_cortex.c 195 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_gpio.c 196 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_uart.c 197 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_uart_ex.c 198 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_gtzc.c 199 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_hash.c 200 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_hash_ex.c 201 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_pka.c 202 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_cryp.c 203 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_cryp_ex.c 204 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_rng.c 205 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32l5xx_hal_rng_ex.c 206 ${STM_COMMON_DIR}/hal/Native_Driver/low_level_rng.c 207 ) 208 209 target_compile_options(platform_bl2 210 PUBLIC 211 ${COMPILER_CMSE_FLAG} 212 ) 213 214 # GNU ld has some strange behaviour to do with weak functions, and does not deal 215 # well with strong functions in static libraries overriding weak functions in 216 # object files. For this reason, the file mailbox_ipc_intr is linked directly to 217 # the ns binary as an object file. This issue does not affect armclang, but the 218 # fix is compatible. 219 target_sources(bl2 220 PRIVATE 221 ${STM_COMMON_DIR}/hal/Native_Driver/tick.c 222 ) 223endif() 224 225#========================= tfm_spm ============================================# 226 227target_sources(tfm_spm 228 PRIVATE 229 ${CMAKE_CURRENT_SOURCE_DIR}/secure/target_cfg.c 230 ${CMAKE_CURRENT_SOURCE_DIR}/secure/tfm_hal_isolation.c 231 ${CMAKE_CURRENT_SOURCE_DIR}/secure/tfm_hal_platform.c 232) 233 234install(FILES 235 ${STM_COMMON_DIR}/scripts/stm_tool.py 236 ${STM_COMMON_DIR}/scripts/bin2hex.py 237 ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../bl2/ext/mcuboot/scripts/macro_parser.py 238 DESTINATION ${CMAKE_INSTALL_PREFIX}/scripts/ ) 239 240if (${CMAKE_C_COMPILER_ID} STREQUAL GNU) 241 set(PREPROCESSOR_FILE ${STM_COMMON_DIR}/scripts/gcc/preprocess.sh) 242elseif (${CMAKE_C_COMPILER_ID} STREQUAL ARMClang) 243 set(PREPROCESSOR_FILE ${STM_COMMON_DIR}/scripts/armclang/preprocess.sh) 244else() 245 set(PREPROCESSOR_FILE ${STM_COMMON_DIR}/scripts/iar/preprocess.sh) 246endif() 247 248install(FILES ${STM_COMMON_DIR}/scripts/regression.sh 249 ${PREPROCESSOR_FILE} 250 ${STM_COMMON_DIR}/scripts/TFM_UPDATE.sh 251 ${STM_COMMON_DIR}/scripts/TFM_BIN2HEX.sh 252 ${STM_COMMON_DIR}/scripts/postbuild.sh 253 PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ 254 DESTINATION ${CMAKE_INSTALL_PREFIX} ) 255 256if (TFM_S_REG_TEST OR TFM_NS_REG_TEST) 257 #the define FLASH_LAYOUT_FOR_TEST 258 #increase SECURE and NON SECURE IMAGE and modify the content of low_level_device.c from BL2 (low_level_flash.c) 259 set(FLAGS_FOR_BL2_PREPROCESSING 260 "#define FLASH_LAYOUT_FOR_TEST\n" 261 "#define BL2\n" 262 ) 263 add_definitions("-DFLASH_LAYOUT_FOR_TEST") 264else() 265 set(FLAGS_FOR_BL2_PREPROCESSING 266 "#define BL2\n" 267 ) 268endif() 269 270set(CONTENT_FOR_BL2_PREPROCESSING 271 "#include \"flash_layout.h\"\n\n" 272 "enum bl2_image_attributes {\n" 273 "\tRE_IMAGE_FLASH_ADDRESS_SECURE = (FLASH_BASE_ADDRESS+FLASH_AREA_0_OFFSET),\n" 274 "\tRE_IMAGE_FLASH_ADDRESS_NON_SECURE = (FLASH_BASE_ADDRESS+FLASH_AREA_1_OFFSET),\n" 275 "\tRE_BL2_BIN_ADDRESS = (FLASH_BASE_ADDRESS+FLASH_AREA_BL2_BIN_OFFSET),\n" 276 "#if defined(FLASH_BL2_NVCNT_AREA_OFFSET)\n" 277 "\tRE_BL2_NVMCNT_ADDRESS = (FLASH_BASE_ADDRESS+FLASH_BL2_NVCNT_AREA_OFFSET),\n" 278 "#else\n" 279 "\tRE_BL2_NVMCNT_ADDRESS = 0x0,\n" 280 "#endif\n" 281 "#if defined(FLASH_AREA_OTP_OFFSET)\n" 282 "\tRE_BL2_PROVISION_ADDRESS = (FLASH_BASE_ADDRESS+FLASH_AREA_OTP_OFFSET),\n" 283 "#else\n" 284 "\tRE_BL2_PROVISION_ADDRESS = 0x0,\n" 285 "#endif\n" 286 "\tRE_BL2_BOOT_ADDRESS = (FLASH_BASE_ADDRESS+FLASH_AREA_BL2_OFFSET),\n" 287 "\tRE_BL2_WRP_START = (FLASH_AREA_BL2_OFFSET),\n" 288 "\tRE_BL2_WRP_END = (FLASH_AREA_BL2_NOHDP_OFFSET+FLASH_AREA_BL2_NOHDP_SIZE-0x1),\n" 289 "\tRE_BL2_HDP_END = (FLASH_AREA_BL2_NOHDP_OFFSET-0x1),\n" 290 "#if defined(EXTERNAL_FLASH)\n" 291 "\tRE_IMAGE_FLASH_SECURE_UPDATE = (OSPI_FLASH_BASE_ADDRESS+FLASH_AREA_2_OFFSET),\n" 292 "\tRE_IMAGE_FLASH_NON_SECURE_UPDATE = (OSPI_FLASH_BASE_ADDRESS+FLASH_AREA_3_OFFSET),\n" 293 "\tRE_IMAGE_FLASH_UNUSED = (FLASH_BASE_ADDRESS+FLASH_AREA_1_OFFSET+FLASH_AREA_1_SIZE),\n" 294 "#else\n" 295 "\tRE_IMAGE_FLASH_SECURE_UPDATE = (FLASH_BASE_ADDRESS+FLASH_AREA_2_OFFSET),\n" 296 "\tRE_IMAGE_FLASH_NON_SECURE_UPDATE = (FLASH_BASE_ADDRESS+FLASH_AREA_3_OFFSET),\n" 297 "\tRE_IMAGE_FLASH_UNUSED = (FLASH_BASE_ADDRESS+FLASH_AREA_3_OFFSET+FLASH_AREA_3_SIZE),\n" 298 "#endif\n" 299 "\tRE_IMAGE_FLASH_SCRATCH = (FLASH_BASE_ADDRESS+FLASH_AREA_SCRATCH_OFFSET),\n" 300 "#if defined(FLASH_OTP_NV_COUNTERS_AREA_OFFSET)\n" 301 "\tRE_IMAGE_FLASH_NV_COUNTERS = (FLASH_BASE_ADDRESS+FLASH_OTP_NV_COUNTERS_AREA_OFFSET),\n" 302 "#else\n" 303 "\tRE_IMAGE_FLASH_NV_COUNTERS = (FLASH_BASE_ADDRESS+FLASH_NV_COUNTERS_AREA_OFFSET),\n" 304 "#endif\n" 305 "\tRE_IMAGE_FLASH_NV_PS = (FLASH_BASE_ADDRESS+FLASH_PS_AREA_OFFSET),\n" 306 "\tRE_IMAGE_FLASH_NV_ITS = (FLASH_BASE_ADDRESS+FLASH_ITS_AREA_OFFSET),\n" 307) 308if(MCUBOOT_ENC_IMAGES) 309 set(CONTENT_ENCRYPTED 310 "\tRE_IMAGE_ENCRYPTED = 0x01\n}\;" 311 ) 312else() 313 set(CONTENT_ENCRYPTED 314 "\tRE_IMAGE_ENCRYPTED = 0x0\n}\;" 315 ) 316endif() 317 318string(CONCAT BL2_PREPROCESSING ${FLAGS_FOR_BL2_PREPROCESSING} 319 ${CONTENT_FOR_BL2_PREPROCESSING} 320 ${CONTENT_ENCRYPTED}) 321