2021-11-15 17:59:59 -05:00
|
|
|
idf_build_get_property(target IDF_TARGET)
|
|
|
|
set(priv_req)
|
|
|
|
if(NOT ${target} STREQUAL "linux")
|
|
|
|
list(APPEND priv_req esptool_py)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
idf_component_register(PRIV_REQUIRES ${priv_req})
|
2018-03-22 02:27:10 -04:00
|
|
|
|
2019-05-09 22:53:08 -04:00
|
|
|
if(BOOTLOADER_BUILD)
|
|
|
|
return()
|
|
|
|
endif()
|
2018-08-16 01:01:43 -04:00
|
|
|
|
|
|
|
set(partition_csv "${PARTITION_CSV_PATH}")
|
2018-01-17 20:12:13 -05:00
|
|
|
|
2020-02-24 14:51:41 -05:00
|
|
|
if(CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES AND CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME)
|
2018-02-26 23:45:30 -05:00
|
|
|
set(unsigned_partition_bin "partition-table-unsigned.bin")
|
|
|
|
set(final_partition_bin "partition-table.bin")
|
|
|
|
set(final_partition_target "sign_partition_table")
|
2018-01-17 20:12:13 -05:00
|
|
|
else()
|
2018-02-26 23:45:30 -05:00
|
|
|
set(unsigned_partition_bin "partition-table.bin")
|
|
|
|
set(final_partition_bin "partition-table.bin")
|
|
|
|
set(final_partition_target "build_partition_table")
|
2018-01-17 20:12:13 -05:00
|
|
|
endif()
|
|
|
|
|
2019-06-28 03:16:52 -04:00
|
|
|
if(NOT CONFIG_PARTITION_TABLE_MD5)
|
2018-01-18 23:47:49 -05:00
|
|
|
set(md5_opt --disable-md5sum)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(CONFIG_ESPTOOLPY_FLASHSIZE)
|
|
|
|
set(flashsize_opt --flash-size ${CONFIG_ESPTOOLPY_FLASHSIZE})
|
|
|
|
endif()
|
|
|
|
|
2020-02-24 14:51:41 -05:00
|
|
|
if(CONFIG_SECURE_BOOT AND NOT CONFIG_SECURE_BOOT_ALLOW_SHORT_APP_PARTITION)
|
2018-10-19 15:02:55 -04:00
|
|
|
set(partition_secure_opt --secure)
|
|
|
|
else()
|
|
|
|
set(partition_secure_opt "")
|
|
|
|
endif()
|
|
|
|
|
2022-06-21 06:49:26 -04:00
|
|
|
idf_build_get_property(extra_subtypes EXTRA_PARTITION_SUBTYPES)
|
|
|
|
if(extra_subtypes)
|
|
|
|
# Remove all white spaces from the string
|
|
|
|
string(REPLACE " " "" extra_subtypes "${extra_subtypes}")
|
|
|
|
set(extra_partition_subtypes --extra-partition-subtypes ${extra_subtypes})
|
|
|
|
else()
|
|
|
|
set(extra_partition_subtypes "")
|
|
|
|
endif()
|
|
|
|
|
2019-05-09 22:53:08 -04:00
|
|
|
idf_build_get_property(build_dir BUILD_DIR)
|
|
|
|
idf_build_get_property(python PYTHON)
|
2022-06-21 06:49:26 -04:00
|
|
|
idf_build_get_property(extra_subtypes EXTRA_PARTITION_SUBTYPES)
|
2019-05-09 22:53:08 -04:00
|
|
|
|
2020-02-17 22:22:43 -05:00
|
|
|
set(gen_partition_table "${python}" "${CMAKE_CURRENT_SOURCE_DIR}/gen_esp32part.py" "-q"
|
|
|
|
"--offset" "${PARTITION_TABLE_OFFSET}" "${md5_opt}" "${flashsize_opt}"
|
2022-06-21 06:49:26 -04:00
|
|
|
"${partition_secure_opt}" ${extra_partition_subtypes} "--")
|
2020-02-17 22:22:43 -05:00
|
|
|
|
2020-04-07 23:37:02 -04:00
|
|
|
set(partition_table_display
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E echo "Partition table binary generated. Contents:"
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E echo "*******************************************************************************"
|
|
|
|
COMMAND ${gen_partition_table} "${build_dir}/partition_table/${unsigned_partition_bin}"
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E echo "*******************************************************************************"
|
|
|
|
)
|
|
|
|
|
2019-05-09 22:53:08 -04:00
|
|
|
add_custom_command(OUTPUT "${build_dir}/partition_table/${unsigned_partition_bin}"
|
2020-02-17 22:22:43 -05:00
|
|
|
COMMAND ${gen_partition_table} "${partition_csv}" "${build_dir}/partition_table/${unsigned_partition_bin}"
|
2020-04-07 23:37:02 -04:00
|
|
|
${partition_table_display}
|
2018-01-18 23:47:49 -05:00
|
|
|
DEPENDS ${partition_csv} "${CMAKE_CURRENT_SOURCE_DIR}/gen_esp32part.py"
|
|
|
|
VERBATIM)
|
2018-01-17 20:12:13 -05:00
|
|
|
|
2022-06-21 06:49:26 -04:00
|
|
|
if(extra_subtypes)
|
|
|
|
set(extra_subtypes_h "${build_dir}/config/extra_partition_subtypes.inc")
|
|
|
|
|
|
|
|
add_custom_command(OUTPUT ${extra_subtypes_h}
|
|
|
|
COMMAND ${python} ${CMAKE_CURRENT_SOURCE_DIR}/gen_extra_subtypes_inc.py ${extra_subtypes_h} ${extra_subtypes}
|
|
|
|
COMMENT "Generating extra partition subtype header file"
|
|
|
|
)
|
|
|
|
add_custom_target(extra_subtype_hdr DEPENDS ${extra_subtypes_h})
|
|
|
|
add_dependencies(${COMPONENT_LIB} extra_subtype_hdr)
|
|
|
|
endif()
|
|
|
|
|
2020-04-07 23:37:02 -04:00
|
|
|
add_custom_target(partition_table_bin DEPENDS "${build_dir}/partition_table/${unsigned_partition_bin}"
|
2022-06-21 06:49:26 -04:00
|
|
|
"${build_dir}/partition_table/${final_partition_bin}"
|
|
|
|
)
|
2020-04-07 23:37:02 -04:00
|
|
|
|
2018-08-26 23:55:04 -04:00
|
|
|
if(EXISTS ${partition_csv})
|
2021-08-11 09:24:17 -04:00
|
|
|
add_custom_target(partition-table
|
2020-04-07 23:37:02 -04:00
|
|
|
DEPENDS partition_table_bin
|
|
|
|
${partition_table_display}
|
2020-02-17 22:22:43 -05:00
|
|
|
VERBATIM)
|
2021-08-11 09:24:17 -04:00
|
|
|
add_deprecated_target_alias(partition_table partition-table)
|
2018-08-26 23:55:04 -04:00
|
|
|
else()
|
2018-10-19 15:02:55 -04:00
|
|
|
# If the partition input CSV is not found, create a phony partition_table target that
|
|
|
|
# fails the build. fail_at_build_time also touches CMakeCache.txt to cause a cmake run next time
|
2018-08-26 23:55:04 -04:00
|
|
|
# (to pick up a new CSV if one exists, etc.)
|
2021-08-11 09:24:17 -04:00
|
|
|
fail_at_build_time(partition-table
|
2018-10-19 15:02:55 -04:00
|
|
|
"Partition table CSV ${partition_csv} does not exist."
|
|
|
|
"Either change partition table in menuconfig or create this input file.")
|
|
|
|
endif()
|
|
|
|
|
2023-01-10 11:47:20 -05:00
|
|
|
if(${target} STREQUAL "linux" AND EXISTS ${partition_csv})
|
|
|
|
# partition-table target is normally invoked as a dependency of 'flash' target.
|
|
|
|
# However, when building for "linux" target, 'flash' target doesn't exist,
|
|
|
|
# so we need to attach the partition table build to the executable target.
|
|
|
|
#
|
|
|
|
# The problem is that the executable target is not yet defined
|
|
|
|
# when the component CMakeLists.txt file is evaluated, so we
|
|
|
|
# can only get it as a generator expression. But generator expressions
|
|
|
|
# can't be used in 'add_dependencies':
|
|
|
|
# https://gitlab.kitware.com/cmake/cmake/-/issues/19467
|
|
|
|
#
|
|
|
|
# Therefore attach partition-table to the internal __idf_build_target
|
|
|
|
# target. This is a hack, since that target name is an implementation detail
|
|
|
|
# of the build system.
|
|
|
|
|
|
|
|
add_dependencies(__idf_build_target partition-table)
|
|
|
|
endif()
|
|
|
|
|
2019-05-10 03:25:25 -04:00
|
|
|
# Add signing steps
|
2020-02-24 14:51:41 -05:00
|
|
|
if(CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME)
|
2019-05-10 03:25:25 -04:00
|
|
|
if(CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES)
|
|
|
|
add_custom_target(gen_unsigned_partition_bin ALL DEPENDS
|
|
|
|
"${build_dir}/partition_table/${unsigned_partition_bin}")
|
|
|
|
|
|
|
|
add_custom_command(OUTPUT "${build_dir}/partition_table/${final_partition_bin}"
|
2020-02-24 14:51:41 -05:00
|
|
|
COMMAND ${ESPSECUREPY} sign_data --version 1 --keyfile "${SECURE_BOOT_SIGNING_KEY}"
|
2019-05-10 03:25:25 -04:00
|
|
|
-o "${build_dir}/partition_table/${final_partition_bin}"
|
|
|
|
"${build_dir}/partition_table/${unsigned_partition_bin}"
|
|
|
|
DEPENDS "${build_dir}/partition_table/${unsigned_partition_bin}"
|
|
|
|
VERBATIM)
|
|
|
|
else()
|
|
|
|
string(REPLACE ";" " " espsecurepy "${ESPSECUREPY}")
|
2021-08-11 09:24:17 -04:00
|
|
|
add_custom_command(TARGET partition-table POST_BUILD
|
2019-05-10 03:25:25 -04:00
|
|
|
COMMAND ${CMAKE_COMMAND} -E echo
|
|
|
|
"Partition table built but not signed. Sign partition data before flashing:"
|
2020-02-17 22:22:43 -05:00
|
|
|
COMMAND ${CMAKE_COMMAND} -E echo
|
2019-05-10 03:25:25 -04:00
|
|
|
"\t${espsecurepy} sign_data --keyfile KEYFILE ${build_dir}/partition_table/${final_partition_bin}"
|
|
|
|
VERBATIM)
|
|
|
|
endif()
|
2022-03-10 00:23:15 -05:00
|
|
|
elseif(CONFIG_SECURE_SIGNED_APPS_RSA_SCHEME OR CONFIG_SECURE_SIGNED_APPS_ECDSA_V2_SCHEME)
|
2021-08-11 09:24:17 -04:00
|
|
|
add_custom_command(TARGET partition-table POST_BUILD
|
2020-02-24 14:51:41 -05:00
|
|
|
COMMAND ${CMAKE_COMMAND} -E echo "Partition table built:"
|
|
|
|
VERBATIM)
|
2018-08-26 23:55:04 -04:00
|
|
|
endif()
|
|
|
|
|
2019-12-19 20:55:02 -05:00
|
|
|
idf_component_get_property(main_args esptool_py FLASH_ARGS)
|
|
|
|
idf_component_get_property(sub_args esptool_py FLASH_SUB_ARGS)
|
|
|
|
|
2020-05-04 13:11:00 -04:00
|
|
|
if(CONFIG_APP_BUILD_GENERATE_BINARIES)
|
2021-08-11 09:24:17 -04:00
|
|
|
esptool_py_flash_target(partition-table-flash "${main_args}" "${sub_args}")
|
|
|
|
esptool_py_flash_target_image(partition-table-flash partition-table "${PARTITION_TABLE_OFFSET}"
|
2020-05-31 12:39:30 -04:00
|
|
|
"${build_dir}/partition_table/${final_partition_bin}")
|
2021-08-11 09:24:17 -04:00
|
|
|
esptool_py_flash_target_image(flash partition-table "${PARTITION_TABLE_OFFSET}"
|
2020-05-31 12:39:30 -04:00
|
|
|
"${build_dir}/partition_table/${final_partition_bin}")
|
2021-08-11 09:24:17 -04:00
|
|
|
add_deprecated_target_alias(partition_table-flash partition-table-flash)
|
2020-05-04 13:11:00 -04:00
|
|
|
endif()
|