mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 03:00:34 +03:00
feat(cmakev2/utilities): add __get_executable_library_or_die helper
Search for the library interface target created with the idf_build_library() function and linked to the executable, examine the LINK_LIBRARIES for the executable and the LIBRARY_INTERFACES build property, which stores all library interface targets created by the idf_build_library() function. This helper is intended for use by functions, such as the idf_build_generate_metadata() function, which accepts the executable target as an argument to find the library linked to it. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
This commit is contained in:
@@ -763,3 +763,52 @@ function(__get_target_dependencies)
|
|||||||
|
|
||||||
set(${ARG_OUTPUT} ${targets_list} PARENT_SCOPE)
|
set(${ARG_OUTPUT} ${targets_list} PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
#[[
|
||||||
|
__get_executable_library_or_die(TARGET <executable>
|
||||||
|
OUTPUT <library>)
|
||||||
|
|
||||||
|
:TARGET[in]: Executable target.
|
||||||
|
:OUTPUT[out]: Output variable to store the library interface target linked
|
||||||
|
to the executable.
|
||||||
|
|
||||||
|
Search for the library interface target created with the idf_build_library()
|
||||||
|
function and linked to the executable, examine the LINK_LIBRARIES for the
|
||||||
|
executable and the LIBRARY_INTERFACES build property, which stores all
|
||||||
|
library interface targets created by the idf_build_library() function.
|
||||||
|
#]]
|
||||||
|
function(__get_executable_library_or_die)
|
||||||
|
set(options)
|
||||||
|
set(one_value TARGET OUTPUT)
|
||||||
|
set(multi_value)
|
||||||
|
cmake_parse_arguments(ARG "${options}" "${one_value}" "${multi_value}" ${ARGN})
|
||||||
|
|
||||||
|
if(NOT DEFINED ARG_TARGET)
|
||||||
|
idf_die("TARGET option is required")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT DEFINED ARG_OUTPUT)
|
||||||
|
idf_die("OUTPUT option is required")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
get_target_property(type "${ARG_TARGET}" TYPE)
|
||||||
|
if(NOT type STREQUAL "EXECUTABLE")
|
||||||
|
idf_die("The type of target '${ARG_TARGET}' is '${type}', "
|
||||||
|
"but an 'EXECUTABLE' target type is expected.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(library NOTFOUND)
|
||||||
|
get_target_property(targets "${ARG_TARGET}" LINK_LIBRARIES)
|
||||||
|
idf_build_get_property(libraries LIBRARY_INTERFACES)
|
||||||
|
foreach(target IN LISTS targets)
|
||||||
|
if("${target}" IN_LIST libraries)
|
||||||
|
set(library "${target}")
|
||||||
|
break()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
if("${library}" STREQUAL "NOTFOUND")
|
||||||
|
idf_die("No library interface target linked to the '${ARG_TARGET}' executable")
|
||||||
|
endif()
|
||||||
|
set(${ARG_OUTPUT} "${library}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|||||||
Reference in New Issue
Block a user