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