Skip to content
Snippets Groups Projects
Commit d05ed0ce authored by Riccardo Maria Bianchi's avatar Riccardo Maria Bianchi :sunny:
Browse files

Add a target to CMake to generate graphs of dependencies

parent d1c5cd57
No related branches found
No related tags found
No related merge requests found
......@@ -24,6 +24,7 @@ include( PrintBuildInfo )
# Set default build and C++ options
include( configure_cpp_options )
# === Externally provided content ===
# By default prefer not to use frameworks on macOS.
......@@ -48,6 +49,7 @@ find_package( SQLite3 3.7.17 )
# switches to let users build specific packages on request
option(GEOMODEL_BUILD_ALL "Enable the build of all GeoModel sub-packages" OFF)
option(GEOMODEL_BUILD_IO "Enable the build of GeoModelIO" ON)
option(GEOMODEL_BUILD_TOOLS "Enable the build of GeoModelTools" OFF)
option(GEOMODEL_BUILD_EXAMPLES "Enable the build of GeoModelExamples" OFF)
option(GEOMODEL_BUILD_EXAMPLES_W_GEANT4 "Enable the build of GeoModelExamples, including the ones concerning the interface GeoModel->Geant4" OFF)
......@@ -56,43 +58,52 @@ option(GEOMODEL_BUILD_GEOMODELG4 "Enable the build of GeoModelG4" OFF)
option(GEOMODEL_BUILD_FULLSIMLIGHT "Enable the build of FullSimLight" OFF)
option(GEOMODEL_BUILD_FULLSIMLIGHT_PROFILING "Enable FullSimLight profiling targets" OFF)
# switches for miscellaneous options
option(GEOMODEL_CREATE_GRAPH "Enable the build of the GeoModel dependencies graph" OFF)
# === Set the build of the sub-packages ===
# a list to keep track of the packages we build
set(BUILT_PACKAGES "")
if(GEOMODEL_BUILD_FULLSIMLIGHT_PROFILING)
set(GEOMODEL_BUILD_FULLSIMLIGHT ON CACHE BOOL "Enable the build of FullSimLight" FORCE)
include(CTest) # needs to be included at the top level
endif()
# a list to keep track of the packages we build
set(BUILT_PACKAGES "")
# GeoModelCore is built by default
add_subdirectory(GeoModelCore)
list( APPEND BUILT_PACKAGES "GeoModelCore")
add_subdirectory(GeoModelIO)
list( APPEND BUILT_PACKAGES "GeoModelIO")
if(GEOMODEL_BUILD_ALL)
set(GEOMODEL_BUILD_IO TRUE)
set(GEOMODEL_BUILD_TOOLS TRUE)
set(GEOMODEL_BUILD_VISUALIZATION TRUE)
set(GEOMODEL_BUILD_FULLSIMLIGHT TRUE)
endif()
if(GEOMODEL_BUILD_TOOLS)
set(GEOMODEL_BUILD_IO TRUE)
add_subdirectory(GeoModelTools)
list( APPEND BUILT_PACKAGES "GeoModelTools")
endif()
if(GEOMODEL_BUILD_VISUALIZATION)
set(GEOMODEL_BUILD_IO TRUE)
add_subdirectory(GeoModelVisualization)
list( APPEND BUILT_PACKAGES "GeoModelVisualization")
endif()
if(GEOMODEL_BUILD_EXAMPLES)
set(GEOMODEL_BUILD_IO TRUE)
add_subdirectory(GeoModelExamples)
list( APPEND BUILT_PACKAGES "GeoModelExamples")
endif()
if(GEOMODEL_BUILD_FULLSIMLIGHT)
set(GEOMODEL_BUILD_GEOMODELG4 TRUE) # FullSimLight needs GeoModelG4
set(GEOMODEL_BUILD_IO TRUE)
set(GEOMODEL_BUILD_GEOMODELG4 TRUE) # FullSimLight needs GeoModelG4
add_subdirectory(FullSimLight)
list( APPEND BUILT_PACKAGES "FullSimLight")
endif()
......@@ -102,6 +113,12 @@ if(GEOMODEL_BUILD_GEOMODELG4 OR GEOMODEL_BUILD_EXAMPLES_W_GEANT4)
list( APPEND BUILT_PACKAGES "GeoModelG4")
endif()
if(GEOMODEL_BUILD_IO)
add_subdirectory(GeoModelIO)
list( APPEND BUILT_PACKAGES "GeoModelIO")
endif()
# A function to get a string with comma-separated package names from a list of packages
# NOTE: We could make use of list(JOIN ...) on CMake >= 3.12,
......@@ -127,3 +144,34 @@ getCSVStringFromList( "${BUILT_PACKAGES}" BUILT_PACKAGES_STR )
message(STATUS "${BoldWhite}-----${ColourReset}")
message( STATUS "${BoldGreen}Building the following ${BUILT_PACKAGES_LENGTH} packages: ${BUILT_PACKAGES_STR}${ColourReset}")
message(STATUS "${BoldWhite}-----${ColourReset}")
# generate the graph of dependencies, if requested
# This is a two-step process:
# 1) add the option '-DGEOMODEL_CREATE_GRAPH=1' to the cmake call
# 2) run 'make graphs' to actually generate the .dot, .png, and .pdf files
if(GEOMODEL_CREATE_GRAPH)
#set_property(GLOBAL PROPERTY GLOBAL_DEPENDS_DEBUG_MODE 1)
# only dependencies between libraries
set(GRAPHVIZ_EXECUTABLES FALSE CACHE BOOL "" FORCE)
set(GRAPHVIZ_STATIC_LIBS FALSE CACHE BOOL "" FORCE)
set(GRAPHVIZ_SHARED_LIBS FALSE CACHE BOOL "" FORCE)
set(GRAPHVIZ_MODULE_LIBS FALSE CACHE BOOL "" FORCE)
set(GRAPHVIZ_INTERFACE_LIBS FALSE CACHE BOOL "" FORCE)
set(GRAPHVIZ_OBJECT_LIBS FALSE CACHE BOOL "" FORCE)
set(GRAPHVIZ_UNKWON_LIBS FALSE CACHE BOOL "" FORCE)
# do not show externals
set(GRAPHVIZ_EXTERNAL_LIBS FALSE CACHE BOOL "" FORCE)
set(GRAPHVIZ_CUSTOM_TARGETS FALSE CACHE BOOL "" FORCE)
add_custom_target(graphs ALL
COMMAND ${CMAKE_COMMAND} "--graphviz=geomodel_dependencies.dot" .
COMMAND dot -T png geomodel_dependencies.dot -o geomodel_dependencies.png
COMMAND dot -T pdf geomodel_dependencies.dot -o geomodel_dependencies.pdf
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
COMMENT "Generating the graphviz .dot file, and the output .png and .pdf files"
)
endif()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment