1# CMake integration for Simplicity SDK
2#
3# Copyright (c) 2017, Christian Taedcke
4# Copyright (c) 2021, Safran Passenger Innovations Germany GmbH
5# Copyright (c) 2022, Antmicro <www.antmicro.com>
6# Copyright (c) 2024, Silicon Laboratories Inc.
7#
8# SPDX-License-Identifier: Apache-2.0
9
10set(EMLIB_DIR      ${ZEPHYR_HAL_SILABS_MODULE_DIR}/simplicity_sdk/platform/emlib)
11set(EMDRV_DIR      ${ZEPHYR_HAL_SILABS_MODULE_DIR}/simplicity_sdk/platform/emdrv)
12set(COMMON_DIR     ${ZEPHYR_HAL_SILABS_MODULE_DIR}/simplicity_sdk/platform/common)
13set(DEVICE_DIR     ${ZEPHYR_HAL_SILABS_MODULE_DIR}/simplicity_sdk/platform/Device)
14set(DRIVER_DIR     ${ZEPHYR_HAL_SILABS_MODULE_DIR}/simplicity_sdk/platform/driver)
15set(RADIO_DIR      ${ZEPHYR_HAL_SILABS_MODULE_DIR}/simplicity_sdk/platform/radio)
16set(SECURITY_DIR   ${ZEPHYR_HAL_SILABS_MODULE_DIR}/simplicity_sdk/platform/security)
17set(SERVICE_DIR    ${ZEPHYR_HAL_SILABS_MODULE_DIR}/simplicity_sdk/platform/service)
18set(PERIPHERAL_DIR ${ZEPHYR_HAL_SILABS_MODULE_DIR}/simplicity_sdk/platform/peripheral)
19set(BLUETOOTH_DIR  ${ZEPHYR_HAL_SILABS_MODULE_DIR}/simplicity_sdk/protocol/bluetooth)
20set(BLOBS_DIR      ${ZEPHYR_HAL_SILABS_MODULE_DIR}/zephyr/blobs/simplicity_sdk)
21
22# Translate the SoC name and part number into the gecko device and cpu name
23# respectively.
24string(TOUPPER ${CONFIG_SOC_SERIES} SILABS_DEVICE_FAMILY)
25
26# Get SoC series number, i.e. translate e.g. efr32bg22 -> 22
27string(SUBSTRING ${CONFIG_SOC_SERIES} 7 2 SILABS_DEVICE_FAMILY_NUMBER)
28
29set(SILABS_DEVICE_PART_NUMBER ${CONFIG_SOC_PART_NUMBER})
30
31function(add_prebuilt_library lib_name prebuilt_path)
32  if(NOT CONFIG_BUILD_ONLY_NO_BLOBS)
33    add_library(${lib_name} STATIC IMPORTED GLOBAL)
34    set_target_properties(${lib_name} PROPERTIES
35      IMPORTED_LOCATION ${BLOBS_DIR}/${prebuilt_path}
36    )
37    zephyr_link_libraries(${lib_name})
38  endif()
39endfunction()
40
41if(CONFIG_SOC_GECKO_HAS_RADIO)
42  zephyr_include_directories_ifdef(CONFIG_SOC_FAMILY_SILABS_S2
43    ${RADIO_DIR}/rail_lib/chip/efr32/efr32xg2x
44  )
45
46  zephyr_compile_definitions(
47    SL_RAIL_UTIL_PA_CONFIG_HEADER="sl_rail_util_pa_config.h"
48  )
49
50  zephyr_include_directories(
51    ${RADIO_DIR}/rail_lib/common
52    ${RADIO_DIR}/rail_lib/plugin/pa-conversions
53    ${BLUETOOTH_DIR}/bgstack/ll/inc
54  )
55
56  # sl_protocol_crypto
57  zephyr_library_sources_ifdef(CONFIG_BT_SILABS_EFR32
58    ${SECURITY_DIR}/sl_component/sl_protocol_crypto/src/sli_radioaes_management.c
59    ${SECURITY_DIR}/sl_component/sl_protocol_crypto/src/sli_protocol_crypto_radioaes.c
60    ${SECURITY_DIR}/sl_component/sli_crypto/src/sl_crypto_s2.c
61  )
62
63  if(CONFIG_BT_SILABS_EFR32)
64    # prebuilt libs
65    add_prebuilt_library(liblinklayer protocol/bluetooth/bgstack/ll/build/gcc/xg${SILABS_DEVICE_FAMILY_NUMBER}/release/liblinklayer.a)
66    add_prebuilt_library(libbgcommon  protocol/bluetooth/bgcommon/lib/build/gcc/cortex-m33/bgcommon/release/libbgcommon.a)
67    zephyr_library_sources(src/sl_btctrl_hci_reset_shim.c)
68
69    # link mbedTLS
70    if(CONFIG_MBEDTLS)
71      zephyr_link_libraries(mbedTLS)
72    endif()
73  endif()
74
75  if(CONFIG_SOC_GECKO_USE_RAIL)
76    # rail
77    zephyr_library_sources(${RADIO_DIR}/rail_lib/plugin/pa-conversions/pa_curves_efr32.c)
78    zephyr_library_sources(${RADIO_DIR}/rail_lib/plugin/pa-conversions/pa_conversions_efr32.c)
79
80    # prebuilt libs
81    add_prebuilt_library(librail platform/radio/rail_lib/autogen/librail_release/librail_efr32xg${SILABS_DEVICE_FAMILY_NUMBER}_gcc_release.a)
82
83    zephyr_include_directories_ifdef(CONFIG_SOC_GECKO_CUSTOM_RADIO_PHY
84      ${RADIO_DIR}/rail_lib/protocol/ble
85      ${RADIO_DIR}/rail_lib/protocol/ieee802154
86      ${RADIO_DIR}/rail_lib/protocol/zwave
87      ${RADIO_DIR}/rail_lib/protocol/sidewalk
88      ${RADIO_DIR}/rail_lib/plugin/rail_util_protocol
89      ${RADIO_DIR}/rail_lib/plugin/rail_util_protocol/config/efr32xg${SILABS_DEVICE_FAMILY_NUMBER}
90    )
91    zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_CUSTOM_RADIO_PHY
92      ${RADIO_DIR}/rail_lib/plugin/rail_util_protocol/sl_rail_util_protocol.c
93    )
94  endif()
95endif()
96
97zephyr_include_directories(
98  config
99  ${DEVICE_DIR}/SiliconLabs/${SILABS_DEVICE_FAMILY}/Include
100  ${COMMON_DIR}/config
101  ${COMMON_DIR}/inc
102  ${DRIVER_DIR}/gpio/inc
103  ${EMDRV_DIR}/common/inc
104  ${EMDRV_DIR}/dmadrv/config/s2_8ch/
105  ${EMDRV_DIR}/dmadrv/inc
106  ${EMDRV_DIR}/dmadrv/inc/s2_signals/
107  ${EMLIB_DIR}/inc
108  ${PERIPHERAL_DIR}/inc
109  ${SERVICE_DIR}/clock_manager/inc
110  ${SERVICE_DIR}/device_init/inc
111  ${SERVICE_DIR}/device_manager/inc
112  ${SERVICE_DIR}/hfxo_manager/config
113  ${SERVICE_DIR}/hfxo_manager/inc
114  ${SERVICE_DIR}/hfxo_manager/src
115  ${SERVICE_DIR}/interrupt_manager/inc
116  ${SERVICE_DIR}/memory_manager/inc
117  ${SERVICE_DIR}/memory_manager/profiler/inc
118  ${SERVICE_DIR}/power_manager/config
119  ${SERVICE_DIR}/power_manager/inc
120  ${SERVICE_DIR}/sleeptimer/config
121  ${SERVICE_DIR}/sleeptimer/inc
122  ${SERVICE_DIR}/sleeptimer/src
123  ${SECURITY_DIR}/sl_component/sl_protocol_crypto/src
124  ${SECURITY_DIR}/sl_component/sli_crypto/inc
125  ${BOARD_DIR}
126)
127
128zephyr_compile_definitions(
129  ${SILABS_DEVICE_PART_NUMBER}
130  SL_CODE_COMPONENT_CLOCK_MANAGER=clock_manager
131  SL_CODE_COMPONENT_DEVICE_PERIPHERAL=peripheral
132  SL_CODE_COMPONENT_HAL_COMMON=hal_common
133  SL_CODE_COMPONENT_SYSTEM=system
134)
135
136zephyr_library_sources(
137  ${DEVICE_DIR}/SiliconLabs/${SILABS_DEVICE_FAMILY}/Source/system_${CONFIG_SOC_SERIES}.c
138  ${EMLIB_DIR}/src/em_system.c
139  ${SERVICE_DIR}/clock_manager/src/sl_clock_manager.c
140  ${SERVICE_DIR}/clock_manager/src/sl_clock_manager_hal_s2.c
141  ${SERVICE_DIR}/clock_manager/src/sl_clock_manager_init.c
142  ${SERVICE_DIR}/clock_manager/src/sl_clock_manager_init_hal_s2.c
143  ${SERVICE_DIR}/device_manager/devices/sl_device_peripheral_hal_efr32xg${SILABS_DEVICE_FAMILY_NUMBER}.c
144  ${SERVICE_DIR}/device_manager/src/sl_device_clock.c
145  ${SERVICE_DIR}/device_manager/src/sl_device_gpio.c
146  ${SERVICE_DIR}/device_manager/src/sl_device_peripheral.c
147  ${SERVICE_DIR}/memory_manager/profiler/src/sli_memory_profiler_stubs.c
148)
149
150if(NOT SILABS_DEVICE_FAMILY_NUMBER EQUAL "21")
151  zephyr_library_sources(
152    ${SERVICE_DIR}/device_manager/clocks/sl_device_clock_efr32xg${SILABS_DEVICE_FAMILY_NUMBER}.c
153  )
154endif()
155
156# Sleeptimer
157if(CONFIG_SOC_SILABS_SLEEPTIMER)
158  zephyr_library_sources(
159    ${PERIPHERAL_DIR}/src/sl_hal_sysrtc.c
160    ${SERVICE_DIR}/sleeptimer/src/sl_sleeptimer_hal_rtcc.c
161    ${SERVICE_DIR}/sleeptimer/src/sl_sleeptimer_hal_sysrtc.c
162    ${SERVICE_DIR}/sleeptimer/src/sl_sleeptimer.c
163  )
164  zephyr_compile_definitions(
165    SL_CATALOG_SLEEPTIMER_PRESENT
166    SL_CODE_COMPONENT_SLEEPTIMER=sleeptimer
167    SL_CODE_COMPONENT_HAL_SYSRTC=hal_sysrtc
168  )
169endif()
170
171zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_IADC         ${EMLIB_DIR}/src/em_iadc.c)
172zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_BURTC        ${EMLIB_DIR}/src/em_burtc.c)
173zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_CMU          ${EMLIB_DIR}/src/em_cmu.c)
174
175# Device Init
176if(CONFIG_SOC_GECKO_DEV_INIT)
177  zephyr_library_sources_ifdef(CONFIG_DT_HAS_SILABS_SERIES2_DCDC_ENABLED
178    ${SERVICE_DIR}/device_init/src/sl_device_init_dcdc_s2.c
179  )
180endif()
181
182# Power Manager
183if(CONFIG_SOC_GECKO_PM_BACKEND_PMGR)
184  zephyr_library_sources(
185    ${SERVICE_DIR}/power_manager/src/common/sl_power_manager_common.c
186    ${SERVICE_DIR}/power_manager/src/common/sl_power_manager_em4.c
187    ${SERVICE_DIR}/power_manager/src/sleep_loop/sl_power_manager.c
188    ${SERVICE_DIR}/power_manager/src/sleep_loop/sl_power_manager_hal_s2.c
189  )
190  zephyr_compile_definitions(
191    SL_CATALOG_POWER_MANAGER_PRESENT
192    SL_CODE_COMPONENT_POWER_MANAGER=power_manager
193  )
194  zephyr_compile_definitions_ifdef(CONFIG_SOC_GECKO_RTCC
195    SL_CATALOG_POWER_MANAGER_DEEPSLEEP_BLOCKING_HFXO_RESTORE_PRESENT
196  )
197endif()
198
199# HFXO Manager
200if(CONFIG_SOC_SILABS_HFXO_MANAGER)
201  zephyr_library_sources(
202    ${SERVICE_DIR}/hfxo_manager/src/sl_hfxo_manager.c
203    ${SERVICE_DIR}/hfxo_manager/src/sl_hfxo_manager_hal_s2.c
204  )
205  zephyr_compile_definitions(
206    SL_CATALOG_HFXO_MANAGER_PRESENT
207  )
208endif()
209
210zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_DEV_INIT     ${COMMON_DIR}/src/sl_slist.c)
211if(CONFIG_SOC_GECKO_CORE)
212  zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_CORE
213    ${EMLIB_DIR}/src/em_core.c
214    ${COMMON_DIR}/src/sl_core_cortexm.c
215  )
216  zephyr_compile_definitions(
217    SL_CODE_COMPONENT_CORE=core
218  )
219endif()
220zephyr_library_sources_ifdef(CONFIG_SOC_SILABS_ACMP        ${EMLIB_DIR}/src/em_acmp.c)
221zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_CRYOTIMER    ${EMLIB_DIR}/src/em_cryotimer.c)
222zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_EMU          ${EMLIB_DIR}/src/em_emu.c)
223if(CONFIG_SOC_GECKO_GPIO)
224  zephyr_library_sources(
225    ${EMLIB_DIR}/src/em_gpio.c
226    ${DRIVER_DIR}/gpio/src/sl_gpio.c
227    ${PERIPHERAL_DIR}/src/sl_hal_gpio.c
228  )
229  zephyr_library_compile_definitions(
230    SL_CATALOG_GPIO_PRESENT
231    SL_CODE_COMPONENT_HAL_GPIO=hal_gpio
232  )
233endif()
234
235zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_LDMA         ${EMDRV_DIR}/dmadrv/src/dmadrv.c)
236
237zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_I2C          ${EMLIB_DIR}/src/em_i2c.c)
238zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_LETIMER      ${EMLIB_DIR}/src/em_letimer.c)
239zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_LEUART       ${EMLIB_DIR}/src/em_leuart.c)
240zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_MSC          ${EMLIB_DIR}/src/em_msc.c)
241zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_LDMA         ${EMLIB_DIR}/src/em_ldma.c)
242zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_PRS          ${EMLIB_DIR}/src/em_prs.c)
243zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_RMU          ${EMLIB_DIR}/src/em_rmu.c)
244zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_RTC          ${EMLIB_DIR}/src/em_rtc.c)
245zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_RTCC         ${EMLIB_DIR}/src/em_rtcc.c)
246zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_EUSART       ${EMLIB_DIR}/src/em_eusart.c)
247zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_TIMER        ${EMLIB_DIR}/src/em_timer.c)
248zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_USART        ${EMLIB_DIR}/src/em_usart.c)
249zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_WDOG         ${EMLIB_DIR}/src/em_wdog.c)
250
251zephyr_include_directories_ifdef(CONFIG_SOC_GECKO_SE
252  ${SECURITY_DIR}/sl_component/se_manager/src
253  ${SECURITY_DIR}/sl_component/se_manager/inc
254  ${SECURITY_DIR}/sl_component/sli_psec_osal/inc
255)
256
257zephyr_library_sources_ifdef(CONFIG_SOC_GECKO_SE
258  ${SECURITY_DIR}/sl_component/se_manager/src/sl_se_manager.c
259  ${SECURITY_DIR}/sl_component/se_manager/src/sl_se_manager_util.c
260  ${SECURITY_DIR}/sl_component/se_manager/src/sli_se_manager_mailbox.c
261)
262
263zephyr_compile_definitions_ifdef(CONFIG_SOC_GECKO_SE
264  SL_CODE_COMPONENT_SE_MANAGER=se_manager
265  SL_CODE_COMPONENT_PSEC_OSAL=psec_osal
266)
267
268zephyr_library_sources_ifdef(CONFIG_ENTROPY_GECKO_SE
269  ${SECURITY_DIR}/sl_component/se_manager/src/sl_se_manager_entropy.c
270)
271
272zephyr_library_sources(
273  src/sl_interrupt_manager_shim.c
274  src/sl_memory_manager_shim.c
275)
276
277zephyr_library_sources_ifdef(
278  CONFIG_BUILD_ONLY_NO_BLOBS
279  src/blob_stubs.c
280)
281
282zephyr_linker_sources(ROM_SECTIONS linker/code_classification_text.ld)
283zephyr_linker_sources(RAMFUNC_SECTION linker/code_classification_ramfunc.ld)
284