diff --git a/firmware/libsi/CMakeLists.txt b/firmware/libsi/CMakeLists.txt index 3b4d74e..aef2a7d 100644 --- a/firmware/libsi/CMakeLists.txt +++ b/firmware/libsi/CMakeLists.txt @@ -5,57 +5,38 @@ cmake_minimum_required(VERSION "3.21") project(si LANGUAGES C) # Define the library -add_library(si STATIC "src/crc8.c" "src/device/commands.c" "src/device/gc_controller.c") - -# Configure SI peripheral selection -if(DEFINED SI_RX_TIMER_IDX) - target_compile_definitions(si PUBLIC SI_RX_TIMER_IDX=${SI_RX_TIMER_IDX}) -endif() - -if(DEFINED SI_TX_USART_IDX) - target_compile_definitions(si PUBLIC SI_TX_USART_IDX=${SI_TX_USART_IDX}) -endif() +add_library(si STATIC src/crc8.c src/device/commands.c src/device/gc_controller.c) # Specify the include paths target_include_directories(si PUBLIC include) # EFR32 platform specific settings if(CMAKE_CROSSCOMPILING) - if(DEFINED ZEPHYR_BASE) - # Building for EFR32 using Zephyr - # Note: rail_config.h and rail_config.c are not automatically generated by Zephyr, - # so we expect them to be already present in the src/autogen directory. - if(NOT CONFIG_SOC_FAMILY_SILABS_S2) - message(FATAL_ERROR "Only EFR32 Series 2 SoCs are currently supported.") - endif() - - # Pull in the Zephyr interface library - target_link_libraries(si PUBLIC zephyr_interface) - - # Pull in additional EMLIB sources required for libsi - zephyr_library_sources( - ${ZEPHYR_HAL_SILABS_MODULE_DIR}/simplicity_sdk/platform/emlib/src/em_timer.c - ${ZEPHYR_HAL_SILABS_MODULE_DIR}/simplicity_sdk/platform/emlib/src/em_ldma.c - ${ZEPHYR_HAL_SILABS_MODULE_DIR}/simplicity_sdk/platform/emdrv/dmadrv/src/dmadrv.c + # Building for EFR32 using gecko-sdk-cmake + if(NOT GeckoSDK_FOUND) + include(FetchContent) + FetchContent_Declare( + GeckoSDK + GIT_REPOSITORY https://github.com/loopj/gecko-sdk-cmake.git + GIT_TAG main ) - else() - # Building for EFR32 using gecko-sdk-cmake - if(NOT GeckoSDK_FOUND) - include(FetchContent) - FetchContent_Declare( - GeckoSDK - GIT_REPOSITORY https://github.com/loopj/gecko-sdk-cmake.git - GIT_TAG main - ) - FetchContent_MakeAvailable(GeckoSDK) - endif() + FetchContent_MakeAvailable(GeckoSDK) + endif() - # Depend on emlib from the Gecko SDK - target_link_libraries(si GeckoSDK::emlib GeckoSDK::emdrv::dmadrv) + # Configure SI peripheral selection + if(DEFINED SI_RX_TIMER_IDX) + target_compile_definitions(si PUBLIC SI_RX_TIMER_IDX=${SI_RX_TIMER_IDX}) + endif() + + if(DEFINED SI_TX_USART_IDX) + target_compile_definitions(si PUBLIC SI_TX_USART_IDX=${SI_TX_USART_IDX}) endif() # Add the platform-specific source files target_sources(si PRIVATE "src/platform/efr32/si_efr32_emlib.c") + + # Depend on emlib from the Gecko SDK + target_link_libraries(si GeckoSDK::emlib GeckoSDK::emdrv::dmadrv) endif() # Add the test target diff --git a/firmware/libsi/zephyr/CMakeLists.txt b/firmware/libsi/zephyr/CMakeLists.txt new file mode 100644 index 0000000..4c2a89f --- /dev/null +++ b/firmware/libsi/zephyr/CMakeLists.txt @@ -0,0 +1,35 @@ +# Define the library +zephyr_library_named(si) + +# Set the library path +set(LIBSI_DIR ${CMAKE_CURRENT_LIST_DIR}/..) + +# Add the common source files +zephyr_library_sources( + ${LIBSI_DIR}/src/crc8.c + ${LIBSI_DIR}/src/device/commands.c + ${LIBSI_DIR}/src/device/gc_controller.c +) + +# Specify the include paths +zephyr_include_directories(${LIBSI_DIR}/include) + +# Link against Zephyr +target_link_libraries(si PUBLIC zephyr_interface) + +# EFR32-specific settings +if(DEFINED SI_RX_TIMER_IDX) + target_compile_definitions(si PUBLIC SI_RX_TIMER_IDX=${SI_RX_TIMER_IDX}) +endif() + +if(DEFINED SI_TX_USART_IDX) + target_compile_definitions(si PUBLIC SI_TX_USART_IDX=${SI_TX_USART_IDX}) +endif() + +zephyr_library_sources(${LIBSI_DIR}/src/platform/efr32/si_efr32_emlib.c) + +zephyr_library_sources( + ${ZEPHYR_HAL_SILABS_MODULE_DIR}/simplicity_sdk/platform/emlib/src/em_timer.c + ${ZEPHYR_HAL_SILABS_MODULE_DIR}/simplicity_sdk/platform/emlib/src/em_ldma.c + ${ZEPHYR_HAL_SILABS_MODULE_DIR}/simplicity_sdk/platform/emdrv/dmadrv/src/dmadrv.c +) diff --git a/firmware/libsi/zephyr/module.yml b/firmware/libsi/zephyr/module.yml new file mode 100644 index 0000000..5decd2b --- /dev/null +++ b/firmware/libsi/zephyr/module.yml @@ -0,0 +1,3 @@ +name: libsi +build: + cmake: zephyr diff --git a/firmware/libwavebird/CMakeLists.txt b/firmware/libwavebird/CMakeLists.txt index 1975d79..9de18e9 100644 --- a/firmware/libwavebird/CMakeLists.txt +++ b/firmware/libwavebird/CMakeLists.txt @@ -12,41 +12,25 @@ target_include_directories(wavebird PRIVATE src/autogen PUBLIC include) # EFR32 platform specific settings if(CMAKE_CROSSCOMPILING) - if(DEFINED ZEPHYR_BASE) - # Building for EFR32 using Zephyr - # Note: rail_config.h and rail_config.c are not automatically generated by Zephyr, - # so we expect them to be already present in the src/autogen directory. - if(NOT CONFIG_SOC_FAMILY_SILABS_S2) - message(FATAL_ERROR "Only EFR32 Series 2 SoCs are currently supported.") - endif() - - if(NOT CONFIG_SOC_GECKO_USE_RAIL) - message(FATAL_ERROR "Custom radio PHY is required for EFR32 platforms, set CONFIG_SOC_GECKO_CUSTOM_RADIO_PHY in prj.conf.") - endif() - - # Pull in the Zephyr interface library - target_link_libraries(wavebird PUBLIC zephyr_interface) - else() - # Building for EFR32 using gecko-sdk-cmake - if(NOT GeckoSDK_FOUND) - include(FetchContent) - FetchContent_Declare( - GeckoSDK - GIT_REPOSITORY https://github.com/loopj/gecko-sdk-cmake.git - GIT_TAG main - ) - FetchContent_MakeAvailable(GeckoSDK) - endif() - - # Configure automatic generation of rail_config.c and rail_config.h files - set_rail_config_paths("config/rail/radio_settings_${GECKO_SDK_RAIL_LIB_NAME}.radioconf" "src/autogen") - - # Depend on emlib and rail_lib from the Gecko SDK - target_link_libraries(wavebird GeckoSDK::emlib GeckoSDK::rail_lib) + # Building for EFR32 using gecko-sdk-cmake + if(NOT GeckoSDK_FOUND) + include(FetchContent) + FetchContent_Declare( + GeckoSDK + GIT_REPOSITORY https://github.com/loopj/gecko-sdk-cmake.git + GIT_TAG main + ) + FetchContent_MakeAvailable(GeckoSDK) endif() + # Configure automatic generation of rail_config.c and rail_config.h files + set_rail_config_paths("config/rail/radio_settings_${GECKO_SDK_RAIL_LIB_NAME}.radioconf" "src/autogen") + # Add platform-specific source files target_sources(wavebird PRIVATE "src/platform/efr32/radio_efr32.c" "src/autogen/rail_config.c") + + # Depend on emlib and rail_lib from the Gecko SDK + target_link_libraries(wavebird GeckoSDK::emlib GeckoSDK::rail_lib) endif() # Add the test target diff --git a/firmware/libwavebird/zephyr/CMakeLists.txt b/firmware/libwavebird/zephyr/CMakeLists.txt new file mode 100644 index 0000000..e28d56e --- /dev/null +++ b/firmware/libwavebird/zephyr/CMakeLists.txt @@ -0,0 +1,25 @@ +# Define the library +zephyr_library_named(wavebird) + +# Set the library path +set(LIBWAVEBIRD_DIR ${CMAKE_CURRENT_LIST_DIR}/..) + +# Add the source files +zephyr_library_sources( + ${LIBWAVEBIRD_DIR}/src/bch3121.c + ${LIBWAVEBIRD_DIR}/src/packet.c +) + +# Specify the include paths +zephyr_include_directories(${LIBWAVEBIRD_DIR}/include) + +# Link against Zephyr +target_link_libraries(wavebird PUBLIC zephyr_interface) + +# EFR32-specific settings +zephyr_library_sources( + ${LIBWAVEBIRD_DIR}/src/autogen/rail_config.c + ${LIBWAVEBIRD_DIR}/src/platform/efr32/radio_efr32.c +) + +zephyr_include_directories(${LIBWAVEBIRD_DIR}/src/autogen) diff --git a/firmware/libwavebird/zephyr/module.yml b/firmware/libwavebird/zephyr/module.yml new file mode 100644 index 0000000..71098ac --- /dev/null +++ b/firmware/libwavebird/zephyr/module.yml @@ -0,0 +1,3 @@ +name: libwavebird +build: + cmake: zephyr