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 include 17 ${CMAKE_CURRENT_SOURCE_DIR}/boards 18) 19 20target_compile_definitions(platform_region_defs 21 INTERFACE 22 $<$<OR:$<BOOL:${TEST_NS}>,$<BOOL:${TEST_S}>>:FLASH_LAYOUT_FOR_TEST> 23) 24 25#========================= Platform common defs ===============================# 26target_add_scatter_file(tfm_s 27 $<$<AND:$<VERSION_LESS:${TFM_ISOLATION_LEVEL},3>,$<C_COMPILER_ID:ARMClang>>:${CMAKE_CURRENT_SOURCE_DIR}/Device/Source/armclang/tfm_common_s.sct> 28 $<$<AND:$<VERSION_LESS:${TFM_ISOLATION_LEVEL},3>,$<C_COMPILER_ID:GNU>>:${CMAKE_CURRENT_SOURCE_DIR}/Device/Source/gcc/tfm_common_s.ld> 29 $<$<AND:$<VERSION_LESS:${TFM_ISOLATION_LEVEL},3>,$<C_COMPILER_ID:IAR>>:${CMAKE_CURRENT_SOURCE_DIR}/Device/Source/iar/tfm_common_s.icf> 30 $<$<AND:$<VERSION_EQUAL:${TFM_ISOLATION_LEVEL},3>,$<C_COMPILER_ID:ARMClang>>:${CMAKE_BINARY_DIR}/generated/platform/ext/common/armclang/tfm_isolation_l3.sct> 31 $<$<AND:$<VERSION_EQUAL:${TFM_ISOLATION_LEVEL},3>,$<C_COMPILER_ID:GNU>>:${CMAKE_BINARY_DIR}/generated/platform/ext/common/gcc/tfm_isolation_l3.ld> 32 $<$<AND:$<VERSION_EQUAL:${TFM_ISOLATION_LEVEL},3>,$<C_COMPILER_ID:IAR>>:${CMAKE_BINARY_DIR}/generated/platform/ext/common/iar/tfm_isolation_l3.icf> 33) 34 35if(BL2) 36 target_add_scatter_file(bl2 37 $<$<C_COMPILER_ID:GNU>:${STM_COMMON_DIR}/hal/template/gcc/bl2.ld> 38 $<$<C_COMPILER_ID:ARMClang>:${STM_COMMON_DIR}/hal/template/armclang/bl2.sct> 39 $<$<C_COMPILER_ID:IAR>:${STM_COMMON_DIR}/hal/template/iar/bl2.icf> 40 ) 41endif() 42 43#========================= Platform Secure ====================================# 44 45target_include_directories(platform_s 46 PUBLIC 47 ${CMAKE_CURRENT_SOURCE_DIR} 48 ${STM_COMMON_DIR}/hal/Native_Driver 49 ${STM_COMMON_DIR}/hal/CMSIS_Driver 50 ${CMAKE_CURRENT_SOURCE_DIR}/Device/Include 51 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Inc 52 ${CMAKE_CURRENT_SOURCE_DIR}/secure 53 ${MBEDCRYPTO_PATH}/library 54 ${CMAKE_SOURCE_DIR}/include 55) 56 57target_sources(platform_s 58 PRIVATE 59 ${CMAKE_CURRENT_SOURCE_DIR}/secure/system_stm32h5xx.c 60 ${STM_COMMON_DIR}/hal/Native_Driver/mpu_armv8m_drv.c 61 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_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/stm32h5xx_hal.c 66 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_flash.c 67 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_flash_ex.c 68 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_dma.c 69 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_dma_ex.c 70 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_pwr.c 71 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_pwr_ex.c 72 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_gpio.c 73 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_uart.c 74 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_uart_ex.c 75 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_rcc.c 76 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_rcc_ex.c 77 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_gtzc.c 78 ${CMAKE_SOURCE_DIR}/platform/ext/common/tfm_hal_nvic.c 79 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_cortex.c 80 $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/secure/tfm_platform_system.c> 81 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_rng.c 82 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_rng_ex.c 83 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_rtc.c 84 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_rtc_ex.c 85 PUBLIC 86 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_hash.c 87 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_pka.c 88 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_cryp.c 89 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_cryp_ex.c 90 ${STM_COMMON_DIR}/hal/Native_Driver/low_level_rng.c 91) 92 93target_compile_options(platform_s 94 PUBLIC 95 ${COMPILER_CMSE_FLAG} 96) 97 98# GNU ld and IAR does not deal well with strong functions in static libraries 99# overriding weak functions in object files. For this reason, files with strong 100# functions are linked as an object file. This issue does not affect armclang, 101# but the fix is compatible. 102target_sources(tfm_s 103 PRIVATE 104 ${STM_COMMON_DIR}/hal/Native_Driver/tick.c 105) 106 107#========================= Platform BL2 =======================================# 108 109if(BL2) 110 target_include_directories(platform_bl2 111 PUBLIC 112 ${CMAKE_CURRENT_SOURCE_DIR} 113 ${STM_COMMON_DIR}/hal/Native_Driver 114 ${STM_COMMON_DIR}/hal/CMSIS_Driver 115 ${CMAKE_CURRENT_SOURCE_DIR}/Device/Include 116 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Inc 117 ${MCUBOOT_PATH}/boot/bootutil/include 118 $<TARGET_PROPERTY:bl2,BINARY_DIR>/ext/mcuboot 119 ${CMAKE_SOURCE_DIR}/bl2/ext/mcuboot/include 120 ${CMAKE_CURRENT_SOURCE_DIR}/bl2 121 ${CMAKE_SOURCE_DIR}/interface/include 122 ) 123 124 target_sources(platform_bl2 125 PRIVATE 126 ${CMAKE_CURRENT_SOURCE_DIR}/Device/Source/Templates/system_stm32h5xx.c 127 ${CMAKE_CURRENT_SOURCE_DIR}/bl2/boot_hal_bl2.c 128 ${STM_COMMON_DIR}/hal/Native_Driver/mpu_armv8m_drv.c 129 ${CMAKE_CURRENT_SOURCE_DIR}/bl2/low_level_security.c 130 ${CMAKE_CURRENT_SOURCE_DIR}/bl2/low_level_device.c 131 ${STM_COMMON_DIR}/hal/CMSIS_Driver/low_level_flash.c 132 ${STM_COMMON_DIR}/hal/CMSIS_Driver/low_level_com.c 133 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal.c 134 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_flash.c 135 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_flash_ex.c 136 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_pwr_ex.c 137 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_dma.c 138 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_dma_ex.c 139 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_pwr.c 140 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_rcc.c 141 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_rcc_ex.c 142 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_cortex.c 143 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_gpio.c 144 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_uart.c 145 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_uart_ex.c 146 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_gtzc.c 147 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_hash.c 148 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_pka.c 149 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_cryp.c 150 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_cryp_ex.c 151 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_rng.c 152 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_rng_ex.c 153 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_rtc.c 154 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_rtc_ex.c 155 ${CMAKE_CURRENT_SOURCE_DIR}/hal/Src/stm32h5xx_hal_icache.c 156 ${STM_COMMON_DIR}/hal/Native_Driver/low_level_rng.c 157 ${STM_COMMON_DIR}/hal/provision/otp_provision.c 158 ${STM_COMMON_DIR}/hal/provision/nvm_init.c 159 ${STM_COMMON_DIR}/hal/provision/nvmcnt_init.c 160 ) 161 162 target_compile_options(platform_bl2 163 PUBLIC 164 ${COMPILER_CMSE_FLAG} 165 ) 166 167 # GNU ld and IAR does not deal well with strong functions in static libraries 168 # overriding weak functions in object files. For this reason, files with strong 169 # functions are linked as an object file. This issue does not affect armclang, 170 # but the fix is compatible. 171 target_sources(bl2 172 PRIVATE 173 ${STM_COMMON_DIR}/hal/Native_Driver/tick.c 174 ${CMAKE_CURRENT_SOURCE_DIR}/bl2/stm32h5xx_hal_msp.c 175 ) 176 177 # Required because Mbed TLS PSA crypto headers require the configuration to be 178 # available when including the header itself 179 target_link_libraries(platform_bl2 180 PUBLIC 181 bl2_mbedcrypto_config 182 ) 183 184endif() 185 186#========================= tfm_spm ============================================# 187 188target_sources(tfm_spm 189 PRIVATE 190 ${CMAKE_CURRENT_SOURCE_DIR}/secure/target_cfg.c 191 ${CMAKE_CURRENT_SOURCE_DIR}/secure/tfm_hal_isolation.c 192 ${CMAKE_CURRENT_SOURCE_DIR}/secure/tfm_hal_platform.c 193) 194install(FILES 195 ${STM_COMMON_DIR}/scripts/stm_tool.py 196 ${STM_COMMON_DIR}/scripts/bin2hex.py 197 ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../bl2/ext/mcuboot/scripts/macro_parser.py 198 DESTINATION ${CMAKE_INSTALL_PREFIX}/scripts ) 199 200if (${CMAKE_C_COMPILER_ID} STREQUAL GNU) 201 set(PREPROCESSOR_FILE ${STM_COMMON_DIR}/scripts/gcc/preprocess.sh) 202elseif (${CMAKE_C_COMPILER_ID} STREQUAL ARMClang) 203 set(PREPROCESSOR_FILE ${STM_COMMON_DIR}/scripts/armclang/preprocess.sh) 204else() 205 set(PREPROCESSOR_FILE ${STM_COMMON_DIR}/scripts/iar/preprocess.sh) 206endif() 207 208install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../platform/ext/target/stm/stm32h573i_dk/regression.sh 209 ${PREPROCESSOR_FILE} 210 ${STM_COMMON_DIR}/scripts/TFM_UPDATE.sh 211 ${STM_COMMON_DIR}/scripts/TFM_BIN2HEX.sh 212 ${STM_COMMON_DIR}/scripts/postbuild.sh 213 PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ 214 DESTINATION ${CMAKE_INSTALL_PREFIX} ) 215 216install(FILES ${CMAKE_CURRENT_LIST_DIR}/Device/Source/startup_stm32h5xx_ns.c 217 ${CMAKE_CURRENT_LIST_DIR}/Device/Source/Templates/system_stm32h5xx.c 218 DESTINATION ${INSTALL_PLATFORM_NS_DIR}/Device/Source) 219 220install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/hal/Inc 221 ${CMAKE_CURRENT_LIST_DIR}/hal/Src 222 ${STM_COMMON_DIR}/hal/CMSIS_Driver 223 DESTINATION ${INSTALL_PLATFORM_NS_DIR}/hal) 224 225install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/Device/Include 226 DESTINATION ${INSTALL_PLATFORM_NS_DIR}/Device) 227 228install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/boards 229 DESTINATION ${INSTALL_PLATFORM_NS_DIR}) 230 231install(FILES ${STM_COMMON_DIR}/hal/template/gcc/appli_ns.ld 232 ${STM_COMMON_DIR}/hal/template/armclang/appli_ns.sct 233 ${STM_COMMON_DIR}/hal/template/iar/appli_ns.icf 234 DESTINATION ${INSTALL_PLATFORM_NS_DIR}/linker_scripts) 235 236if (TFM_S_REG_TEST OR TFM_NS_REG_TEST) 237 #the define FLASH_LAYOUT_FOR_TEST 238 #increase SECURE and NON SECURE IMAGE and modify the content of low_level_device.c from BL2 (low_level_flash.c) 239 set(FLAGS_FOR_BL2_PREPROCESSING 240 "#define FLASH_LAYOUT_FOR_TEST\n" 241 "#define BL2\n" 242 "#define MCUBOOT_IMAGE_NUMBER 2\n" 243 "#define MCUBOOT_OVERWRITE_ONLY\n" 244 ) 245 add_definitions("-DFLASH_LAYOUT_FOR_TEST") 246else() 247 set(FLAGS_FOR_BL2_PREPROCESSING 248 "#define BL2\n" 249 "#define MCUBOOT_IMAGE_NUMBER 2\n" 250 "#define MCUBOOT_OVERWRITE_ONLY\n" 251 ) 252endif() 253 254set(CONTENT_FOR_BL2_PREPROCESSING 255 "#include \"flash_layout.h\"\n\n" 256 "enum bl2_image_attributes {\n" 257 "\tRE_IMAGE_FLASH_ADDRESS_SECURE = (FLASH_BASE_ADDRESS+FLASH_AREA_0_OFFSET),\n" 258 "\tRE_IMAGE_FLASH_ADDRESS_NON_SECURE = (FLASH_BASE_ADDRESS+FLASH_AREA_1_OFFSET),\n" 259 "\tRE_BL2_BIN_ADDRESS = (FLASH_BASE_ADDRESS+FLASH_AREA_BL2_BIN_OFFSET),\n" 260 "#if defined(FLASH_BL2_NVCNT_AREA_OFFSET)\n" 261 "\tRE_BL2_NVMCNT_ADDRESS = (FLASH_BASE_ADDRESS+FLASH_BL2_NVCNT_AREA_OFFSET),\n" 262 "#else\n" 263 "\tRE_BL2_NVMCNT_ADDRESS = 0x0,\n" 264 "#endif\n" 265 "#if defined(FLASH_AREA_OTP_OFFSET)\n" 266 "\tRE_BL2_PROVISION_ADDRESS = (FLASH_BASE_ADDRESS+FLASH_AREA_OTP_OFFSET),\n" 267 "#else\n" 268 "\tRE_BL2_PROVISION_ADDRESS = 0x0,\n" 269 "#endif\n" 270 "\tRE_BL2_BOOT_ADDRESS = (FLASH_BASE_ADDRESS+FLASH_AREA_BL2_OFFSET),\n" 271 "\tRE_BL2_WRP_START = (FLASH_AREA_BL2_OFFSET),\n" 272 "\tRE_BL2_WRP_END = (FLASH_AREA_BL2_NOHDP_OFFSET+FLASH_AREA_BL2_NOHDP_SIZE-0x1),\n" 273 "\tRE_BL2_HDP_END = (FLASH_AREA_BL2_NOHDP_OFFSET-0x1),\n" 274 "\tRE_IMAGE_FLASH_SECURE_UPDATE = (FLASH_BASE_ADDRESS+FLASH_AREA_2_OFFSET),\n" 275 "\tRE_IMAGE_FLASH_NON_SECURE_UPDATE = (FLASH_BASE_ADDRESS+FLASH_AREA_3_OFFSET),\n" 276 "\tRE_IMAGE_FLASH_UNUSED = (FLASH_BASE_ADDRESS+FLASH_AREA_3_OFFSET+FLASH_AREA_3_SIZE),\n" 277 "\tRE_IMAGE_FLASH_SCRATCH = (FLASH_BASE_ADDRESS+FLASH_AREA_SCRATCH_OFFSET),\n" 278 "#if defined(FLASH_OTP_NV_COUNTERS_AREA_OFFSET)\n" 279 "\tRE_IMAGE_FLASH_NV_COUNTERS = (FLASH_BASE_ADDRESS+FLASH_OTP_NV_COUNTERS_AREA_OFFSET),\n" 280 "#else\n" 281 "\tRE_IMAGE_FLASH_NV_COUNTERS = (FLASH_BASE_ADDRESS+FLASH_NV_COUNTERS_AREA_OFFSET),\n" 282 "#endif\n" 283 "\tRE_IMAGE_FLASH_NV_PS = (FLASH_BASE_ADDRESS+FLASH_PS_AREA_OFFSET),\n" 284 "\tRE_IMAGE_FLASH_NV_ITS = (FLASH_BASE_ADDRESS+FLASH_ITS_AREA_OFFSET),\n" 285) 286if(MCUBOOT_ENC_IMAGES) 287 set(CONTENT_ENCRYPTED 288 "\tRE_IMAGE_ENCRYPTED = 0x01\n}\;" 289 ) 290else() 291 set(CONTENT_ENCRYPTED 292 "\tRE_IMAGE_ENCRYPTED = 0x0\n}\;" 293 ) 294endif() 295 296string(CONCAT BL2_PREPROCESSING ${FLAGS_FOR_BL2_PREPROCESSING} 297 ${CONTENT_FOR_BL2_PREPROCESSING} 298 ${CONTENT_ENCRYPTED})