1#------------------------------------------------------------------------------- 2# SPDX-License-Identifier: BSD-3-Clause 3# SPDX-FileCopyrightText: Copyright The TrustedFirmware-M Contributors 4# 5#------------------------------------------------------------------------------- 6 7# initialize pico-sdk from GIT 8set(PICO_SDK_FETCH_FROM_GIT on) 9set(PICO_PLATFORM rp2350-arm-s) 10set(SKIP_BOOT_STAGE2 1) 11 12# initialize the Raspberry Pi Pico SDK 13include(${CMAKE_CURRENT_LIST_DIR}/pico_sdk_import.cmake) 14pico_sdk_init() 15 16get_target_property(pico_link_options pico_standard_link INTERFACE_LINK_OPTIONS) 17list(FILTER pico_link_options EXCLUDE REGEX "LINKER.*--script") 18list(APPEND pico_link_options "--entry=_entry_point") 19set_target_properties(pico_standard_link PROPERTIES INTERFACE_LINK_OPTIONS "${pico_link_options}") 20set_target_properties(pico_runtime PROPERTIES INTERFACE_LINK_OPTIONS "") 21 22 23cmake_policy(SET CMP0076 NEW) 24 25set(PLATFORM_DIR ${CMAKE_CURRENT_LIST_DIR}) 26set(STATIC_ASSERT_OVERRIDE_HEADER "${PLATFORM_DIR}/static_assert_override.h") 27 28add_library(static_assert_override INTERFACE) 29add_library(device_definition INTERFACE) 30add_library(platform_ns STATIC) 31 32# GNU Arm compiler version greater equal than *11.3.Rel1* 33# throw warning when linker segments used as rwx 34# Adding --no-warn-rwx-segments like the RPi SDK did. 35if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 11.3.1) 36 target_link_options(tfm_ns PRIVATE "LINKER:--no-warn-rwx-segments") 37endif() 38 39target_link_options(tfm_ns PRIVATE "LINKER:--entry=_entry_point") 40 41add_library(platform_ns_init INTERFACE) 42target_sources(platform_ns_init 43 INTERFACE 44 extra_init_ns.c 45) 46 47target_link_libraries(platform_ns_init 48 INTERFACE 49 cmsis_core_headers 50 pico_runtime_init 51 pico_runtime_headers 52 static_assert_override 53 pico_bootrom_headers 54 hardware_clocks 55) 56 57target_compile_definitions(platform_ns_init 58 INTERFACE 59 $<$<BOOL:${TFM_MULTI_CORE_TOPOLOGY}>:TFM_MULTI_CORE_TOPOLOGY> 60) 61 62# Note: This should be Private and in tfm_ns_scatter 63target_compile_definitions(platform_region_defs 64 INTERFACE 65 # u modifier in scatter file is not valid 66 NO_U_MODIFIER=1 67) 68#========================= Platform region defs ===============================# 69 70target_include_directories(platform_region_defs 71 INTERFACE 72 partition 73 ${CMAKE_CURRENT_SOURCE_DIR} 74 ${PLATFORM_DIR}/include 75 ${PLATFORM_DIR}/device/config 76) 77 78target_link_libraries(platform_region_defs 79 INTERFACE 80 hardware_regs_headers 81 static_assert_override 82) 83 84target_compile_options(static_assert_override 85 INTERFACE 86 "$<$<C_COMPILER_ID:Armclang>:SHELL:-include ${STATIC_ASSERT_OVERRIDE_HEADER}>" 87 "$<$<C_COMPILER_ID:GNU>:SHELL:-include ${STATIC_ASSERT_OVERRIDE_HEADER}>" 88 "$<$<C_COMPILER_ID:IAR>:SHELL:--preinclude ${STATIC_ASSERT_OVERRIDE_HEADER}>" 89) 90 91#========================= Device definition lib ===============================# 92 93target_include_directories(device_definition 94 INTERFACE 95 . 96 device/include 97 native_drivers 98 partition 99 libraries 100 native_drivers 101 ${PLATFORM_DIR}/ext/target/arm/drivers/flash/common 102 ${PLATFORM_DIR}/ext/target/arm/drivers/usart/cmsdk 103 ${PLATFORM_DIR}/ext/target/arm/drivers/usart/common 104 ${PLATFORM_DIR}/ext/target/arm/drivers/mpc_sie 105 ${PLATFORM_DIR}/ext/target/arm/drivers/mpu/armv8m 106 ${PLATFORM_DIR}/ext/target/arm/drivers/counter/armv8m 107 ${PLATFORM_DIR}/ext/target/arm/drivers/timer/armv8m 108 ${ETHOS_DRIVER_PATH}/src 109 ${ETHOS_DRIVER_PATH}/include 110 ${CMAKE_CURRENT_SOURCE_DIR}/device/config 111) 112 113#========================= Platform Non-Secure ================================# 114 115target_sources(platform_ns 116 PRIVATE 117 $<$<BOOL:${TFM_NS_MAILBOX_API}>:platform_ns_mailbox.c> 118 cmsis_drivers/Driver_USART_RPI.c 119 ${PLATFORM_DIR}/ext/target/arm/drivers/usart/cmsdk/uart_cmsdk_drv.c 120) 121 122target_include_directories(platform_ns 123 PUBLIC 124 cmsis_drivers 125 ${PLATFORM_DIR}/ext/cmsis/Include 126 ${PLATFORM_DIR}/ext/cmsis/Include/m-profile 127 ${PLATFORM_DIR}/include 128 ${PLATFORM_DIR}/ext/common 129 ${PLATFORM_DIR}/ext/driver 130) 131 132target_link_libraries(platform_ns 133 PUBLIC 134 cmsis_core_headers 135 platform_ns_init 136 PRIVATE 137 device_definition 138 pico_crt0 139 $<$<BOOL:${TFM_MULTI_CORE_TOPOLOGY}>:pico_multicore> 140 hardware_regs 141 hardware_flash 142 hardware_uart 143 cmsis_core 144) 145 146target_compile_definitions(platform_ns 147 PUBLIC 148 PICO_UART_DEFAULT_CRLF=1 149 CMSIS_device_header=<RP2350.h> 150 PICO_DEFAULT_TIMER=1 151 $<$<BOOL:${TFM_MULTI_CORE_TOPOLOGY}>:TFM_MULTI_CORE_TOPOLOGY> 152) 153 154if (TFM_NS_CUSTOM_API) 155 target_sources(tfm_api_ns PRIVATE 156 ${INTERFACE_SRC_DIR}/os_wrapper/tfm_ns_interface_rtos.c 157 ) 158 159 add_library(tfm_api_ns_custom INTERFACE) 160 161 target_sources(tfm_api_ns_custom 162 INTERFACE 163 tfm_custom_psa_ns_api.c 164 ) 165 166 target_link_libraries(tfm_api_ns_custom 167 INTERFACE 168 ${INTERFACE_SRC_DIR}/../lib/s_veneers.o 169 ) 170 171 target_link_libraries(tfm_api_ns 172 PRIVATE 173 tfm_api_ns_custom 174 os_wrapper 175 ) 176 177 # lib parth 178 set(APP_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../../../lib) 179 180 target_sources(RTX_OS 181 INTERFACE 182 # Provide TZ context management stub to RTOS if protected by Trustzone 183 ${APP_LIB_DIR}/nsid_manager/tz_shim_layer.c 184 ) 185endif() 186