# 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}
  )
