blob: 45f3cc1660931477517b0b801b7a3f0800281880 [file]
cmake_minimum_required(VERSION 3.12)
if (NOT USE_PRECOMPILED)
set(PICO_PLATFORM rp2350-arm-s)
set(PICO_NO_PICOTOOL 1)
# Ensure we're using a MinSizeRel build
set(CMAKE_BUILD_TYPE MinSizeRel)
# If the user set these environment variables to influence the picotool
# build, unset them here so that they do not influence the pico-sdk
# build. This is especially required for flags that are not supported
# by arm-none-eabi compilers.
unset(ENV{CFLAGS})
unset(ENV{CXXFLAGS})
unset(ENV{LDFLAGS})
# Pull in SDK (must be before project)
include(${PICO_SDK_PATH}/external/pico_sdk_import.cmake)
project(enc_bootloader C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
if (PICO_SDK_VERSION_STRING VERSION_LESS "2.1.2")
message(FATAL_ERROR "Raspberry Pi Pico SDK version 2.1.2 (or later) required. Your version is ${PICO_SDK_VERSION_STRING}")
endif()
# Initialize the SDK
pico_sdk_init()
# Encrypted Bootloader
add_executable(enc_bootloader
enc_bootloader.c
)
target_link_libraries(enc_bootloader
pico_stdlib
)
if (USE_MBEDTLS)
target_sources(enc_bootloader PRIVATE mbedtls_aes.c)
target_link_libraries(enc_bootloader pico_mbedtls)
target_compile_definitions(enc_bootloader PRIVATE
PICO_STACK_SIZE=0x800
# 0x20080000 -> 0x20081000 doesn't overlap the stack
ROM_CHAIN_WORKSPACE=0x20080000)
target_include_directories(enc_bootloader PRIVATE ${CMAKE_CURRENT_LIST_DIR})
pico_set_linker_script(enc_bootloader ${CMAKE_CURRENT_LIST_DIR}/memmap_mbedtls.ld)
else()
target_sources(enc_bootloader PRIVATE aes.S)
target_compile_definitions(enc_bootloader PRIVATE
PICO_STACK_SIZE=0x180
# AES Code & workspace from 0x20080044 -> 0x20081604, so 0x20080200 -> 0x20081200 is inside that
ROM_CHAIN_WORKSPACE=0x20080200)
pico_set_linker_script(enc_bootloader ${CMAKE_CURRENT_LIST_DIR}/memmap_enc_bootloader.ld)
endif()
target_compile_definitions(enc_bootloader PRIVATE
# use stack guards, as AES variables are written near the stack
PICO_USE_STACK_GUARDS=1
# The following are to reduce the size of the binary
PICO_NO_PROGRAM_INFO=1
# No spinlocks used
PICO_USE_SW_SPIN_LOCKS=0
# No heap is used
PICO_HEAP_SIZE=0
# These inits are not required
PICO_RUNTIME_SKIP_INIT_SPIN_LOCKS_RESET=1
PICO_RUNTIME_SKIP_INIT_PER_CORE_IRQ_PRIORITIES=1
PICO_BOOTROM_LOCKING_ENABLED=0
# Don't need any vtor irqs
PICO_MINIMAL_STORED_VECTOR_TABLE=1
PICO_NO_RAM_VECTOR_TABLE=1
)
# print memory usage
target_link_options(enc_bootloader PUBLIC -Wl,--print-memory-usage)
pico_minimize_runtime(enc_bootloader)
pico_set_binary_type(enc_bootloader no_flash)
pico_add_dis_output(enc_bootloader)
else()
project(enc_bootloader C CXX ASM)
message("Using precompiled enc_bootloader.elf")
if (USE_MBEDTLS)
configure_file(${CMAKE_CURRENT_LIST_DIR}/enc_bootloader_mbedtls.elf ${CMAKE_CURRENT_BINARY_DIR}/enc_bootloader.elf COPYONLY)
else()
configure_file(${CMAKE_CURRENT_LIST_DIR}/enc_bootloader.elf ${CMAKE_CURRENT_BINARY_DIR}/enc_bootloader.elf COPYONLY)
endif()
# Use manually specified variables
set(NULL ${CMAKE_MAKE_PROGRAM})
set(NULL ${PICO_SDK_PATH})
set(NULL ${PICO_DEBUG_INFO_IN_RELEASE})
endif()