summaryrefslogtreecommitdiffstats
path: root/functions.cmake
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2020-06-30 14:31:42 +0200
committerTor Egge <Tor.Egge@broadpark.no>2020-07-06 14:25:50 +0200
commitf2da08b259c5cf1ec50582fe8d6121222bb8d109 (patch)
tree3b7d5666c338ca3e13f21bfd882890fac5a4b5bf /functions.cmake
parent50212269c2a455ab603531da113800b82196c988 (diff)
Create module source dependencies.
Diffstat (limited to 'functions.cmake')
-rw-r--r--functions.cmake33
1 files changed, 32 insertions, 1 deletions
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 $<TARGET_PROPERTY:${OTHER_TARGET},INTERFACE_INCLUDE_DIRECTORIES>)
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)