From f2da08b259c5cf1ec50582fe8d6121222bb8d109 Mon Sep 17 00:00:00 2001 From: Tor Egge Date: Tue, 30 Jun 2020 14:31:42 +0200 Subject: Create module source dependencies. --- CMakeLists.txt | 6 ++++++ functions.cmake | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e1e3219a5d9..2c20531dc97 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -166,3 +166,9 @@ __create_module_targets(TEST_TARGETS "test") # Create module targets with name ${MODULE}+source depending on every source target defined within that module __create_module_targets(SOURCE_TARGETS "source") + +# Create module targets with name ${MODULE}+object depending on every object target defined within that module +__create_module_targets(OBJECT_TARGETS "object") + +# Create module source dependencies +__create_module_source_dependencies() diff --git a/functions.cmake b/functions.cmake index 162cb6852b0..4f00da11117 100644 --- a/functions.cmake +++ b/functions.cmake @@ -17,9 +17,9 @@ endfunction() function(vespa_add_target_dependency TARGET OTHER_TARGET) get_target_property(TARGET_TYPE ${TARGET} TYPE) + set_property(GLOBAL APPEND PROPERTY TARGET_${OTHER_TARGET}_MODULE_DEPENDENTS ${MODULE_NAME}) # (Weak) dependency between object library and other target if(TARGET_TYPE STREQUAL OBJECT_LIBRARY) - add_dependencies(${TARGET} ${OTHER_TARGET}) target_include_directories(${TARGET} PRIVATE $) return() endif() @@ -183,6 +183,7 @@ function(vespa_add_library TARGET) if(ARG_OBJECT) set(LIBRARY_TYPE OBJECT) + __add_object_target_to_module(${TARGET}) elseif(ARG_STATIC) set(LINKAGE STATIC) elseif(ARG_INTERFACE) @@ -515,6 +516,10 @@ function(__add_source_target_to_module TARGET) set_property(GLOBAL APPEND PROPERTY MODULE_${MODULE_NAME}_SOURCE_TARGETS ${TARGET}) endfunction() +function(__add_object_target_to_module TARGET) + set_property(GLOBAL APPEND PROPERTY MODULE_${MODULE_NAME}_OBJECT_TARGETS ${TARGET}) +endfunction() + macro(__handle_test_targets) # If this is a test executable, add it to the test target for this module # If building of unit tests is not specified, exclude this target from the all target @@ -545,6 +550,32 @@ function(__create_module_targets PROPERTY_POSTFIX TARGET_POSTFIX) endforeach() endfunction() +function(__create_module_source_dependencies) + get_property(VESPA_MODULES GLOBAL PROPERTY VESPA_MODULES) + foreach(MODULE IN LISTS VESPA_MODULES) + get_property(TARGETS GLOBAL PROPERTY MODULE_${MODULE}_TARGETS) + get_property(TEST_TARGETS GLOBAL PROPERTY MODULE_${MODULE}_TEST_TARGETS) + list(APPEND TARGETS ${TEST_TARGETS}) + if(TARGETS) + list(REMOVE_DUPLICATES TARGETS) + set(SOURCE_TARGET "${MODULE}+source") + + unset(MODULE_DEPENDENTS) + foreach(TARGET IN LISTS TARGETS) + get_property(TARGET_MODULE_DEPENDENTS GLOBAL PROPERTY TARGET_${TARGET}_MODULE_DEPENDENTS) + list(APPEND MODULE_DEPENDENTS ${TARGET_MODULE_DEPENDENTS}) + add_dependencies(${TARGET} ${SOURCE_TARGET}) + endforeach() + if (MODULE_DEPENDENTS) + list(REMOVE_DUPLICATES MODULE_DEPENDENTS) + foreach(MODULE_DEPENDENT IN LISTS MODULE_DEPENDENTS) + add_dependencies(${MODULE_DEPENDENT}+source ${SOURCE_TARGET}) + endforeach() + endif() + endif() + endforeach() +endfunction() + function(__export_include_directories TARGET) get_directory_property(LOCAL_INCLUDE_DIRS INCLUDE_DIRECTORIES) get_target_property(TARGET_TYPE ${TARGET} TYPE) -- cgit v1.2.3