| # SPDX-License-Identifier: Apache-2.0 |
| |
| include(ExternalProject) |
| |
| if(CONFIG_HAS_RPI_PICO) |
| zephyr_library() |
| |
| set(rp2_common_dir ${ZEPHYR_HAL_RPI_PICO_MODULE_DIR}/src/rp2_common) |
| set(rp2040_dir ${ZEPHYR_HAL_RPI_PICO_MODULE_DIR}/src/rp2040) |
| set(common_dir ${ZEPHYR_HAL_RPI_PICO_MODULE_DIR}/src/common) |
| set(boot_stage_dir ${rp2_common_dir}/boot_stage2) |
| |
| # The Second Stage Bootloader is only linked to the app that resides |
| # at 0x100. Therefore, only if the app's offset is 0x100, the second |
| # stage bootloader should be compiled. |
| if(CONFIG_RP2_REQUIRES_SECOND_STAGE_BOOT) |
| foreach(flash W25Q080 GENERIC_03H IS25LP080 W25X10CL AT25SF128A) |
| if(CONFIG_RP2_FLASH_${flash}) |
| set(flash_type ${flash}) |
| break() |
| endif() |
| endforeach() |
| |
| set(rp2_bootloader_prefix ${CMAKE_BINARY_DIR}/bootloader) |
| set(rp2_bootloader_asm ${rp2_bootloader_prefix}/boot_stage2.S) |
| |
| ExternalProject_Add( |
| second_stage_bootloader |
| SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/bootloader |
| BINARY_DIR ${rp2_bootloader_prefix} |
| CMAKE_ARGS |
| -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} |
| -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} |
| -DCMAKE_ASM_COMPILER=${CMAKE_ASM_COMPILER} |
| -DZEPHYR_HAL_RPI_PICO_MODULE_DIR=${ZEPHYR_HAL_RPI_PICO_MODULE_DIR} |
| -DZEPHYR_BASE=${ZEPHYR_BASE} |
| -DFLASH_TYPE=${flash_type} |
| -DPYTHON_EXECUTABLE=${Python3_EXECUTABLE} |
| -DCONFIG_LEGACY_INCLUDE_PATH=$<BOOL:${CONFIG_LEGACY_INCLUDE_PATH}> |
| -DRP2_BOOTLOADER_BYPRODUCT=${rp2_bootloader_asm} |
| INSTALL_COMMAND "" # No installation needed |
| BUILD_BYPRODUCTS ${rp2_bootloader_asm} |
| BUILD_ALWAYS TRUE |
| ) |
| |
| add_dependencies(${ZEPHYR_CURRENT_LIBRARY} second_stage_bootloader) |
| zephyr_library_sources(${rp2_bootloader_asm}) |
| endif() |
| |
| # Pico sources and headers necessary for every build. |
| # These contain definitions and implementation used mostly for |
| # initializing the SoC, and therefore are always required. |
| |
| zephyr_library_sources( |
| ${rp2_common_dir}/hardware_clocks/clocks.c |
| ${rp2_common_dir}/hardware_pll/pll.c |
| ${rp2_common_dir}/hardware_xosc/xosc.c |
| ${rp2_common_dir}/hardware_watchdog/watchdog.c |
| ${rp2_common_dir}/pico_platform/platform.c |
| ${rp2_common_dir}/pico_bootrom/bootrom.c |
| ) |
| |
| zephyr_include_directories( |
| ${rp2_common_dir}/hardware_base/include |
| ${rp2_common_dir}/hardware_clocks/include |
| ${rp2_common_dir}/hardware_watchdog/include |
| ${rp2_common_dir}/hardware_xosc/include |
| ${rp2_common_dir}/hardware_pll/include |
| ${rp2_common_dir}/hardware_irq/include |
| ${rp2_common_dir}/hardware_sync/include |
| ${rp2_common_dir}/hardware_timer/include |
| ${rp2_common_dir}/hardware_resets/include |
| ${rp2_common_dir}/pico_bootrom/include |
| ${rp2040_dir}/hardware_regs/include |
| ${rp2040_dir}/hardware_structs/include |
| ${common_dir}/pico_base/include |
| ${rp2_common_dir}/pico_platform/include |
| ${CMAKE_CURRENT_LIST_DIR} |
| ) |
| |
| zephyr_library_sources_ifdef(CONFIG_PICOSDK_USE_GPIO |
| ${rp2_common_dir}/hardware_gpio/gpio.c) |
| zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_GPIO |
| ${rp2_common_dir}/hardware_gpio/include) |
| |
| zephyr_library_sources_ifdef(CONFIG_PICOSDK_USE_UART |
| ${rp2_common_dir}/hardware_uart/uart.c) |
| zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_UART |
| ${rp2_common_dir}/hardware_uart/include) |
| |
| zephyr_library_sources_ifdef(CONFIG_PICOSDK_USE_FLASH |
| ${rp2_common_dir}/hardware_flash/flash.c) |
| zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_FLASH |
| ${rp2_common_dir}/hardware_flash/include) |
| |
| zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_PWM |
| ${rp2_common_dir}/hardware_pwm/include) |
| |
| # Some flash driver functions must be executed from the RAM. |
| # Originally pico-sdk places them in the RW data section, so this |
| # implementation does the same. |
| zephyr_linker_sources_ifdef(CONFIG_PICOSDK_USE_FLASH RWDATA timecritical.ld) |
| |
| # A function in flash.c adds 1 to a function pointer, causing a warning |
| set_source_files_properties( |
| ${rp2_common_dir}/hardware_flash/flash.c |
| PROPERTIES |
| COMPILE_FLAGS $<TARGET_PROPERTY:compiler,warning_no_pointer_arithmetic> |
| ) |
| |
| endif() |