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})