| 
									
										
										
										
											2021-11-15 23:59:59 +01: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 17:27:10 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-10 10:53:08 +08:00
										 |  |  | if(BOOTLOADER_BUILD)
 | 
					
						
							|  |  |  |     return()
 | 
					
						
							|  |  |  | endif()
 | 
					
						
							| 
									
										
										
										
											2018-08-16 15:01:43 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | set(partition_csv "${PARTITION_CSV_PATH}")
 | 
					
						
							| 
									
										
										
										
											2018-01-18 12:12:13 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-25 01:21:41 +05:30
										 |  |  | if(CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES AND CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME)
 | 
					
						
							| 
									
										
										
										
											2018-02-27 15:45:30 +11: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-18 12:12:13 +11:00
										 |  |  | else()
 | 
					
						
							| 
									
										
										
										
											2018-02-27 15:45:30 +11:00
										 |  |  |     set(unsigned_partition_bin "partition-table.bin")
 | 
					
						
							|  |  |  |     set(final_partition_bin "partition-table.bin")
 | 
					
						
							|  |  |  |     set(final_partition_target "build_partition_table")
 | 
					
						
							| 
									
										
										
										
											2018-01-18 12:12:13 +11:00
										 |  |  | endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-28 15:16:52 +08:00
										 |  |  | if(NOT CONFIG_PARTITION_TABLE_MD5)
 | 
					
						
							| 
									
										
										
										
											2018-01-19 15:47:49 +11:00
										 |  |  |     set(md5_opt --disable-md5sum)
 | 
					
						
							|  |  |  | endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if(CONFIG_ESPTOOLPY_FLASHSIZE)
 | 
					
						
							|  |  |  |     set(flashsize_opt --flash-size ${CONFIG_ESPTOOLPY_FLASHSIZE})
 | 
					
						
							|  |  |  | endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-25 01:21:41 +05:30
										 |  |  | if(CONFIG_SECURE_BOOT AND NOT CONFIG_SECURE_BOOT_ALLOW_SHORT_APP_PARTITION)
 | 
					
						
							| 
									
										
										
										
											2023-02-01 14:31:42 +05:30
										 |  |  |     if(CONFIG_SECURE_BOOT_V2_ENABLED)
 | 
					
						
							|  |  |  |         set(partition_secure_opt --secure v2)
 | 
					
						
							|  |  |  |     else()
 | 
					
						
							|  |  |  |         set(partition_secure_opt --secure v1)
 | 
					
						
							|  |  |  |     endif()
 | 
					
						
							| 
									
										
										
										
											2018-10-20 00:32:55 +05:30
										 |  |  | else()
 | 
					
						
							|  |  |  |     set(partition_secure_opt "")
 | 
					
						
							|  |  |  | endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-21 16:19:26 +05:30
										 |  |  | 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-10 10:53:08 +08:00
										 |  |  | idf_build_get_property(build_dir BUILD_DIR)
 | 
					
						
							|  |  |  | idf_build_get_property(python PYTHON)
 | 
					
						
							| 
									
										
										
										
											2022-06-21 16:19:26 +05:30
										 |  |  | idf_build_get_property(extra_subtypes EXTRA_PARTITION_SUBTYPES)
 | 
					
						
							| 
									
										
										
										
											2019-05-10 10:53:08 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-18 08: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 16:19:26 +05:30
										 |  |  |                         "${partition_secure_opt}" ${extra_partition_subtypes} "--")
 | 
					
						
							| 
									
										
										
										
											2020-02-18 08:22:43 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-08 11:37:02 +08: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-10 10:53:08 +08:00
										 |  |  | add_custom_command(OUTPUT "${build_dir}/partition_table/${unsigned_partition_bin}" | 
					
						
							| 
									
										
										
										
											2020-02-18 08:22:43 +05:00
										 |  |  |     COMMAND ${gen_partition_table} "${partition_csv}" "${build_dir}/partition_table/${unsigned_partition_bin}"
 | 
					
						
							| 
									
										
										
										
											2020-04-08 11:37:02 +08:00
										 |  |  |     ${partition_table_display}
 | 
					
						
							| 
									
										
										
										
											2018-01-19 15:47:49 +11:00
										 |  |  |     DEPENDS ${partition_csv} "${CMAKE_CURRENT_SOURCE_DIR}/gen_esp32part.py"
 | 
					
						
							|  |  |  |     VERBATIM)
 | 
					
						
							| 
									
										
										
										
											2018-01-18 12:12:13 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-21 16:19:26 +05:30
										 |  |  | 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-08 11:37:02 +08:00
										 |  |  | add_custom_target(partition_table_bin DEPENDS "${build_dir}/partition_table/${unsigned_partition_bin}" | 
					
						
							| 
									
										
										
										
											2022-06-21 16:19:26 +05:30
										 |  |  |                                               "${build_dir}/partition_table/${final_partition_bin}"
 | 
					
						
							|  |  |  |                                               )
 | 
					
						
							| 
									
										
										
										
											2020-04-08 11:37:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-27 11:55:04 +08:00
										 |  |  | if(EXISTS ${partition_csv})
 | 
					
						
							| 
									
										
										
										
											2021-08-11 15:24:17 +02:00
										 |  |  |     add_custom_target(partition-table | 
					
						
							| 
									
										
										
										
											2020-04-08 11:37:02 +08:00
										 |  |  |                         DEPENDS partition_table_bin
 | 
					
						
							|  |  |  |                         ${partition_table_display}
 | 
					
						
							| 
									
										
										
										
											2020-02-18 08:22:43 +05:00
										 |  |  |                         VERBATIM)
 | 
					
						
							| 
									
										
										
										
											2021-08-11 15:24:17 +02:00
										 |  |  |     add_deprecated_target_alias(partition_table partition-table)
 | 
					
						
							| 
									
										
										
										
											2018-08-27 11:55:04 +08:00
										 |  |  | else()
 | 
					
						
							| 
									
										
										
										
											2018-10-20 00:32:55 +05:30
										 |  |  |     # 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-27 11:55:04 +08:00
										 |  |  |     # (to pick up a new CSV if one exists, etc.)
 | 
					
						
							| 
									
										
										
										
											2021-08-11 15:24:17 +02:00
										 |  |  |     fail_at_build_time(partition-table | 
					
						
							| 
									
										
										
										
											2018-10-20 00:32:55 +05:30
										 |  |  |         "Partition table CSV ${partition_csv} does not exist."
 | 
					
						
							|  |  |  |         "Either change partition table in menuconfig or create this input file.")
 | 
					
						
							|  |  |  | endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-10 17:47:20 +01: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 15:25:25 +08:00
										 |  |  | # Add signing steps
 | 
					
						
							| 
									
										
										
										
											2020-02-25 01:21:41 +05:30
										 |  |  | if(CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME)
 | 
					
						
							| 
									
										
										
										
											2019-05-10 15:25:25 +08: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-25 01:21:41 +05:30
										 |  |  |             COMMAND ${ESPSECUREPY} sign_data --version 1 --keyfile "${SECURE_BOOT_SIGNING_KEY}"
 | 
					
						
							| 
									
										
										
										
											2019-05-10 15:25:25 +08: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 15:24:17 +02:00
										 |  |  |         add_custom_command(TARGET partition-table POST_BUILD | 
					
						
							| 
									
										
										
										
											2019-05-10 15:25:25 +08:00
										 |  |  |             COMMAND ${CMAKE_COMMAND} -E echo
 | 
					
						
							|  |  |  |                 "Partition table built but not signed. Sign partition data before flashing:"
 | 
					
						
							| 
									
										
										
										
											2020-02-18 08:22:43 +05:00
										 |  |  |             COMMAND ${CMAKE_COMMAND} -E echo
 | 
					
						
							| 
									
										
										
										
											2019-05-10 15:25:25 +08:00
										 |  |  |                 "\t${espsecurepy} sign_data --keyfile KEYFILE ${build_dir}/partition_table/${final_partition_bin}"
 | 
					
						
							|  |  |  |             VERBATIM)
 | 
					
						
							|  |  |  |     endif()
 | 
					
						
							| 
									
										
										
										
											2022-03-10 10:53:15 +05:30
										 |  |  | elseif(CONFIG_SECURE_SIGNED_APPS_RSA_SCHEME OR CONFIG_SECURE_SIGNED_APPS_ECDSA_V2_SCHEME)
 | 
					
						
							| 
									
										
										
										
											2021-08-11 15:24:17 +02:00
										 |  |  |     add_custom_command(TARGET partition-table POST_BUILD | 
					
						
							| 
									
										
										
										
											2020-02-25 01:21:41 +05:30
										 |  |  |     COMMAND ${CMAKE_COMMAND} -E echo "Partition table built:"
 | 
					
						
							|  |  |  |     VERBATIM)
 | 
					
						
							| 
									
										
										
										
											2018-08-27 11:55:04 +08:00
										 |  |  | endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-20 09:55:02 +08:00
										 |  |  | idf_component_get_property(main_args esptool_py FLASH_ARGS)
 | 
					
						
							|  |  |  | idf_component_get_property(sub_args esptool_py FLASH_SUB_ARGS)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-30 18:03:59 +08:00
										 |  |  | if(CONFIG_APP_BUILD_GENERATE_BINARIES AND CONFIG_APP_BUILD_TYPE_APP_2NDBOOT)
 | 
					
						
							| 
									
										
										
										
											2021-08-11 15:24:17 +02: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 18:39:30 +02:00
										 |  |  |                                         "${build_dir}/partition_table/${final_partition_bin}")
 | 
					
						
							| 
									
										
										
										
											2021-08-11 15:24:17 +02:00
										 |  |  |     esptool_py_flash_target_image(flash partition-table "${PARTITION_TABLE_OFFSET}" | 
					
						
							| 
									
										
										
										
											2020-05-31 18:39:30 +02:00
										 |  |  |                                         "${build_dir}/partition_table/${final_partition_bin}")
 | 
					
						
							| 
									
										
										
										
											2021-08-11 15:24:17 +02:00
										 |  |  |     add_deprecated_target_alias(partition_table-flash partition-table-flash)
 | 
					
						
							| 
									
										
										
										
											2020-05-04 19:11:00 +02:00
										 |  |  | endif()
 |