CMakeLists.txt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. set(srcs
  2. "src/bootloader_clock.c"
  3. "src/bootloader_common.c"
  4. "src/bootloader_flash.c"
  5. "src/bootloader_flash_config.c"
  6. "src/bootloader_random.c"
  7. "src/bootloader_utility.c"
  8. "src/esp_image_format.c"
  9. "src/flash_encrypt.c"
  10. "src/flash_partitions.c"
  11. "src/flash_qio_mode.c")
  12. if(BOOTLOADER_BUILD)
  13. set(include_dirs "include" "include_bootloader")
  14. set(requires soc) #unfortunately the header directly uses SOC registers
  15. set(priv_requires micro-ecc spi_flash efuse)
  16. list(APPEND srcs
  17. "src/bootloader_init.c"
  18. "src/${IDF_TARGET}/bootloader_sha.c"
  19. "src/${IDF_TARGET}/flash_encrypt.c"
  20. "src/${IDF_TARGET}/secure_boot_signatures.c"
  21. "src/${IDF_TARGET}/secure_boot.c")
  22. else()
  23. list(APPEND srcs
  24. "src/idf/bootloader_sha.c"
  25. "src/idf/secure_boot_signatures.c")
  26. set(include_dirs "include")
  27. set(priv_include_dirs "include_bootloader")
  28. set(requires soc) #unfortunately the header directly uses SOC registers
  29. set(priv_requires spi_flash mbedtls efuse)
  30. endif()
  31. idf_component_register(SRCS "${srcs}"
  32. INCLUDE_DIRS "${include_dirs}"
  33. PRIV_INCLUDE_DIRS "${priv_include_dirs}"
  34. REQUIRES "${requires}"
  35. PRIV_REQUIRES "${priv_requires}")
  36. if(CONFIG_SECURE_SIGNED_APPS)
  37. if(BOOTLOADER_BUILD)
  38. # Whether CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES or not, we need verification key to embed
  39. # in the library.
  40. if(CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES)
  41. # We generate the key from the signing key. The signing key is passed from the main project.
  42. get_filename_component(secure_boot_signing_key
  43. "${SECURE_BOOT_SIGNING_KEY}"
  44. ABSOLUTE BASE_DIR "${project_dir}")
  45. get_filename_component(secure_boot_verification_key
  46. "signature_verification_key.bin"
  47. ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
  48. add_custom_command(OUTPUT "${secure_boot_verification_key}"
  49. COMMAND ${ESPSECUREPY}
  50. extract_public_key --keyfile "${secure_boot_signing_key}"
  51. "${secure_boot_verification_key}"
  52. DEPENDS ${secure_boot_signing_key}
  53. VERBATIM)
  54. else()
  55. # We expect to 'inherit' the verification key passed from main project.
  56. get_filename_component(secure_boot_verification_key
  57. ${SECURE_BOOT_VERIFICATION_KEY}
  58. ABSOLUTE BASE_DIR "${project_dir}")
  59. endif()
  60. else() # normal app build
  61. idf_build_get_property(project_dir PROJECT_DIR)
  62. if(CONFIG_SECURE_BOOT_VERIFICATION_KEY)
  63. # verification-only build supplies verification key
  64. set(secure_boot_verification_key ${CONFIG_SECURE_BOOT_VERIFICATION_KEY})
  65. get_filename_component(secure_boot_verification_key
  66. ${secure_boot_verification_key}
  67. ABSOLUTE BASE_DIR "${project_dir}")
  68. else()
  69. # sign at build time, extracts key from signing key
  70. set(secure_boot_verification_key "${CMAKE_BINARY_DIR}/signature_verification_key.bin")
  71. get_filename_component(secure_boot_signing_key
  72. ${CONFIG_SECURE_BOOT_SIGNING_KEY}
  73. ABSOLUTE BASE_DIR "${project_dir}")
  74. add_custom_command(OUTPUT "${secure_boot_verification_key}"
  75. COMMAND ${ESPSECUREPY}
  76. extract_public_key --keyfile "${secure_boot_signing_key}"
  77. "${secure_boot_verification_key}"
  78. WORKING_DIRECTORY ${project_dir}
  79. DEPENDS ${secure_boot_signing_key}
  80. VERBATIM)
  81. endif()
  82. endif()
  83. # Embed the verification key in the binary (app & bootloader)
  84. #
  85. target_add_binary_data(${COMPONENT_LIB} "${secure_boot_verification_key}" "BINARY"
  86. RENAME_TO signature_verification_key_bin)
  87. set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
  88. APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
  89. "${secure_boot_verification_key}")
  90. endif()