Skip to content
Snippets Groups Projects
Commit 5ef1f877 authored by Benjamin Morgan's avatar Benjamin Morgan
Browse files

Import patches for building single Geant4 library

parent 2d174b7a
No related branches found
No related tags found
No related merge requests found
......@@ -340,15 +340,20 @@ endif()
# both types. If neither is selected, an error is emitted.
#
option(BUILD_SHARED_LIBS "Build Geant4 shared libraries" ON)
option(BUILD_SHARED_SINGLE_LIB "Build Geant4 into a single dynamic library" OFF) #CM
option(BUILD_STATIC_LIBS "Build Geant4 static libraries" OFF)
mark_as_advanced(BUILD_SHARED_LIBS BUILD_STATIC_LIBS)
mark_as_advanced(BUILD_SHARED_LIBS BUILD_SHARED_SINGLE_LIB BUILD_STATIC_LIBS) #CM
# Because both could be switched off accidently, FATAL_ERROR if neither
# option has been selected.
if(NOT BUILD_STATIC_LIBS AND NOT BUILD_SHARED_LIBS)
if(NOT BUILD_STATIC_LIBS AND NOT BUILD_SHARED_LIBS AND NOT BUILD_SHARED_SINGLE_LIB) #CM
message(FATAL_ERROR "Neither static nor shared libraries will be built")
endif()
if(BUILD_SHARED_SINGLE_LIB) #CM
set(BUILD_SHARED_LIBS ON)
endif()
# Always build global libraries - always FATAL_ERROR if old
# granular library switch is set, e.g. from command line
if(GEANT4_BUILD_GRANULAR_LIBS)
......
......
......@@ -88,6 +88,8 @@ if(GEANT4_USE_PYTHON)
add_subdirectory(environments/g4py)
endif()
include(G4SingleLibrary)
#-----------------------------------------------------------------------
# - Perform all post build tasks
# At the CMake level, this simply means that we must know about targets
......
......
......@@ -230,10 +230,18 @@ macro(geant4_library_target)
"NAME" "SOURCES;GEANT4_LINK_LIBRARIES;LINK_LIBRARIES"
${ARGN}
)
if(BUILD_SHARED_SINGLE_LIB AND BUILD_SHARED_LIBS)
set_property(GLOBAL APPEND PROPERTY ALL_LIBS_NAME "${G4LIBTARGET_NAME}")
set_property(GLOBAL APPEND PROPERTY ALL_LIBS_OBJ "$<TARGET_OBJECTS:${G4LIBTARGET_NAME}>")
set_property(GLOBAL APPEND PROPERTY ALL_LIBS_GEANT4_LINK_LIBRARIES "${G4LIBTARGET_GEANT4_LINK_LIBRARIES} ")
set_property(GLOBAL APPEND PROPERTY ALL_LIBS_LINK_LIBRARIES "${G4LIBTARGET_LINK_LIBRARIES} ")
add_library(${G4LIBTARGET_NAME} OBJECT ${G4LIBTARGET_SOURCES})
#target_compile_definitions(${G4LIBTARGET_NAME} PUBLIC ${G4LIBTARGET_NAME})
endif()
geant4_format_target(NAME ${G4LIBTARGET_NAME}-format SOURCES ${G4LIBTARGET_SOURCES})
if(BUILD_SHARED_LIBS)
if(BUILD_SHARED_LIBS AND NOT BUILD_SHARED_SINGLE_LIB)
# Add the shared library target and link its dependencies
# - Common shared lib commands
add_library(${G4LIBTARGET_NAME} SHARED ${G4LIBTARGET_SOURCES})
......
......
# - Include guard
if(NOT __G4SINGLE_LIBRARY_INCLUDED)
set(__G4SINGLE_LIBRARY_INCLUDED 1)
else()
return()
endif()
if (BUILD_SHARED_SINGLE_LIB)
message(STATUS "===========================================================================")
message(STATUS "Starting SingleLibrary section")
get_property(__geant4_all_libs_name GLOBAL PROPERTY ALL_LIBS_NAME)
get_property(__geant4_all_libs_obj GLOBAL PROPERTY ALL_LIBS_OBJ)
get_property(__geant4_all_libs_g4_link_libs GLOBAL PROPERTY ALL_LIBS_GEANT4_LINK_LIBRARIES)
get_property(__geant4_all_libs_link_libs GLOBAL PROPERTY ALL_LIBS_LINK_LIBRARIES)
message(STATUS ${__geant4_all_libs_obj})
add_library(single_dynamic SHARED ${__geant4_all_libs_obj})
geant4_compile_definitions_config(single_dynamic)
target_compile_features(single_dynamic PUBLIC ${GEANT4_TARGET_COMPILE_FEATURES})
# target_link_libraries(single_dynamic PUBLIC ${__geant4_all_libs_name})
# target_link_libraries(single_dynamic ${__geant4_all_libs_link_libs})
# ${__geant4_all_libs_g4_link_libs}
# ${__geant4_all_libs_link_libs})
message(STATUS "===========================================================================")
message(STATUS ${__geant4_all_libs_link_libs})
message(STATUS "===========================================================================")
message(STATUS ${__geant4_all_libs_g4_link_libs})
target_link_libraries(single_dynamic /usr/lib64/libfreetype.so
/data/cmarcon/Libraries/libexpat/install/lib64/libexpat.so
/usr/lib64/libXm.so
/usr/lib64/libSM.so
/usr/lib64/libICE.so
/usr/lib64/libX11.so
/usr/lib64/libXext.so
/usr/lib64/libXt.so
/usr/lib64/libXmu.so
/data/cmarcon/Libraries/libxerces/install/lib/libxerces-c.so
/usr/lib64/libGL.so
/usr/lib64/libGLU.so)
target_compile_definitions(single_dynamic PUBLIC G4LIB_BUILD_DLL)
set_target_properties(single_dynamic PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
set_target_properties(single_dynamic PROPERTIES CLEAN_DIRECT_OUTPUT 1)
set_target_properties(single_dynamic PROPERTIES MACOSX_RPATH 1)
install(TARGETS single_dynamic
EXPORT Geant4LibraryDepends
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT Runtime
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Runtime
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Development)
set_property(GLOBAL APPEND PROPERTY GEANT4_EXPORTED_TARGETS single_dynamic)
set_property(TARGET single_dynamic PROPERTY POSITION_INDEPENDENT_CODE ON)
message(STATUS "End of SingleLibrary section")
message(STATUS "===========================================================================")
endif()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment