diff --git a/CMakeLists.txt b/CMakeLists.txt index 581a83dc5..d8dd022de 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,17 +63,18 @@ find_package(ClangFormat) check_ipo_supported(RESULT SLS_LTO_AVAILABLE) -# Use ld.gold if it is available and isn't disabled explicitly -option(SLS_USE_LD_GOLD "Use GNU gold linker" ON) -if (SLS_USE_LD_GOLD) - execute_process(COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version ERROR_QUIET OUTPUT_VARIABLE LD_VERSION) - if ("${LD_VERSION}" MATCHES "GNU gold") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-ld=gold") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold") - else () - message(WARNING "GNU gold linker isn't available, using the default system linker.") - endif () -endif () +# # Use ld.gold if it is available and isn't disabled explicitly +# option(SLS_USE_LD_GOLD "Use GNU gold linker" ON) +# if (SLS_USE_LD_GOLD) +# execute_process(COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version ERROR_QUIET OUTPUT_VARIABLE LD_VERSION) +# if ("${LD_VERSION}" MATCHES "GNU gold") +# set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") +# set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") +# set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") +# else () +# message(WARNING "GNU gold linker isn't available, using the default system linker.") +# endif () +# endif () set(CMAKE_EXPORT_COMPILE_COMMANDS ON) if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) @@ -240,7 +241,7 @@ if(SLS_MASTER_PROJECT) # Set install dir CMake packages set(CMAKE_INSTALL_DIR "share/cmake/${PROJECT_NAME}") # Set the list of exported targets - set(PROJECT_LIBRARIES slsSupportLib slsDetectorShared slsReceiverShared) + set(PROJECT_LIBRARIES slsSupportShared slsDetectorShared slsReceiverShared) # Generate and install package config file and version include(cmake/package_config.cmake) endif() diff --git a/conda-recepie/meta.yaml b/conda-recepie/meta.yaml index b472b205d..d3bf39d60 100755 --- a/conda-recepie/meta.yaml +++ b/conda-recepie/meta.yaml @@ -33,6 +33,7 @@ requirements: - {{ cdt('libselinux') }} # [linux] - {{ cdt('libxdamage') }} # [linux] - {{ cdt('libxxf86vm') }} # [linux] + - expat host: - libstdcxx-ng @@ -45,6 +46,7 @@ requirements: - xorg-libxau - xorg-libxrender - xorg-libxfixes + - expat run: - zeromq @@ -96,3 +98,4 @@ outputs: - {{ pin_subpackage('slsdetlib', exact=True) }} - qwt 6.* - qt 4.8.* + - expat diff --git a/ctbGui/CMakeLists.txt b/ctbGui/CMakeLists.txt index 1d2e43f56..758d8175d 100644 --- a/ctbGui/CMakeLists.txt +++ b/ctbGui/CMakeLists.txt @@ -59,14 +59,13 @@ set( HEADERS #set(ROOT_INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) # ROOT dictionary generation -include("${ROOT_DIR}/modules/RootNewMacros.cmake") +include("${ROOT_DIR}/RootMacros.cmake") root_generate_dictionary(ctbDict ${HEADERS} LINKDEF ctbLinkDef.h) add_library(ctbRootLib SHARED ctbDict.cxx) target_include_directories(ctbRootLib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(ctbRootLib PUBLIC ROOT::Core slsDetectorShared - slsSupportLib ${ROOT_LIBRARIES} ${ROOT_EXE_LINKER_FLAGS} ) @@ -78,7 +77,6 @@ set_target_properties( target_link_libraries(ctbGui PUBLIC slsDetectorShared - slsSupportLib ctbRootLib ${TIFF_LIBRARIES} ) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 948b44d9c..bb7a6bf3e 100755 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -11,7 +11,7 @@ pybind11_add_module(_slsdet target_link_libraries(_slsdet PUBLIC slsDetectorShared slsReceiverShared - slsSupportLib + slsSupportShared ${ZeroMQ_LIBRARIES} ) diff --git a/sample/CMakeLists.txt b/sample/CMakeLists.txt index dca5fd59b..98ae46d35 100644 --- a/sample/CMakeLists.txt +++ b/sample/CMakeLists.txt @@ -1,6 +1,6 @@ add_executable(using_logger using_logger.cpp) target_link_libraries(using_logger - slsSupportLib + slsSupportShared pthread rt ) @@ -22,7 +22,7 @@ set_target_properties(using_logger PROPERTIES # add_executable(udp udp.cpp) # target_link_libraries(udp # slsDetectorShared -# slsSupportLib +# slsSupportShared # pthread # rt # fmt diff --git a/slsDetectorCalibration/moenchExecutables/CMakeLists.txt b/slsDetectorCalibration/moenchExecutables/CMakeLists.txt index c9f81a3f5..f644f9978 100644 --- a/slsDetectorCalibration/moenchExecutables/CMakeLists.txt +++ b/slsDetectorCalibration/moenchExecutables/CMakeLists.txt @@ -23,7 +23,7 @@ foreach(exe ${MOENCH_EXECUTABLES}) target_link_libraries(${exe} PUBLIC - slsSupportLib + slsSupportShared ${ZeroMQ_LIBRARIES} pthread tiff diff --git a/slsDetectorGui/CMakeLists.txt b/slsDetectorGui/CMakeLists.txt index ac9277a16..d05da8e06 100755 --- a/slsDetectorGui/CMakeLists.txt +++ b/slsDetectorGui/CMakeLists.txt @@ -88,6 +88,7 @@ target_include_directories(slsDetectorGui PUBLIC ) target_link_libraries(slsDetectorGui PUBLIC + slsProjectOptions slsProjectWarnings slsDetectorShared ${QT_QTCORE_LIBRARIES} @@ -97,6 +98,7 @@ target_link_libraries(slsDetectorGui PUBLIC ZLIB::ZLIB Qt4::QtOpenGL Qt4::QtSvg + expat ) set_target_properties(slsDetectorGui PROPERTIES @@ -104,10 +106,10 @@ set_target_properties(slsDetectorGui PROPERTIES ) install(TARGETS slsDetectorGui - # EXPORT "${TARGETS_EXPORT_NAME}" + EXPORT "${TARGETS_EXPORT_NAME}" RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - # LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - # ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) diff --git a/slsDetectorSoftware/CMakeLists.txt b/slsDetectorSoftware/CMakeLists.txt index 264ab07b9..349f5d9d6 100755 --- a/slsDetectorSoftware/CMakeLists.txt +++ b/slsDetectorSoftware/CMakeLists.txt @@ -27,7 +27,7 @@ target_include_directories(slsDetectorShared PUBLIC target_link_libraries(slsDetectorShared PUBLIC - slsSupportLib + slsSupportStatic pthread rt slsProjectOptions diff --git a/slsReceiverSoftware/CMakeLists.txt b/slsReceiverSoftware/CMakeLists.txt index ecc9a262a..577e08dc7 100755 --- a/slsReceiverSoftware/CMakeLists.txt +++ b/slsReceiverSoftware/CMakeLists.txt @@ -34,10 +34,12 @@ if((CMAKE_BUILD_TYPE STREQUAL "Release") AND SLS_LTO_AVAILABLE) set_property(TARGET slsReceiverShared PROPERTY INTERPROCEDURAL_OPTIMIZATION True) endif() -target_link_libraries(slsReceiverShared PUBLIC +target_link_libraries(slsReceiverShared + PUBLIC slsProjectOptions - slsProjectWarnings - slsSupportLib + slsSupportStatic + PRIVATE + slsProjectWarnings #don't propagate warnigns ) target_include_directories(slsReceiverShared PUBLIC @@ -78,13 +80,13 @@ set_target_properties(slsReceiver PROPERTIES ) target_link_libraries(slsReceiver PUBLIC - slsProjectOptions - slsProjectWarnings - slsSupportLib + PUBLIC slsReceiverShared pthread ${ZeroMQ_LIBRARIES} rt + PRIVATE + slsProjectWarnings ) add_executable(slsMultiReceiver @@ -95,14 +97,14 @@ set_target_properties(slsMultiReceiver PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) -target_link_libraries(slsMultiReceiver PUBLIC - slsProjectOptions - slsProjectWarnings - slsSupportLib +target_link_libraries(slsMultiReceiver + PUBLIC slsReceiverShared pthread ${ZeroMQ_LIBRARIES} rt + PRIVATE + slsProjectWarnings ) if (SLS_USE_TESTS) diff --git a/slsSupportLib/CMakeLists.txt b/slsSupportLib/CMakeLists.txt index c447dd773..787942ea6 100755 --- a/slsSupportLib/CMakeLists.txt +++ b/slsSupportLib/CMakeLists.txt @@ -12,9 +12,7 @@ set(SOURCES src/sls_detector_exceptions.cpp ) -set(HEADERS -) - +# Header files to install as a part of the library set(PUBLICHEADERS include/sls_detector_defs.h include/sls_detector_exceptions.h @@ -26,6 +24,10 @@ set(PUBLICHEADERS include/TimeHelper.h ) +# Additional headers to be installed if SLS_DEVEL_HEADERS +# is specified as an option. Aim is to give the developer +# access to utilities in the support library while +# at the same time offer a minimal install if(SLS_DEVEL_HEADERS) set(PUBLICHEADERS ${PUBLICHEADERS} @@ -44,54 +46,66 @@ if(SLS_DEVEL_HEADERS) ) endif() -add_library(slsSupportLib SHARED +# Create an object library to avoid building the library twice +add_library(slsSupportObject OBJECT ${SOURCES} ${HEADERS} ) - -if((CMAKE_BUILD_TYPE STREQUAL "Release") AND SLS_LTO_AVAILABLE) - set_property(TARGET slsSupportLib PROPERTY INTERPROCEDURAL_OPTIMIZATION True) -endif() - - - -target_include_directories(slsSupportLib PUBLIC +target_include_directories(slsSupportObject + PUBLIC "$" "$" -) - -target_include_directories(slsSupportLib PRIVATE + PRIVATE ${ZeroMQ_INCLUDE_DIRS} ) - -set_target_properties(slsSupportLib PROPERTIES - LIBRARY_OUTPUT_NAME SlsSupport - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin - PUBLIC_HEADER "${PUBLICHEADERS}" -) - -target_link_libraries(slsSupportLib - PUBLIC +target_link_libraries(slsSupportObject + PUBLIC slsProjectOptions - # ${ZeroMQ_LIBRARIES} - zmq + # zmq + ${ZeroMQ_LIBRARIES} rapidjson - PRIVATE + PRIVATE slsProjectWarnings ) - - if (SLS_USE_TESTS) add_subdirectory(tests) endif(SLS_USE_TESTS) -# Install the library -install(TARGETS slsSupportLib +# Add shared library version of the support lib +add_library(slsSupportShared SHARED $) + +target_link_libraries(slsSupportShared PUBLIC slsSupportObject) + +set_target_properties(slsSupportShared PROPERTIES + LIBRARY_OUTPUT_NAME SlsSupport + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin + PUBLIC_HEADER "${PUBLICHEADERS}" +) + +# Add static version of the support lib +add_library(slsSupportStatic STATIC $) + +target_link_libraries(slsSupportStatic PUBLIC slsSupportObject) + +set_target_properties(slsSupportStatic PROPERTIES + ARCHIVE_OUTPUT_NAME SlsSupportStatic + ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin + PUBLIC_HEADER "${PUBLICHEADERS}" +) + +if((CMAKE_BUILD_TYPE STREQUAL "Release") AND SLS_LTO_AVAILABLE) + set_property(TARGET slsSupportObject PROPERTY INTERPROCEDURAL_OPTIMIZATION True) + set_property(TARGET slsSupportShared PROPERTY INTERPROCEDURAL_OPTIMIZATION True) + set_property(TARGET slsSupportStatic PROPERTY INTERPROCEDURAL_OPTIMIZATION True) +endif() + +install(TARGETS slsSupportShared slsSupportStatic slsSupportObject EXPORT "${TARGETS_EXPORT_NAME}" LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) + diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 62f3fe847..3cdb3d634 100755 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -8,12 +8,12 @@ set(SLS_TEST_SOURCES ) add_executable(testclient src/testclient.cpp) -target_link_libraries(testclient slsSupportLib) +target_link_libraries(testclient slsSupportShared) set_target_properties(testclient PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) add_executable(testserver src/testserver.cpp) -target_link_libraries(testserver slsSupportLib) +target_link_libraries(testserver slsSupportShared) set_target_properties(testserver PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) @@ -21,7 +21,7 @@ add_executable(tests ${SLS_TEST_SOURCES}) target_link_libraries(tests slsProjectOptions slsProjectWarnings - slsSupportLib + slsSupportShared pthread rt )