2023-08-28 02:02:08 -04:00
|
|
|
idf_build_get_property(target IDF_TARGET)
|
|
|
|
|
|
|
|
if(${target} STREQUAL "linux")
|
|
|
|
return() # This component is not supported by the POSIX/Linux simulator
|
|
|
|
endif()
|
|
|
|
|
2019-08-18 01:31:09 -04:00
|
|
|
set(srcs
|
2019-06-21 02:29:32 -04:00
|
|
|
"src/bootloader_common.c"
|
2020-07-08 04:42:50 -04:00
|
|
|
"src/bootloader_common_loader.c"
|
|
|
|
"src/bootloader_clock_init.c"
|
2020-02-03 05:12:32 -05:00
|
|
|
"src/bootloader_mem.c"
|
2019-06-21 02:29:32 -04:00
|
|
|
"src/bootloader_random.c"
|
2023-01-30 05:03:41 -05:00
|
|
|
"src/bootloader_efuse.c"
|
2020-03-11 13:48:56 -04:00
|
|
|
"src/flash_encrypt.c"
|
2021-01-25 15:27:03 -05:00
|
|
|
"src/secure_boot.c"
|
2019-08-07 23:44:24 -04:00
|
|
|
)
|
2018-01-11 21:49:13 -05:00
|
|
|
|
2024-07-19 05:10:06 -04:00
|
|
|
if(NOT CONFIG_ESP_BRINGUP_BYPASS_RANDOM_SETTING)
|
2023-10-19 03:57:36 -04:00
|
|
|
# For FPGA ENV, bootloader_random implementation is implemented in `bootloader_random.c`
|
|
|
|
list(APPEND srcs "src/bootloader_random_${IDF_TARGET}.c")
|
|
|
|
endif()
|
|
|
|
|
2023-01-30 05:03:41 -05:00
|
|
|
if(NOT CONFIG_APP_BUILD_TYPE_PURE_RAM_APP)
|
|
|
|
list(APPEND srcs
|
|
|
|
"bootloader_flash/src/bootloader_flash.c"
|
|
|
|
"bootloader_flash/src/flash_qio_mode.c"
|
|
|
|
"bootloader_flash/src/bootloader_flash_config_${IDF_TARGET}.c"
|
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(CONFIG_APP_BUILD_TYPE_APP_2NDBOOT)
|
|
|
|
list(APPEND srcs
|
|
|
|
"src/bootloader_utility.c"
|
|
|
|
"src/flash_partitions.c"
|
|
|
|
"src/esp_image_format.c"
|
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(BOOTLOADER_BUILD OR CONFIG_APP_BUILD_TYPE_RAM)
|
2021-11-08 02:10:13 -05:00
|
|
|
set(include_dirs "include" "bootloader_flash/include"
|
2022-06-13 02:08:36 -04:00
|
|
|
"private_include")
|
2022-12-13 12:16:56 -05:00
|
|
|
set(priv_requires micro-ecc spi_flash efuse esp_bootloader_format esp_app_format)
|
2019-08-07 23:44:24 -04:00
|
|
|
list(APPEND srcs
|
2020-02-24 14:51:41 -05:00
|
|
|
"src/bootloader_init.c"
|
2020-07-08 04:42:50 -04:00
|
|
|
"src/bootloader_clock_loader.c"
|
2020-04-30 09:30:15 -04:00
|
|
|
"src/bootloader_console.c"
|
|
|
|
"src/bootloader_console_loader.c"
|
2020-02-24 14:51:41 -05:00
|
|
|
"src/${IDF_TARGET}/bootloader_sha.c"
|
2021-08-27 00:07:52 -04:00
|
|
|
"src/${IDF_TARGET}/bootloader_soc.c"
|
2020-02-24 14:51:41 -05:00
|
|
|
"src/${IDF_TARGET}/bootloader_${IDF_TARGET}.c"
|
|
|
|
)
|
2020-08-08 08:15:27 -04:00
|
|
|
list(APPEND priv_requires hal)
|
2023-01-09 12:02:19 -05:00
|
|
|
if(CONFIG_ESP_ROM_REV0_HAS_NO_ECDSA_INTERFACE)
|
|
|
|
list(APPEND srcs
|
|
|
|
"src/${IDF_TARGET}/bootloader_ecdsa.c")
|
|
|
|
endif()
|
2018-01-11 21:49:13 -05:00
|
|
|
else()
|
2019-08-07 23:44:24 -04:00
|
|
|
list(APPEND srcs
|
2020-02-24 14:51:41 -05:00
|
|
|
"src/idf/bootloader_sha.c")
|
2021-11-08 02:10:13 -05:00
|
|
|
set(include_dirs "include" "bootloader_flash/include")
|
2022-06-13 02:08:36 -04:00
|
|
|
set(priv_include_dirs "private_include")
|
2021-06-18 02:51:11 -04:00
|
|
|
# heap is required for `heap_memory_layout.h` header
|
2022-12-13 12:16:56 -05:00
|
|
|
set(priv_requires spi_flash mbedtls efuse heap esp_bootloader_format esp_app_format)
|
2018-01-11 21:49:13 -05:00
|
|
|
endif()
|
|
|
|
|
2021-03-05 09:22:29 -05:00
|
|
|
if(BOOTLOADER_BUILD)
|
2023-01-30 05:03:41 -05:00
|
|
|
list(APPEND srcs "src/bootloader_panic.c")
|
2021-06-16 19:21:36 -04:00
|
|
|
if(CONFIG_SECURE_FLASH_ENC_ENABLED)
|
|
|
|
list(APPEND srcs "src/flash_encryption/flash_encrypt.c"
|
|
|
|
"src/${IDF_TARGET}/flash_encryption_secure_features.c")
|
|
|
|
endif()
|
|
|
|
|
2021-03-05 09:22:29 -05:00
|
|
|
if(CONFIG_SECURE_SIGNED_ON_BOOT)
|
|
|
|
if(CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME)
|
|
|
|
list(APPEND srcs "src/secure_boot_v1/secure_boot_signatures_bootloader.c")
|
|
|
|
endif()
|
2021-06-16 19:21:36 -04:00
|
|
|
if(CONFIG_SECURE_BOOT_V1_ENABLED)
|
|
|
|
list(APPEND srcs "src/secure_boot_v1/secure_boot.c"
|
|
|
|
"src/${IDF_TARGET}/secure_boot_secure_features.c")
|
|
|
|
endif()
|
2021-03-05 09:22:29 -05:00
|
|
|
|
2021-06-16 19:21:36 -04:00
|
|
|
if(CONFIG_SECURE_BOOT_V2_ENABLED)
|
2022-03-10 00:23:15 -05:00
|
|
|
list(APPEND srcs "src/secure_boot_v2/secure_boot_signatures_bootloader.c"
|
|
|
|
"src/secure_boot_v2/secure_boot.c"
|
2021-06-16 19:21:36 -04:00
|
|
|
"src/${IDF_TARGET}/secure_boot_secure_features.c")
|
|
|
|
endif()
|
2021-03-05 09:22:29 -05:00
|
|
|
endif()
|
|
|
|
else()
|
2024-03-28 02:05:33 -04:00
|
|
|
if(CONFIG_SOC_SECURE_BOOT_SUPPORTED)
|
|
|
|
list(APPEND srcs "src/${IDF_TARGET}/secure_boot_secure_features.c")
|
|
|
|
endif()
|
|
|
|
|
2021-03-05 09:22:29 -05:00
|
|
|
if(CONFIG_SECURE_SIGNED_ON_UPDATE)
|
|
|
|
if(CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME)
|
|
|
|
list(APPEND srcs "src/secure_boot_v1/secure_boot_signatures_app.c")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(CONFIG_SECURE_SIGNED_APPS_RSA_SCHEME)
|
|
|
|
list(APPEND srcs "src/secure_boot_v2/secure_boot_signatures_app.c")
|
2022-03-10 00:23:15 -05:00
|
|
|
list(APPEND srcs "src/secure_boot_v2/secure_boot_rsa_signature.c")
|
|
|
|
endif()
|
|
|
|
if(CONFIG_SECURE_SIGNED_APPS_ECDSA_V2_SCHEME)
|
|
|
|
list(APPEND srcs "src/secure_boot_v2/secure_boot_signatures_app.c")
|
|
|
|
list(APPEND srcs "src/secure_boot_v2/secure_boot_ecdsa_signature.c")
|
2021-03-05 09:22:29 -05:00
|
|
|
endif()
|
2020-02-24 14:51:41 -05:00
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2019-08-07 23:44:24 -04:00
|
|
|
set(requires soc) #unfortunately the header directly uses SOC registers
|
2018-10-19 15:02:55 -04:00
|
|
|
|
2019-04-28 03:38:23 -04:00
|
|
|
idf_component_register(SRCS "${srcs}"
|
|
|
|
INCLUDE_DIRS "${include_dirs}"
|
|
|
|
PRIV_INCLUDE_DIRS "${priv_include_dirs}"
|
|
|
|
REQUIRES "${requires}"
|
2019-05-08 22:25:08 -04:00
|
|
|
PRIV_REQUIRES "${priv_requires}")
|
|
|
|
|
2022-07-29 06:37:04 -04:00
|
|
|
if(NOT BOOTLOADER_BUILD)
|
|
|
|
if(CONFIG_SECURE_SIGNED_ON_UPDATE)
|
|
|
|
if(CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME OR CONFIG_SECURE_SIGNED_APPS_RSA_SCHEME OR
|
|
|
|
CONFIG_SECURE_SIGNED_APPS_ECDSA_V2_SCHEME)
|
|
|
|
target_link_libraries(${COMPONENT_LIB} PRIVATE idf::app_update)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2020-02-24 14:51:41 -05:00
|
|
|
if(CONFIG_SECURE_SIGNED_APPS AND (CONFIG_SECURE_BOOT_V1_ENABLED OR CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME))
|
2019-10-28 21:46:09 -04:00
|
|
|
if(BOOTLOADER_BUILD)
|
|
|
|
# Whether CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES or not, we need verification key to embed
|
|
|
|
# in the library.
|
|
|
|
if(CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES)
|
|
|
|
# We generate the key from the signing key. The signing key is passed from the main project.
|
|
|
|
get_filename_component(secure_boot_signing_key
|
|
|
|
"${SECURE_BOOT_SIGNING_KEY}"
|
|
|
|
ABSOLUTE BASE_DIR "${project_dir}")
|
|
|
|
get_filename_component(secure_boot_verification_key
|
|
|
|
"signature_verification_key.bin"
|
|
|
|
ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
|
|
|
|
add_custom_command(OUTPUT "${secure_boot_verification_key}"
|
|
|
|
COMMAND ${ESPSECUREPY}
|
2019-05-08 22:25:08 -04:00
|
|
|
extract_public_key --keyfile "${secure_boot_signing_key}"
|
|
|
|
"${secure_boot_verification_key}"
|
2019-10-28 21:46:09 -04:00
|
|
|
DEPENDS ${secure_boot_signing_key}
|
|
|
|
VERBATIM)
|
|
|
|
else()
|
|
|
|
# We expect to 'inherit' the verification key passed from main project.
|
|
|
|
get_filename_component(secure_boot_verification_key
|
|
|
|
${SECURE_BOOT_VERIFICATION_KEY}
|
|
|
|
ABSOLUTE BASE_DIR "${project_dir}")
|
|
|
|
endif()
|
|
|
|
else() # normal app build
|
|
|
|
idf_build_get_property(project_dir PROJECT_DIR)
|
|
|
|
|
|
|
|
if(CONFIG_SECURE_BOOT_VERIFICATION_KEY)
|
|
|
|
# verification-only build supplies verification key
|
|
|
|
set(secure_boot_verification_key ${CONFIG_SECURE_BOOT_VERIFICATION_KEY})
|
|
|
|
get_filename_component(secure_boot_verification_key
|
|
|
|
${secure_boot_verification_key}
|
|
|
|
ABSOLUTE BASE_DIR "${project_dir}")
|
|
|
|
else()
|
|
|
|
# sign at build time, extracts key from signing key
|
|
|
|
set(secure_boot_verification_key "${CMAKE_BINARY_DIR}/signature_verification_key.bin")
|
|
|
|
get_filename_component(secure_boot_signing_key
|
|
|
|
${CONFIG_SECURE_BOOT_SIGNING_KEY}
|
|
|
|
ABSOLUTE BASE_DIR "${project_dir}")
|
|
|
|
|
|
|
|
add_custom_command(OUTPUT "${secure_boot_verification_key}"
|
|
|
|
COMMAND ${ESPSECUREPY}
|
|
|
|
extract_public_key --keyfile "${secure_boot_signing_key}"
|
|
|
|
"${secure_boot_verification_key}"
|
|
|
|
WORKING_DIRECTORY ${project_dir}
|
|
|
|
DEPENDS ${secure_boot_signing_key}
|
|
|
|
VERBATIM)
|
|
|
|
endif()
|
2018-10-19 15:02:55 -04:00
|
|
|
endif()
|
2018-01-11 21:49:13 -05:00
|
|
|
|
2019-10-28 21:46:09 -04:00
|
|
|
# Embed the verification key in the binary (app & bootloader)
|
|
|
|
#
|
|
|
|
target_add_binary_data(${COMPONENT_LIB} "${secure_boot_verification_key}" "BINARY"
|
|
|
|
RENAME_TO signature_verification_key_bin)
|
2019-05-08 22:25:08 -04:00
|
|
|
set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
2023-05-08 03:41:30 -04:00
|
|
|
APPEND PROPERTY ADDITIONAL_CLEAN_FILES
|
2019-05-08 22:25:08 -04:00
|
|
|
"${secure_boot_verification_key}")
|
|
|
|
endif()
|
2020-07-08 04:42:50 -04:00
|
|
|
|
|
|
|
if(BOOTLOADER_BUILD)
|
|
|
|
target_link_libraries(${COMPONENT_LIB} INTERFACE "-u abort")
|
2022-12-13 12:16:56 -05:00
|
|
|
# esp_bootloader_desc structure is added as an undefined symbol because otherwise the
|
|
|
|
# linker will ignore this structure as it has no other files depending on it.
|
|
|
|
target_link_libraries(${COMPONENT_LIB} INTERFACE "-u esp_bootloader_desc")
|
2020-07-08 04:42:50 -04:00
|
|
|
endif()
|