From aa0c8f93831868de9ba2d756ee3e9d2f1c022731 Mon Sep 17 00:00:00 2001 From: Frantisek Hrbata Date: Tue, 19 Aug 2025 12:03:18 +0200 Subject: [PATCH] feat(cmakev2/utilities): add fail_target function The fail_target function is used by some existing components, so it should be added to cmakev2 as well. Signed-off-by: Frantisek Hrbata --- tools/cmakev2/utilities.cmake | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tools/cmakev2/utilities.cmake b/tools/cmakev2/utilities.cmake index 6c5e65fb047..2d4688ae8f1 100644 --- a/tools/cmakev2/utilities.cmake +++ b/tools/cmakev2/utilities.cmake @@ -535,3 +535,31 @@ function(add_prefix var prefix) endforeach() set(${var} "${newlist}" PARENT_SCOPE) endfunction() + +#[[ + fail_target( [...]) + + :target[in]: Fail target name. + :line0[in]: First line of the failed message. + :line[in,opt]: Optional additional message lines. + + Create a phony target which fails when invoked. This is used when the + necessary conditions for a target are not met, such as configuration. Rather + than omitting the target altogether, we fail execution with a helpful + message. +#]] +function(fail_target target_name message_line0) + idf_build_get_property(idf_path IDF_PATH) + set(message_lines COMMAND ${CMAKE_COMMAND} -E echo "${message_line0}") + foreach(message_line ${ARGN}) + set(message_lines ${message_lines} COMMAND ${CMAKE_COMMAND} -E echo "${message_line}") + endforeach() + # Generate a timestamp file that gets included. When deleted on build, this forces CMake + # to rerun. + set(fail_message "Failed executing target (see errors on lines above)") + add_custom_target(${target_name} + ${message_lines} + COMMAND ${CMAKE_COMMAND} -E env FAIL_MESSAGE=${fail_message} + ${CMAKE_COMMAND} -P ${idf_path}/tools/cmake/scripts/fail.cmake + VERBATIM) +endfunction()