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