mirror of
https://github.com/espressif/esp-idf.git
synced 2026-09-22 13:01:16 +03:00
feat(cmakev2/utilities): add fail_at_build_time helper
Create a phony target that intentionally fails the build, displaying the error messages specified in the message arguments. An empty CMake file is created and included, which is then deleted when the target is executed. This forces CMake to rerun, as the file is added to the CMake rerun dependencies. This has been carried over from cmakev1 as it is used by several components. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
This commit is contained in:
@@ -841,3 +841,36 @@ function(__make_json_list input)
|
||||
endif()
|
||||
set("${ARG_OUTPUT}" "${result}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
#[[
|
||||
fail_at_build_time(<target> <message>...)
|
||||
|
||||
:target[in]: Target name to create and add to ALL.
|
||||
:message[in]: Error message to display. Multiple messages may be provided.
|
||||
|
||||
Create a phony target that intentionally fails the build, displaying the
|
||||
error messages specified in the message arguments. An empty CMake file is
|
||||
created and included, which is then deleted when the target is executed.
|
||||
This forces CMake to rerun, as the file is added to the CMake rerun
|
||||
dependencies.
|
||||
#]]
|
||||
function(fail_at_build_time 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.
|
||||
string(RANDOM filename)
|
||||
set(filename "${CMAKE_CURRENT_BINARY_DIR}/${filename}.cmake")
|
||||
file(WRITE "${filename}" "")
|
||||
include("${filename}")
|
||||
set(fail_message "Failing the build (see errors on lines above)")
|
||||
add_custom_target(${target_name} ALL
|
||||
${message_lines}
|
||||
COMMAND ${CMAKE_COMMAND} -E remove "${filename}"
|
||||
COMMAND ${CMAKE_COMMAND} -E env FAIL_MESSAGE=${fail_message}
|
||||
${CMAKE_COMMAND} -P ${idf_path}/tools/cmake/scripts/fail.cmake
|
||||
VERBATIM)
|
||||
endfunction()
|
||||
|
||||
Reference in New Issue
Block a user