67 lines
2.1 KiB
CMake
67 lines
2.1 KiB
CMake
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
cmake_minimum_required(VERSION 3.20.0)
|
|
|
|
# Skip compiler checking
|
|
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
|
|
|
project(second_stage_bootloader)
|
|
enable_language(ASM)
|
|
|
|
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)
|
|
|
|
add_executable(boot_stage2)
|
|
|
|
if(${FLASH_TYPE} STREQUAL W25Q080)
|
|
set(flash_type_file boot2_w25q080.S)
|
|
elseif(${FLASH_TYPE} STREQUAL GENERIC_03H)
|
|
set(flash_type_file boot2_generic_03h.S)
|
|
elseif(${FLASH_TYPE} STREQUAL IS25LP080)
|
|
set(flash_type_file boot2_is25lp080.S)
|
|
elseif(${FLASH_TYPE} STREQUAL W25X10CL)
|
|
set(flash_type_file boot2_w25x10cl.S)
|
|
elseif(${FLASH_TYPE} STREQUAL AT25SF128A)
|
|
set(flash_type_file boot2_at25sf128a.S)
|
|
else()
|
|
message(FATAL_ERROR "No flash type selected")
|
|
endif()
|
|
|
|
target_sources(boot_stage2 PRIVATE ${boot_stage_dir}/${flash_type_file})
|
|
|
|
target_include_directories(boot_stage2 PUBLIC
|
|
..
|
|
${boot_stage_dir}/asminclude
|
|
${rp2_common_dir}/pico_platform/include
|
|
${rp2040_dir}/hardware_regs/include
|
|
${common_dir}/pico_base/include
|
|
${ZEPHYR_BASE}/include
|
|
)
|
|
|
|
target_link_options(boot_stage2 PRIVATE
|
|
"-nostartfiles"
|
|
"--specs=nosys.specs"
|
|
"LINKER:--script=${boot_stage_dir}/boot_stage2.ld"
|
|
)
|
|
|
|
# The second stage bootloader is compiled without kconfig definitions.
|
|
# Therefore, in order to use toolchain.h, it needs to define CONFIG_ARM.
|
|
target_compile_definitions(boot_stage2 PRIVATE -DCONFIG_ARM=1)
|
|
|
|
# Generates a binary file from the compiled bootloader
|
|
add_custom_command(TARGET boot_stage2
|
|
POST_BUILD
|
|
BYPRODUCTS boot_stage2.bin
|
|
COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:boot_stage2> boot_stage2.bin
|
|
)
|
|
|
|
# Checksums the binary, pads it, and generates an assembly file
|
|
add_custom_command(TARGET boot_stage2
|
|
POST_BUILD
|
|
BYPRODUCTS ${RP2_BOOTLOADER_BYPRODUCT}
|
|
COMMAND ${PYTHON_EXECUTABLE} ${boot_stage_dir}/pad_checksum
|
|
-s 0xffffffff boot_stage2.bin ${RP2_BOOTLOADER_BYPRODUCT}
|
|
)
|