diff --git a/CMakeLists.txt b/CMakeLists.txt index d8dd022de..de56493c6 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,6 +61,7 @@ find_package(ClangFormat) #Enable LTO if available check_ipo_supported(RESULT SLS_LTO_AVAILABLE) +message(STATUS "SLS_LTO_AVAILABLE:" ${SLS_LTO_AVAILABLE}) # # Use ld.gold if it is available and isn't disabled explicitly diff --git a/conda-recepie/copy_lib.sh b/conda-recepie/copy_lib.sh index 9136a480b..fa624418d 100755 --- a/conda-recepie/copy_lib.sh +++ b/conda-recepie/copy_lib.sh @@ -5,10 +5,6 @@ mkdir -p $PREFIX/include/sls # mkdir $PREFIX/include/slsDetectorPackage #Shared and static libraries -# cp build/bin/libSlsDetector.so $PREFIX/lib/. -# cp build/bin/libSlsReceiver.so $PREFIX/lib/. -# cp build/bin/libSlsSupport.so $PREFIX/lib/. - cp build/install/lib/* $PREFIX/lib/ #Binaries diff --git a/slsDetectorCalibration/moenchExecutables/CMakeLists.txt b/slsDetectorCalibration/moenchExecutables/CMakeLists.txt index 64204de1f..94ab12b5f 100644 --- a/slsDetectorCalibration/moenchExecutables/CMakeLists.txt +++ b/slsDetectorCalibration/moenchExecutables/CMakeLists.txt @@ -24,7 +24,7 @@ foreach(exe ${MOENCH_EXECUTABLES}) target_link_libraries(${exe} PUBLIC - slsSupportShared + slsSupportStatic ${ZeroMQ_LIBRARIES} pthread TIFF::TIFF @@ -37,4 +37,9 @@ foreach(exe ${MOENCH_EXECUTABLES}) set_target_properties(${exe} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) + if(SLS_LTO_AVAILABLE) + set_property(TARGET ${exe} PROPERTY INTERPROCEDURAL_OPTIMIZATION True) + endif() + + endforeach(exe ${MOENCH_EXECUTABLES}) diff --git a/slsDetectorGui/CMakeLists.txt b/slsDetectorGui/CMakeLists.txt index d05da8e06..c590135e4 100755 --- a/slsDetectorGui/CMakeLists.txt +++ b/slsDetectorGui/CMakeLists.txt @@ -90,7 +90,7 @@ target_include_directories(slsDetectorGui PUBLIC target_link_libraries(slsDetectorGui PUBLIC slsProjectOptions slsProjectWarnings - slsDetectorShared + slsDetectorStatic ${QT_QTCORE_LIBRARIES} ${QT_QTGUI_LIBRARIES} ${QWT_LIBRARIES} @@ -104,6 +104,9 @@ target_link_libraries(slsDetectorGui PUBLIC set_target_properties(slsDetectorGui PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) +if(SLS_LTO_AVAILABLE) + set_property(TARGET slsDetectorGui PROPERTY INTERPROCEDURAL_OPTIMIZATION True) +endif() install(TARGETS slsDetectorGui EXPORT "${TARGETS_EXPORT_NAME}" diff --git a/slsDetectorSoftware/CMakeLists.txt b/slsDetectorSoftware/CMakeLists.txt index cce46cafb..0ec6939ce 100755 --- a/slsDetectorSoftware/CMakeLists.txt +++ b/slsDetectorSoftware/CMakeLists.txt @@ -6,26 +6,16 @@ set(SOURCES src/CmdParser.cpp ) -set(HEADERS -) - -add_library(slsDetectorShared SHARED +add_library(slsDetectorObject OBJECT ${SOURCES} - ${HEADERS} ) - -if((CMAKE_BUILD_TYPE STREQUAL "Release") AND SLS_LTO_AVAILABLE) - set_property(TARGET slsDetectorShared PROPERTY INTERPROCEDURAL_OPTIMIZATION True) -endif() - - -target_include_directories(slsDetectorShared PUBLIC +target_include_directories(slsDetectorObject PUBLIC "$" "$" ) -target_link_libraries(slsDetectorShared +target_link_libraries(slsDetectorObject PUBLIC slsSupportStatic pthread @@ -42,13 +32,33 @@ set(PUBLICHEADERS include/sls/Detector.h include/sls/Result.h ) + +#Shared library +add_library(slsDetectorShared SHARED $) +target_link_libraries(slsDetectorShared PUBLIC slsDetectorObject) set_target_properties(slsDetectorShared PROPERTIES LIBRARY_OUTPUT_NAME SlsDetector LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin PUBLIC_HEADER "${PUBLICHEADERS}" ) +#Static library +add_library(slsDetectorStatic STATIC $) +target_link_libraries(slsDetectorStatic PUBLIC slsDetectorObject) +set_target_properties(slsDetectorStatic PROPERTIES + ARCHIVE_OUTPUT_NAME SlsDetectorStatic + ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin + PUBLIC_HEADER "${PUBLICHEADERS}" +) + + +# message("Detector LTO_AVAILABLE:" ${SLS_LTO_AVAILABLE}) +if((CMAKE_BUILD_TYPE STREQUAL "Release") AND SLS_LTO_AVAILABLE) + set_property(TARGET slsDetectorObject PROPERTY INTERPROCEDURAL_OPTIMIZATION True) + set_property(TARGET slsDetectorStatic PROPERTY INTERPROCEDURAL_OPTIMIZATION True) + set_property(TARGET slsDetectorShared PROPERTY INTERPROCEDURAL_OPTIMIZATION True) +endif() # Loop over list to generate command line binaries set(bin_names "sls_detector_put" @@ -66,7 +76,7 @@ foreach(val RANGE ${len2}) add_executable(${val1} src/CmdLineApp.cpp) target_link_libraries(${val1} - slsDetectorShared + slsDetectorStatic pthread ${ZeroMQ_LIBRARIES} rt @@ -75,7 +85,7 @@ foreach(val RANGE ${len2}) RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin COMPILE_DEFINITIONS ${val2}=1 ) - if(LTO_AVAILABLE) + if(SLS_LTO_AVAILABLE) set_property(TARGET ${val1} PROPERTY INTERPROCEDURAL_OPTIMIZATION True) endif() endforeach() @@ -89,7 +99,7 @@ if (SLS_USE_TESTS) endif(SLS_USE_TESTS) -install(TARGETS slsDetectorShared +install(TARGETS slsDetectorShared slsDetectorObject slsDetectorStatic EXPORT "${TARGETS_EXPORT_NAME}" RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} diff --git a/slsReceiverSoftware/CMakeLists.txt b/slsReceiverSoftware/CMakeLists.txt index 843bd6241..ab08c243d 100755 --- a/slsReceiverSoftware/CMakeLists.txt +++ b/slsReceiverSoftware/CMakeLists.txt @@ -11,6 +11,11 @@ set(SOURCES src/Fifo.cpp ) +set(PUBLICHEADERS + include/sls/Receiver.h +) + + # HDF5 if (SLS_USE_HDF5) if (HDF5_FOUND) @@ -23,18 +28,18 @@ if (SLS_USE_HDF5) endif () endif (SLS_USE_HDF5) - -add_library(slsReceiverShared SHARED +# Create an object library to avoid building the library twice +# This is only used during the build phase +add_library(slsReceiverObject OBJECT ${SOURCES} - ${HEADERS} ) +target_include_directories(slsReceiverObject PUBLIC + "$" + "$" +) -if((CMAKE_BUILD_TYPE STREQUAL "Release") AND SLS_LTO_AVAILABLE) - set_property(TARGET slsReceiverShared PROPERTY INTERPROCEDURAL_OPTIMIZATION True) -endif() - -target_link_libraries(slsReceiverShared +target_link_libraries(slsReceiverObject PUBLIC slsProjectOptions slsSupportStatic @@ -42,35 +47,44 @@ target_link_libraries(slsReceiverShared slsProjectWarnings #don't propagate warnigns ) -target_include_directories(slsReceiverShared PUBLIC - "$" - "$") - - # HDF5 if (SLS_USE_HDF5) if (HDF5_FOUND) - target_link_libraries(slsReceiverShared PUBLIC + target_link_libraries(slsReceiverObject PUBLIC ${HDF5_LIBRARIES}) - target_include_directories(slsReceiverShared PUBLIC + target_include_directories(slsReceiverObject PUBLIC ${HDF5_INCLUDE_DIRS} ${CMAKE_INSTALL_PREFIX}/include) endif () endif (SLS_USE_HDF5) -#What is included in slsReceiverLib? -set(PUBLICHEADERS - include/sls/Receiver.h -) - - +#Shared library +add_library(slsReceiverShared SHARED $) +target_link_libraries(slsReceiverShared PUBLIC slsReceiverObject) set_target_properties(slsReceiverShared PROPERTIES LIBRARY_OUTPUT_NAME SlsReceiver LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin PUBLIC_HEADER "${PUBLICHEADERS}" ) +#Static library +add_library(slsReceiverStatic STATIC $) +target_link_libraries(slsReceiverStatic PUBLIC slsReceiverObject) +set_target_properties(slsReceiverStatic PROPERTIES + ARCHIVE_OUTPUT_NAME SlsReceiverStatic + ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin + PUBLIC_HEADER "${PUBLICHEADERS}" +) + +# message("Receiver LTO_AVAILABLE:" ${SLS_LTO_AVAILABLE}) +if((CMAKE_BUILD_TYPE STREQUAL "Release") AND SLS_LTO_AVAILABLE) + set_property(TARGET slsReceiverObject PROPERTY INTERPROCEDURAL_OPTIMIZATION True) + set_property(TARGET slsReceiverStatic PROPERTY INTERPROCEDURAL_OPTIMIZATION True) + set_property(TARGET slsReceiverShared PROPERTY INTERPROCEDURAL_OPTIMIZATION True) +endif() + + add_executable(slsReceiver src/ReceiverApp.cpp) @@ -78,10 +92,13 @@ add_executable(slsReceiver set_target_properties(slsReceiver PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) +if(SLS_LTO_AVAILABLE) + set_property(TARGET slsReceiver PROPERTY INTERPROCEDURAL_OPTIMIZATION True) +endif() target_link_libraries(slsReceiver PUBLIC PUBLIC - slsReceiverShared + slsReceiverStatic pthread ${ZeroMQ_LIBRARIES} rt @@ -96,10 +113,13 @@ add_executable(slsMultiReceiver set_target_properties(slsMultiReceiver PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) +if(SLS_LTO_AVAILABLE) + set_property(TARGET slsMultiReceiver PROPERTY INTERPROCEDURAL_OPTIMIZATION True) +endif() target_link_libraries(slsMultiReceiver PUBLIC - slsReceiverShared + slsReceiverStatic pthread ${ZeroMQ_LIBRARIES} rt @@ -111,7 +131,10 @@ if (SLS_USE_TESTS) add_subdirectory(tests) endif(SLS_USE_TESTS) -install(TARGETS slsReceiverShared slsReceiver slsMultiReceiver + + + +install(TARGETS slsReceiverShared slsReceiver slsMultiReceiver slsReceiverObject slsReceiverStatic EXPORT "${TARGETS_EXPORT_NAME}" RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} @@ -119,5 +142,5 @@ install(TARGETS slsReceiverShared slsReceiver slsMultiReceiver PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sls ) -install(FILES ${ZMQ_STATIC_ARCHIVE} -DESTINATION lib) +# install(FILES ${ZMQ_STATIC_ARCHIVE} +# DESTINATION lib) diff --git a/slsSupportLib/CMakeLists.txt b/slsSupportLib/CMakeLists.txt index db4157b92..3565a8c62 100755 --- a/slsSupportLib/CMakeLists.txt +++ b/slsSupportLib/CMakeLists.txt @@ -87,7 +87,6 @@ set_target_properties(slsSupportShared PROPERTIES # Add static version of the support lib add_library(slsSupportStatic STATIC $) - target_link_libraries(slsSupportStatic PUBLIC slsSupportObject) set_target_properties(slsSupportStatic PROPERTIES