Skip to content
Snippets Groups Projects
Commit 8d787f44 authored by Andre Sailer's avatar Andre Sailer
Browse files

Cmake: better creation of imported targets for Geant4 and Root

parent 2559c064
No related branches found
No related tags found
No related merge requests found
......@@ -92,33 +92,56 @@ find_package(ROOT 6.08 REQUIRED) # COMPONENTS Geom GenVector Eve Gui Graf3d RGL
#include(${ROOT_USE_FILE})
ADD_LIBRARY(ROOT::Base SHARED IMPORTED GLOBAL)
ADD_LIBRARY(ROOT::Interface INTERFACE IMPORTED GLOBAL)
#ROOT CXX Flags are a string with quotes, not a list, so we need to convert to a list...
string(REPLACE " " ";" ROOT_CXX_FLAGS ${ROOT_CXX_FLAGS})
SET_TARGET_PROPERTIES(ROOT::Base
SET_TARGET_PROPERTIES(ROOT::Interface
PROPERTIES
INTERFACE_LINK_LIBRARIES "${ROOT_LIBRARIES}"
INTERFACE_COMPILE_OPTIONS "${ROOT_CXX_FLAGS}"
INTERFACE_INCLUDE_DIRECTORIES ${ROOT_INCLUDE_DIRS}
IMPORTED_LOCATION ${ROOT_LIBRARIES}
)
foreach(LIB Core RIO Net Hist Graf Graf3d Gpad Tree Rint Postscript Matrix Physics MathCore Thread MultiProc)
ADD_LIBRARY(ROOT::${LIB} SHARED IMPORTED GLOBAL)
MESSAGE(STATUS "ROOT lib location ${LIB} ${ROOT_${LIB}_LIBRARY}")
SET_TARGET_PROPERTIES(ROOT::${LIB}
PROPERTIES
INTERFACE_COMPILE_OPTIONS "${ROOT_CXX_FLAGS}"
INTERFACE_INCLUDE_DIRECTORIES ${ROOT_INCLUDE_DIRS}
IMPORTED_LOCATION ${ROOT_${LIB}_LIBRARY}
)
TARGET_LINK_LIBRARIES(ROOT::Interface INTERFACE ROOT::${LIB})
endforeach()
foreach(LIB PyROOT Geom GenVector)
ADD_LIBRARY(ROOT::${LIB} SHARED IMPORTED GLOBAL)
MESSAGE(STATUS "ROOT lib location ${LIB} ${G4_LIB_TEMP_${LIB}}")
SET_TARGET_PROPERTIES(ROOT::${LIB}
PROPERTIES
INTERFACE_COMPILE_OPTIONS "${ROOT_CXX_FLAGS}"
INTERFACE_INCLUDE_DIRECTORIES ${ROOT_INCLUDE_DIRS}
IMPORTED_LOCATION ${ROOT_${LIB}_LIBRARY}
)
endforeach()
MESSAGE(STATUS "ROOT Libraries ${ROOT_LIBRARIES}")
MESSAGE(STATUS "ROOT CXX_FLAGS ${ROOT_CXX_FLAGS}")
MESSAGE(STATUS "ROOT INCL DIRS ${ROOT_INCLUDE_DIRS}")
MESSAGE(STATUS "ROOT_VERSION: ${ROOT_VERSION}" )
GET_PROPERTY(IMP_LOC TARGET ROOT::Core PROPERTY IMPORTED_LOCATION)
MESSAGE(STATUS "ROOT_IMP_LOC: ${IMP_LOC}" )
# Configure BOOST
find_package(Boost 1.49 REQUIRED filesystem system)
###################
# Configure BOOST #
###################
find_package(Boost 1.49 REQUIRED COMPONENTS filesystem system)
SET_TARGET_PROPERTIES(Boost::boost
PROPERTIES
INTERFACE_COMPILE_DEFINITIONS BOOST_SPIRIT_USE_PHOENIX_V3
)
#add_definitions( -DBOOST_SPIRIT_USE_PHOENIX_V3 )
######################
......
......@@ -17,7 +17,6 @@ new_dd4hep_add_dictionary( G__DDCond
)
file(GLOB DDCond_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
MESSAGE(STATUS "DDCond_SOURCES ${DDCond_SOURCES}")
#---DDCond library --------------------------------------------------------------
add_library(DDCond SHARED ${DDCond_SOURCES}
G__DDCond.cxx
......
......@@ -11,10 +11,6 @@
#=================================================================================
SET(PACKAGE DDCore)
# Find again to fill ROOT_LIBRARIES with components
find_package (ROOT 6.08 REQUIRED COMPONENTS Geom GenVector)
MESSAGE(STATUS "ROOT COMPONENTS ${ROOT_LIBRARIES}")
#---Generate ROOT dictionary------------------------------------------------------
new_dd4hep_add_dictionary( G__DD4hep
SOURCES include/ROOT/Warnings.h
......@@ -73,14 +69,12 @@ target_include_directories(DDCore
$<INSTALL_INTERFACE:include>
)
MESSAGE(STATUS "ROOT COMPONENTS ${ROOT_LIBRARIES}")
target_link_libraries(DDCore
PUBLIC
DD4hepGaudiPluginMgr
DDParsers
ROOT::Base
${ROOT_LIBRARIES} # to include the ROOT components
ROOT::Interface
ROOT::Geom ROOT::Geom GenVector
${XML_LIBRARIES} # XercesC or not
)
......@@ -110,7 +104,7 @@ new_dd4hep_add_plugin(DDCorePlugins SOURCES src/plugins/*.cpp
IF(${ROOT_gdml_FOUND})
new_dd4hep_add_plugin(DDGDMLPlugins
SOURCES src/gdml/*.cpp
LINK_LIBRARIES DDCore ROOT::Base
LINK_LIBRARIES DDCore ROOT::Interface
)
ELSE()
MESSAGE(WARN "ROOT does not include GDML, not building DDCore GDML Plugins")
......@@ -118,11 +112,9 @@ ENDIF()
#--------------------------- Specialized PYTHON plugin ----------------------------
IF(ROOT_python_FOUND)
find_package (ROOT 6.08 REQUIRED COMPONENTS PyROOT)
MESSAGE(STATUS "DDpython: ROOT COMPONENTS ${ROOT_LIBRARIES}")
new_dd4hep_add_plugin(DDPythonPlugins
SOURCES src/python/*.cpp
LINK_LIBRARIES DDCore ROOT::Base ${ROOT_LIBRARIES}
LINK_LIBRARIES DDCore ROOT::Interface ROOT::PyROOT
)
ELSE()
MESSAGE(WARN "ROOT does not include PyRoot, not building DDCore DDPython Plugins")
......@@ -134,6 +126,3 @@ ENDIF()
dd4hep_install_files(FILES python/*.py DESTINATION python)
INSTALL(TARGETS DDCore EXPORT DD4hep DESTINATION lib)
#Reset ROOT_LIBRARIES
find_package (ROOT 6.08 REQUIRED)
\ No newline at end of file
......@@ -14,9 +14,7 @@ IF(NOT DD4HEP_USE_GEANT4)
RETURN()
ENDIF()
find_package(Geant4 10.2.2 REQUIRED gdml ui_all vis_all)
find_package(Geant4 10.2.2 REQUIRED COMPONENTS gdml ui_all vis_all)
#include( ${Geant4_USE_FILE} ) # do not use the use file, this is not very considerate...
IF((NOT ${Geant4_TLS_MODEL} STREQUAL "global-dynamic") AND NOT ${DD4HEP_IGNORE_GEANT4_TLS})
......@@ -29,6 +27,63 @@ else()
set(CLHEP CLHEP)
endif()
MESSAGE(STATUS "Geant4 Libraries ${Geant4_LIBRARIES}")
MESSAGE(STATUS "Geant4 CXX_FLAGS ${Geant4_CXX_FLAGS}")
MESSAGE(STATUS "Geant4 INCL DIRS ${Geant4_INCLUDE_DIRS}")
MESSAGE(STATUS "Geant4_VERSION: ${Geant4_VERSION}" )
# Geant4::10.2.2 at least, not in 10.5 (check where it switches)
#Geant4 CXX Flags are a string with quotes, not a list, so we need to convert to a list...
string(REPLACE " " ";" Geant4_Flags ${Geant4_CXX_FLAGS} ${Geant4_CXX_FLAGS_${CMAKE_BUILD_TYPE}})
SET(Geant4_CXX_FLAGS ${Geant4_Flags})
#Geant4_DEFINITIONS already include -D, we jave to get rid of that so we can join things when creating dictionaries
SET(G4_DEF_TEMP "")
foreach(def ${Geant4_DEFINITIONS})
string(REPLACE "-D" "" def ${def})
LIST(APPEND G4_DEF_TEMP ${def})
endforeach()
SET(Geant4_DEFINITIONS ${G4_DEF_TEMP})
UNSET(G4_DEF_TEMP)
#get_filename_component(Geant4_LOCATION ${Geant4_INCLUDE_DIRS} DIRECTORY)
SET(Geant4_LOCATION "/cvmfs/ilc.desy.de/sw/x86_64_gcc49_sl6/geant4/10.03.p02/lib64")
ADD_LIBRARY(Geant4::Interface INTERFACE IMPORTED GLOBAL)
SET_TARGET_PROPERTIES(Geant4::Interface
PROPERTIES
INTERFACE_COMPILE_OPTIONS "${Geant4_CXX_FLAGS}"
INTERFACE_COMPILE_DEFINITIONS "${Geant4_DEFINITIONS}"
INTERFACE_INCLUDE_DIRECTORIES "${Geant4_INCLUDE_DIRS}"
)
IF(CLHEP)
MESSAGE(STATUS "Adding CLHEP to Geant4::Interface Dependencies")
TARGET_LINK_LIBRARIES(Geant4::Interface INTERFACE ${CLHEP})
ENDIF()
foreach(LIB ${Geant4_LIBRARIES})
find_library(G4_LIB_TEMP_${LIB} ${LIB} PATHS ${Geant4_LOCATION})
ADD_LIBRARY(Geant4::${LIB} SHARED IMPORTED GLOBAL)
MESSAGE(STATUS "Geant4 lib location ${LIB} ${G4_LIB_TEMP_${LIB}}")
SET_TARGET_PROPERTIES(Geant4::${LIB}
PROPERTIES
INTERFACE_COMPILE_OPTIONS "${Geant4_CXX_FLAGS}"
INTERFACE_COMPILE_DEFINITIONS "${Geant4_DEFINITIONS}"
INTERFACE_INCLUDE_DIRECTORIES "${Geant4_INCLUDE_DIRS}"
IMPORTED_LOCATION ${G4_LIB_TEMP_${LIB}}
)
TARGET_LINK_LIBRARIES(Geant4::Interface INTERFACE Geant4::${LIB})
endforeach()
MESSAGE(STATUS "Geant4 Libraries ${Geant4_LIBRARIES};${Geant4_COMPONENT_LIBRARIES}")
MESSAGE(STATUS "Geant4 Location ${Geant4_LOCATION}")
MESSAGE(STATUS "Geant4 Defintitions ${Geant4_DEFINITIONS}")
MESSAGE(STATUS "Geant4 CXX_FLAGS ${Geant4_CXX_FLAGS}")
MESSAGE(STATUS "Geant4 INCL DIRS ${Geant4_INCLUDE_DIRS}")
MESSAGE(STATUS "Geant4_VERSION: ${Geant4_VERSION}" )
# dd4hep_package( DDG4
# USES [GEANT4 REQUIRED COMPONENTS gdml ui_all vis_all]
# [ROOT REQUIRED COMPONENTS Geom GenVector RIO]
......@@ -44,44 +99,20 @@ file(GLOB DDG4_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
add_library(DDG4 SHARED ${DDG4_SOURCES})
target_link_libraries(DDG4
PUBLIC
${Geant4_LIBRARIES}
${Geant4_COMPONENT_LIBRARIES}
DDCore
ROOT::Base
#${Geant4_LIBRARIES}
#${Geant4_COMPONENT_LIBRARIES}
ROOT::Interface
Geant4::Interface
)
#Ensure our own includes come before those of the system
target_include_directories(DDG4 BEFORE
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/>
$<INSTALL_INTERFACE:include>
$<TARGET_PROPERTY:DDCore,INTERFACE_INCLUDE_DIRECTORIES>
)
target_include_directories(DDG4 SYSTEM
PUBLIC
${Geant4_INCLUDE_DIRS}
)
#Geant4 CXX Flags are a string with quotes, not a list, so we need to convert to a list...
string(REPLACE " " ";" Geant4_Flags ${Geant4_CXX_FLAGS} ${Geant4_CXX_FLAGS_${CMAKE_BUILD_TYPE}})
# 10.2.2 at least not in 10.5 (check where it switches)
#Geant4_DEFINITIONS already include -D, we jave to get rid of that
SET(G4_DEF_TEMP "")
foreach(def ${Geant4_DEFINITIONS})
string(REPLACE "-D" "" def ${def})
LIST(APPEND G4_DEF_TEMP ${def})
endforeach()
SET(Geant4_DEFINITIONS ${G4_DEF_TEMP})
target_compile_options(DDG4
PUBLIC
${Geant4_Flags}
)
target_compile_definitions(DDG4
PUBLIC
${Geant4_DEFINITIONS}
$<TARGET_PROPERTY:DDCore,INTERFACE_INCLUDE_DIRECTORIES> # FIXME: Check if this works when using imported target
)
#--------------------------- Legacy libraries (for Frank) -------------------------
......@@ -107,7 +138,7 @@ if(PYTHONLIBS_FOUND)
MESSAGE(STATUS "Python found, creating DDG4Python Dictionary")
new_dd4hep_add_dictionary(G__DDG4Python
SOURCES src/python/DDG4Python.C
DEPENDS DDCore DDParsers DDG4 ROOT::Base
DEPENDS DDCore DDParsers DDG4 ROOT::Interface
INCLUDES ${Geant4_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS}
DEFINITIONS ${Geant4_DEFINITIONS}
)
......@@ -116,11 +147,10 @@ if(PYTHONLIBS_FOUND)
INCLUDES ${PYTHON_INCLUDE_DIRS}
)
if(ROOT_python_FOUND)
FIND_PACKAGE(ROOT REQUIRED COMPONENTS PyROOT)
#--------------------------- Specialized python plugins --------------------------
MESSAGE(STATUS "ROOT Has Python, creating DDPython library and plugins")
add_library(DDPython SHARED G__DDPython.cxx tpython/DDPython.cpp)
target_link_libraries(DDPython DDG4 ROOT::Base ${PYTHON_LIBRARIES} ${ROOT_LIBRARIES})
target_link_libraries(DDPython DDG4 ROOT::Interface ${PYTHON_LIBRARIES} ROOT::PyROOT)
target_include_directories(DDPython PUBLIC ${PYTHON_INCLUDE_DIRS})
new_dd4hep_add_plugin(DDG4Python
SOURCES src/python/*.cpp G__DDG4Python.cxx
......@@ -128,7 +158,7 @@ if(PYTHONLIBS_FOUND)
)
#---Helper to overcome deficiency of the python executable concerning multi-threading
add_executable(pyddg4 pyddg4.cpp)
target_link_libraries(pyddg4 PUBLIC DDPython ROOT::Base ${ROOT_LIBRARIES})
target_link_libraries(pyddg4 PUBLIC DDPython ROOT::Interface ROOT::PyROOT)
INSTALL(TARGETS DDPython EXPORT DD4hep DESTINATION lib)
endif()
else()
......@@ -166,6 +196,3 @@ install(PROGRAMS python/DDSim/bin/ddsim DESTINATION bin)
dd4hep_install_dir(python/DDSim DESTINATION python)
INSTALL(TARGETS DDG4 EXPORT DD4hep DESTINATION lib)
#Reset ROOT_LIBRARIES
find_package (ROOT 6.08 REQUIRED)
\ No newline at end of file
......@@ -29,7 +29,7 @@ if(Boost_FOUND)
endif()
add_library(DDParsers SHARED ${DDParsers_SOURCES} ${DDParsers_SPIRIT_SOURCES})
#target_compile_definitions(DDParsers PUBLIC BOOST_SPIRIT_USE_PHOENIX_V3)
target_compile_definitions(DDParsers PUBLIC BOOST_SPIRIT_USE_PHOENIX_V3)
target_include_directories(DDParsers
PUBLIC
......@@ -41,12 +41,11 @@ target_include_directories(DDParsers
SYSTEM
PUBLIC
$<BUILD_INTERFACE:${ROOT_INCLUDE_DIRS}>
$<TARGET_PROPERTY:Boost::boost,INTERFACE_INCLUDE_DIRECTORIES>
)
target_link_libraries(DDParsers PUBLIC
$<BUILD_INTERFACE:Boost::boost>
${XML_LIBRARIES}
# $<BUILD_INTERFACE:${ROOT_LIBRARIES}>
)
INSTALL(TARGETS DDParsers EXPORT DD4hep DESTINATION lib)
\ No newline at end of file
......@@ -1562,10 +1562,8 @@ function( new_dd4hep_add_dictionary dictionary )
LIST(APPEND comp_defs ${def})
endforeach()
MESSAGE(STATUS "DEPENDENCIES ${ARG_DEPENDS}")
foreach(DEP ${ARG_DEPENDS})
# Get INCLUDE DIRECTORIES from Dependencies
MESSAGE(STATUS "Appending $<TARGET_PROPERTY:${DEP},INTERFACE_INCLUDE_DIRECTORIES>")
LIST(APPEND inc_dirs $<TARGET_PROPERTY:${DEP},INTERFACE_INCLUDE_DIRECTORIES>)
# Get COMPILE DEFINITIONS from Dependencies
LIST(APPEND comp_defs $<TARGET_PROPERTY:${DEP},INTERFACE_COMPILE_DEFINITIONS>)
......@@ -1574,12 +1572,12 @@ function( new_dd4hep_add_dictionary dictionary )
#
file ( GLOB linkdefs ${ARG_LINKDEF} )
#
dd4hep_print("|++ Linkdef: '${linkdefs}'" )
dd4hep_print("|++ Definition: '${comp_defs}'" )
dd4hep_print("|++ Include: '${inc_dirs}'" )
dd4hep_print("|++ Files: '${headers}'" )
dd4hep_print("|++ Unparsed: '${ARG_UNPARSED_ARGUMENTS}'" )
dd4hep_print("|++ Sources: '${CMAKE_CURRENT_SOURCE_DIR}'" )
dd4hep_debug("|++ Linkdef: '${linkdefs}'" )
dd4hep_debug("|++ Definition: '${comp_defs}'" )
dd4hep_debug("|++ Include: '${inc_dirs}'" )
dd4hep_debug("|++ Files: '${headers}'" )
dd4hep_debug("|++ Unparsed: '${ARG_UNPARSED_ARGUMENTS}'" )
dd4hep_debug("|++ Sources: '${CMAKE_CURRENT_SOURCE_DIR}'" )
#
set ( output_dir ${CMAKE_CURRENT_BINARY_DIR}/../lib )
if ( NOT "${ARG_OUTPUT}" STREQUAL "" )
......
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