CMakeLists.txt 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. idf_build_get_property(target IDF_TARGET)
  2. set(priv_req)
  3. if(NOT ${target} STREQUAL "linux")
  4. list(APPEND priv_req esptool_py)
  5. endif()
  6. idf_component_register(PRIV_REQUIRES ${priv_req})
  7. if(BOOTLOADER_BUILD)
  8. return()
  9. endif()
  10. set(partition_csv "${PARTITION_CSV_PATH}")
  11. if(CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES AND CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME)
  12. set(unsigned_partition_bin "partition-table-unsigned.bin")
  13. set(final_partition_bin "partition-table.bin")
  14. set(final_partition_target "sign_partition_table")
  15. else()
  16. set(unsigned_partition_bin "partition-table.bin")
  17. set(final_partition_bin "partition-table.bin")
  18. set(final_partition_target "build_partition_table")
  19. endif()
  20. if(NOT CONFIG_PARTITION_TABLE_MD5)
  21. set(md5_opt --disable-md5sum)
  22. endif()
  23. if(CONFIG_ESPTOOLPY_FLASHSIZE)
  24. set(flashsize_opt --flash-size ${CONFIG_ESPTOOLPY_FLASHSIZE})
  25. endif()
  26. if(CONFIG_SECURE_BOOT AND NOT CONFIG_SECURE_BOOT_ALLOW_SHORT_APP_PARTITION)
  27. set(partition_secure_opt --secure)
  28. else()
  29. set(partition_secure_opt "")
  30. endif()
  31. idf_build_get_property(extra_subtypes EXTRA_PARTITION_SUBTYPES)
  32. if(extra_subtypes)
  33. # Remove all white spaces from the string
  34. string(REPLACE " " "" extra_subtypes "${extra_subtypes}")
  35. set(extra_partition_subtypes --extra-partition-subtypes ${extra_subtypes})
  36. else()
  37. set(extra_partition_subtypes "")
  38. endif()
  39. idf_build_get_property(build_dir BUILD_DIR)
  40. idf_build_get_property(python PYTHON)
  41. idf_build_get_property(extra_subtypes EXTRA_PARTITION_SUBTYPES)
  42. set(gen_partition_table "${python}" "${CMAKE_CURRENT_SOURCE_DIR}/gen_esp32part.py" "-q"
  43. "--offset" "${PARTITION_TABLE_OFFSET}" "${md5_opt}" "${flashsize_opt}"
  44. "${partition_secure_opt}" ${extra_partition_subtypes} "--")
  45. set(partition_table_display
  46. COMMAND ${CMAKE_COMMAND} -E echo "Partition table binary generated. Contents:"
  47. COMMAND ${CMAKE_COMMAND} -E echo "*******************************************************************************"
  48. COMMAND ${gen_partition_table} "${build_dir}/partition_table/${unsigned_partition_bin}"
  49. COMMAND ${CMAKE_COMMAND} -E echo "*******************************************************************************"
  50. )
  51. add_custom_command(OUTPUT "${build_dir}/partition_table/${unsigned_partition_bin}"
  52. COMMAND ${gen_partition_table} "${partition_csv}" "${build_dir}/partition_table/${unsigned_partition_bin}"
  53. ${partition_table_display}
  54. DEPENDS ${partition_csv} "${CMAKE_CURRENT_SOURCE_DIR}/gen_esp32part.py"
  55. VERBATIM)
  56. if(extra_subtypes)
  57. set(extra_subtypes_h "${build_dir}/config/extra_partition_subtypes.inc")
  58. add_custom_command(OUTPUT ${extra_subtypes_h}
  59. COMMAND ${python} ${CMAKE_CURRENT_SOURCE_DIR}/gen_extra_subtypes_inc.py ${extra_subtypes_h} ${extra_subtypes}
  60. COMMENT "Generating extra partition subtype header file"
  61. )
  62. add_custom_target(extra_subtype_hdr DEPENDS ${extra_subtypes_h})
  63. add_dependencies(${COMPONENT_LIB} extra_subtype_hdr)
  64. endif()
  65. add_custom_target(partition_table_bin DEPENDS "${build_dir}/partition_table/${unsigned_partition_bin}"
  66. "${build_dir}/partition_table/${final_partition_bin}"
  67. )
  68. if(EXISTS ${partition_csv})
  69. add_custom_target(partition-table
  70. DEPENDS partition_table_bin
  71. ${partition_table_display}
  72. VERBATIM)
  73. add_deprecated_target_alias(partition_table partition-table)
  74. else()
  75. # If the partition input CSV is not found, create a phony partition_table target that
  76. # fails the build. fail_at_build_time also touches CMakeCache.txt to cause a cmake run next time
  77. # (to pick up a new CSV if one exists, etc.)
  78. fail_at_build_time(partition-table
  79. "Partition table CSV ${partition_csv} does not exist."
  80. "Either change partition table in menuconfig or create this input file.")
  81. endif()
  82. # Add signing steps
  83. if(CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME)
  84. if(CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES)
  85. add_custom_target(gen_unsigned_partition_bin ALL DEPENDS
  86. "${build_dir}/partition_table/${unsigned_partition_bin}")
  87. add_custom_command(OUTPUT "${build_dir}/partition_table/${final_partition_bin}"
  88. COMMAND ${ESPSECUREPY} sign_data --version 1 --keyfile "${SECURE_BOOT_SIGNING_KEY}"
  89. -o "${build_dir}/partition_table/${final_partition_bin}"
  90. "${build_dir}/partition_table/${unsigned_partition_bin}"
  91. DEPENDS "${build_dir}/partition_table/${unsigned_partition_bin}"
  92. VERBATIM)
  93. else()
  94. string(REPLACE ";" " " espsecurepy "${ESPSECUREPY}")
  95. add_custom_command(TARGET partition-table POST_BUILD
  96. COMMAND ${CMAKE_COMMAND} -E echo
  97. "Partition table built but not signed. Sign partition data before flashing:"
  98. COMMAND ${CMAKE_COMMAND} -E echo
  99. "\t${espsecurepy} sign_data --keyfile KEYFILE ${build_dir}/partition_table/${final_partition_bin}"
  100. VERBATIM)
  101. endif()
  102. elseif(CONFIG_SECURE_SIGNED_APPS_RSA_SCHEME OR CONFIG_SECURE_SIGNED_APPS_ECDSA_V2_SCHEME)
  103. add_custom_command(TARGET partition-table POST_BUILD
  104. COMMAND ${CMAKE_COMMAND} -E echo "Partition table built:"
  105. VERBATIM)
  106. endif()
  107. idf_component_get_property(main_args esptool_py FLASH_ARGS)
  108. idf_component_get_property(sub_args esptool_py FLASH_SUB_ARGS)
  109. if(CONFIG_APP_BUILD_GENERATE_BINARIES)
  110. esptool_py_flash_target(partition-table-flash "${main_args}" "${sub_args}")
  111. esptool_py_flash_target_image(partition-table-flash partition-table "${PARTITION_TABLE_OFFSET}"
  112. "${build_dir}/partition_table/${final_partition_bin}")
  113. esptool_py_flash_target_image(flash partition-table "${PARTITION_TABLE_OFFSET}"
  114. "${build_dir}/partition_table/${final_partition_bin}")
  115. add_deprecated_target_alias(partition_table-flash partition-table-flash)
  116. endif()