CMakeLists.txt 4.5 KB

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