108 lines
4.0 KiB
CMake
108 lines
4.0 KiB
CMake
# 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)
|
|
|
|
# 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()
|