endif()
-add_custom_target(partition_table ALL DEPENDS "${final_partition_bin}")
+if(EXISTS ${partition_csv})
+ add_custom_target(partition_table ALL DEPENDS "${final_partition_bin}")
+else()
+ # This is a bit of a hack: If the partition input CSV is not found, create a phony partition_table target that
+ # fails the build. Have it also touch CMakeCache.txt to cause a cmake run next time
+ # (to pick up a new CSV if one exists, etc.)
+ #
+ # This is because partition CSV is required at CMake runtime (to generate metadata files with flashing data, etc) but we can't
+ # fail the build if it is not found, because the "menuconfig" target may be required to fix the problem. CMAKE_CONFIGURE_DEPENDS
+ # only works for files which exist at CMake runtime.
+ add_custom_target(partition_table ALL
+ COMMAND ${CMAKE_COMMAND} -E echo "Partition table CSV ${partition_csv} does not exist. Either change partition table in menuconfig or create this input file."
+ COMMAND ${CMAKE_COMMAND} -E touch "${CMAKE_BINARY_DIR}/CMakeCache.txt"
+ COMMAND ${CMAKE_COMMAND} -P ${IDF_PATH}/tools/cmake/scripts/fail.cmake)
+endif()
+
+add_dependencies(bootloader partition_table)
+add_dependencies(app partition_table)
# Use global properties ESPTOOL_WRITE_FLASH_ARGS to pass this info to build
# the list of esptool write arguments for flashing
if(NOT EXISTS "${PARTITION_CSV_PATH}")
message(WARNING "Partition table CSV file ${PARTITION_CSV_PATH} not found. "
"Change custom partition CSV path in menuconfig.")
+ # Note: partition_table CMakeLists.txt contains some logic to create a dummy
+ # partition_table target in this case, see comments in that file.
endif()
else()
# Other .csv files are always in the component directory
--- /dev/null
+# 'cmake -E' doesn't have a way to fail outright, so run this script
+# with 'cmake -P' to fail a build.
+message(FATAL_ERROR "Failing the build (see errors on lines above)")
+