CMakeLists.txt 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. set(srcs
  2. "src/bootloader_common.c"
  3. "src/bootloader_common_loader.c"
  4. "src/bootloader_clock_init.c"
  5. "bootloader_flash/src/bootloader_flash.c"
  6. "src/bootloader_mem.c"
  7. "src/bootloader_random.c"
  8. "src/bootloader_random_${IDF_TARGET}.c"
  9. "src/bootloader_utility.c"
  10. "src/esp_image_format.c"
  11. "src/flash_encrypt.c"
  12. "src/secure_boot.c"
  13. "src/flash_partitions.c"
  14. "bootloader_flash/src/flash_qio_mode.c"
  15. "bootloader_flash/src/bootloader_flash_config_${IDF_TARGET}.c"
  16. "src/bootloader_efuse.c"
  17. )
  18. if(BOOTLOADER_BUILD)
  19. set(include_dirs "include" "bootloader_flash/include"
  20. "private_include")
  21. set(priv_requires micro-ecc spi_flash efuse esp_app_format)
  22. list(APPEND srcs
  23. "src/bootloader_init.c"
  24. "src/bootloader_clock_loader.c"
  25. "src/bootloader_console.c"
  26. "src/bootloader_console_loader.c"
  27. "src/bootloader_panic.c"
  28. "src/${IDF_TARGET}/bootloader_sha.c"
  29. "src/${IDF_TARGET}/bootloader_soc.c"
  30. "src/${IDF_TARGET}/bootloader_${IDF_TARGET}.c"
  31. )
  32. list(APPEND priv_requires hal)
  33. else()
  34. list(APPEND srcs
  35. "src/idf/bootloader_sha.c")
  36. set(include_dirs "include" "bootloader_flash/include")
  37. set(priv_include_dirs "private_include")
  38. # heap is required for `heap_memory_layout.h` header
  39. set(priv_requires spi_flash mbedtls efuse heap esp_app_format)
  40. endif()
  41. if(BOOTLOADER_BUILD)
  42. if(CONFIG_SECURE_FLASH_ENC_ENABLED)
  43. list(APPEND srcs "src/flash_encryption/flash_encrypt.c"
  44. "src/${IDF_TARGET}/flash_encryption_secure_features.c")
  45. endif()
  46. if(CONFIG_SECURE_SIGNED_ON_BOOT)
  47. if(CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME)
  48. list(APPEND srcs "src/secure_boot_v1/secure_boot_signatures_bootloader.c")
  49. endif()
  50. if(CONFIG_SECURE_BOOT_V1_ENABLED)
  51. list(APPEND srcs "src/secure_boot_v1/secure_boot.c"
  52. "src/${IDF_TARGET}/secure_boot_secure_features.c")
  53. endif()
  54. if(CONFIG_SECURE_BOOT_V2_ENABLED)
  55. list(APPEND srcs "src/secure_boot_v2/secure_boot_signatures_bootloader.c"
  56. "src/secure_boot_v2/secure_boot.c"
  57. "src/${IDF_TARGET}/secure_boot_secure_features.c")
  58. endif()
  59. endif()
  60. else()
  61. if(CONFIG_SECURE_SIGNED_ON_UPDATE)
  62. if(CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME)
  63. list(APPEND srcs "src/secure_boot_v1/secure_boot_signatures_app.c")
  64. endif()
  65. if(CONFIG_SECURE_SIGNED_APPS_RSA_SCHEME)
  66. list(APPEND srcs "src/secure_boot_v2/secure_boot_signatures_app.c")
  67. list(APPEND srcs "src/secure_boot_v2/secure_boot_rsa_signature.c")
  68. endif()
  69. if(CONFIG_SECURE_SIGNED_APPS_ECDSA_V2_SCHEME)
  70. list(APPEND srcs "src/secure_boot_v2/secure_boot_signatures_app.c")
  71. list(APPEND srcs "src/secure_boot_v2/secure_boot_ecdsa_signature.c")
  72. endif()
  73. endif()
  74. endif()
  75. set(requires soc) #unfortunately the header directly uses SOC registers
  76. idf_component_register(SRCS "${srcs}"
  77. INCLUDE_DIRS "${include_dirs}"
  78. PRIV_INCLUDE_DIRS "${priv_include_dirs}"
  79. REQUIRES "${requires}"
  80. PRIV_REQUIRES "${priv_requires}")
  81. if(NOT BOOTLOADER_BUILD)
  82. if(CONFIG_SECURE_SIGNED_ON_UPDATE)
  83. if(CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME OR CONFIG_SECURE_SIGNED_APPS_RSA_SCHEME OR
  84. CONFIG_SECURE_SIGNED_APPS_ECDSA_V2_SCHEME)
  85. target_link_libraries(${COMPONENT_LIB} PRIVATE idf::app_update)
  86. endif()
  87. endif()
  88. endif()
  89. if(CONFIG_SECURE_SIGNED_APPS AND (CONFIG_SECURE_BOOT_V1_ENABLED OR CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME))
  90. if(BOOTLOADER_BUILD)
  91. # Whether CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES or not, we need verification key to embed
  92. # in the library.
  93. if(CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES)
  94. # We generate the key from the signing key. The signing key is passed from the main project.
  95. get_filename_component(secure_boot_signing_key
  96. "${SECURE_BOOT_SIGNING_KEY}"
  97. ABSOLUTE BASE_DIR "${project_dir}")
  98. get_filename_component(secure_boot_verification_key
  99. "signature_verification_key.bin"
  100. ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
  101. add_custom_command(OUTPUT "${secure_boot_verification_key}"
  102. COMMAND ${ESPSECUREPY}
  103. extract_public_key --keyfile "${secure_boot_signing_key}"
  104. "${secure_boot_verification_key}"
  105. DEPENDS ${secure_boot_signing_key}
  106. VERBATIM)
  107. else()
  108. # We expect to 'inherit' the verification key passed from main project.
  109. get_filename_component(secure_boot_verification_key
  110. ${SECURE_BOOT_VERIFICATION_KEY}
  111. ABSOLUTE BASE_DIR "${project_dir}")
  112. endif()
  113. else() # normal app build
  114. idf_build_get_property(project_dir PROJECT_DIR)
  115. if(CONFIG_SECURE_BOOT_VERIFICATION_KEY)
  116. # verification-only build supplies verification key
  117. set(secure_boot_verification_key ${CONFIG_SECURE_BOOT_VERIFICATION_KEY})
  118. get_filename_component(secure_boot_verification_key
  119. ${secure_boot_verification_key}
  120. ABSOLUTE BASE_DIR "${project_dir}")
  121. else()
  122. # sign at build time, extracts key from signing key
  123. set(secure_boot_verification_key "${CMAKE_BINARY_DIR}/signature_verification_key.bin")
  124. get_filename_component(secure_boot_signing_key
  125. ${CONFIG_SECURE_BOOT_SIGNING_KEY}
  126. ABSOLUTE BASE_DIR "${project_dir}")
  127. add_custom_command(OUTPUT "${secure_boot_verification_key}"
  128. COMMAND ${ESPSECUREPY}
  129. extract_public_key --keyfile "${secure_boot_signing_key}"
  130. "${secure_boot_verification_key}"
  131. WORKING_DIRECTORY ${project_dir}
  132. DEPENDS ${secure_boot_signing_key}
  133. VERBATIM)
  134. endif()
  135. endif()
  136. # Embed the verification key in the binary (app & bootloader)
  137. #
  138. target_add_binary_data(${COMPONENT_LIB} "${secure_boot_verification_key}" "BINARY"
  139. RENAME_TO signature_verification_key_bin)
  140. set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
  141. APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
  142. "${secure_boot_verification_key}")
  143. endif()
  144. if(BOOTLOADER_BUILD)
  145. target_link_libraries(${COMPONENT_LIB} INTERFACE "-u abort")
  146. endif()
  147. target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")