Better control of what is built (#247)

* allow for build only detector libs

* allow receiver libs only

* option for shared libraries
This commit is contained in:
Erik Fröjdh 2021-06-02 16:09:28 +02:00 committed by GitHub
parent 129ec6930f
commit 201d304874
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 147 additions and 114 deletions

View File

@ -32,13 +32,16 @@ if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
set(SLS_MASTER_PROJECT ON) set(SLS_MASTER_PROJECT ON)
endif() endif()
option (SLS_USE_HDF5 "HDF5 File format" OFF) option(SLS_USE_HDF5 "HDF5 File format" OFF)
option (SLS_USE_TEXTCLIENT "Text Client" ON) option(SLS_BUILD_SHARED_LIBRARIES "Build shared libaries" ON)
option (SLS_USE_RECEIVER "Receiver" ON) option(SLS_USE_TEXTCLIENT "Text Client" ON)
option (SLS_USE_GUI "GUI" OFF) option(SLS_USE_DETECTOR "Detector libs" ON)
option (SLS_USE_SIMULATOR "Simulator" OFF) option(SLS_USE_RECEIVER "Receiver" ON)
option (SLS_USE_TESTS "TESTS" OFF) option(SLS_USE_RECEIVER_BINARIES "Receiver binaries" ON)
option (SLS_USE_INTEGRATION_TESTS "Integration Tests" OFF) option(SLS_USE_GUI "GUI" OFF)
option(SLS_USE_SIMULATOR "Simulator" OFF)
option(SLS_USE_TESTS "TESTS" OFF)
option(SLS_USE_INTEGRATION_TESTS "Integration Tests" OFF)
option(SLS_USE_SANITIZER "Sanitizers for debugging" OFF) option(SLS_USE_SANITIZER "Sanitizers for debugging" OFF)
option(SLS_USE_PYTHON "Python bindings" OFF) option(SLS_USE_PYTHON "Python bindings" OFF)
option(SLS_USE_CTBGUI "ctb GUI" OFF) option(SLS_USE_CTBGUI "ctb GUI" OFF)
@ -200,9 +203,9 @@ endif(SLS_USE_TESTS)
# Common functionallity to detector and receiver # Common functionallity to detector and receiver
add_subdirectory(slsSupportLib) add_subdirectory(slsSupportLib)
if (SLS_USE_TEXTCLIENT) if (SLS_USE_DETECTOR OR SLS_USE_TEXTCLIENT)
add_subdirectory(slsDetectorSoftware) add_subdirectory(slsDetectorSoftware)
endif (SLS_USE_TEXTCLIENT) endif ()
if (SLS_USE_RECEIVER) if (SLS_USE_RECEIVER)
add_subdirectory(slsReceiverSoftware) add_subdirectory(slsReceiverSoftware)

View File

@ -26,6 +26,8 @@ target_link_libraries(slsDetectorObject
slsProjectWarnings slsProjectWarnings
) )
set(DETECTOR_LIBRARY_TARGETS slsDetectorObject)
set(PUBLICHEADERS set(PUBLICHEADERS
include/sls/detectorData.h include/sls/detectorData.h
@ -35,13 +37,16 @@ set(PUBLICHEADERS
) )
#Shared library #Shared library
add_library(slsDetectorShared SHARED $<TARGET_OBJECTS:slsDetectorObject>) if(SLS_BUILD_SHARED_LIBRARIES)
target_link_libraries(slsDetectorShared PUBLIC slsDetectorObject) add_library(slsDetectorShared SHARED $<TARGET_OBJECTS:slsDetectorObject>)
set_target_properties(slsDetectorShared PROPERTIES target_link_libraries(slsDetectorShared PUBLIC slsDetectorObject)
LIBRARY_OUTPUT_NAME SlsDetector set_target_properties(slsDetectorShared PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin LIBRARY_OUTPUT_NAME SlsDetector
PUBLIC_HEADER "${PUBLICHEADERS}" LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
) PUBLIC_HEADER "${PUBLICHEADERS}"
)
list(APPEND DETECTOR_LIBRARY_TARGETS slsDetectorShared)
endif(SLS_BUILD_SHARED_LIBRARIES)
#Static library #Static library
add_library(slsDetectorStatic STATIC $<TARGET_OBJECTS:slsDetectorObject>) add_library(slsDetectorStatic STATIC $<TARGET_OBJECTS:slsDetectorObject>)
@ -52,54 +57,59 @@ set_target_properties(slsDetectorStatic PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
PUBLIC_HEADER "${PUBLICHEADERS}" PUBLIC_HEADER "${PUBLICHEADERS}"
) )
list(APPEND DETECTOR_LIBRARY_TARGETS slsDetectorStatic)
# message("Detector LTO_AVAILABLE:" ${SLS_LTO_AVAILABLE})
if((CMAKE_BUILD_TYPE STREQUAL "Release") AND SLS_LTO_AVAILABLE) if((CMAKE_BUILD_TYPE STREQUAL "Release") AND SLS_LTO_AVAILABLE)
set_property(TARGET slsDetectorObject PROPERTY INTERPROCEDURAL_OPTIMIZATION True) set_property(TARGET ${DETECTOR_LIBRARY_TARGETS} PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
set_property(TARGET slsDetectorStatic PROPERTY INTERPROCEDURAL_OPTIMIZATION True) # set_property(TARGET slsDetectorObject PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
set_property(TARGET slsDetectorShared PROPERTY INTERPROCEDURAL_OPTIMIZATION True) # set_property(TARGET slsDetectorStatic PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
# set_property(TARGET slsDetectorShared PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
endif() endif()
# Loop over list to generate command line binaries
set(bin_names "sls_detector_put"
"sls_detector_get"
"sls_detector_acquire"
"sls_detector_help")
set(cmd_name "PUT" "GET" "READOUT" "HELP")
list(LENGTH bin_names len1)
math(EXPR len2 "${len1} - 1")
foreach(val RANGE ${len2}) if(SLS_USE_TEXTCLIENT)
list(GET bin_names ${val} val1) # Loop over list to generate command line binaries
list(GET cmd_name ${val} val2) set(bin_names "sls_detector_put"
message(STATUS "${val1} ${val2}") "sls_detector_get"
"sls_detector_acquire"
"sls_detector_help")
set(cmd_name "PUT" "GET" "READOUT" "HELP")
list(LENGTH bin_names len1)
math(EXPR len2 "${len1} - 1")
add_executable(${val1} src/CmdLineApp.cpp) foreach(val RANGE ${len2})
target_link_libraries(${val1} list(GET bin_names ${val} val1)
slsDetectorStatic list(GET cmd_name ${val} val2)
pthread message(STATUS "${val1} ${val2}")
rt
)
set_target_properties(${val1} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
COMPILE_DEFINITIONS ${val2}=1
)
if(SLS_LTO_AVAILABLE)
set_property(TARGET ${val1} PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
endif()
endforeach()
add_executable(${val1} src/CmdLineApp.cpp)
target_link_libraries(${val1}
slsDetectorStatic
pthread
rt
)
set_target_properties(${val1} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
COMPILE_DEFINITIONS ${val2}=1
)
if(SLS_LTO_AVAILABLE)
set_property(TARGET ${val1} PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
endif()
endforeach()
install(TARGETS ${bin_names} DESTINATION bin)
install(TARGETS ${bin_names} DESTINATION bin) endif(SLS_USE_TEXTCLIENT)
if (SLS_USE_TESTS) if (SLS_USE_TESTS)
add_subdirectory(tests) add_subdirectory(tests)
endif(SLS_USE_TESTS) endif(SLS_USE_TESTS)
install(TARGETS slsDetectorShared slsDetectorObject slsDetectorStatic install(TARGETS ${DETECTOR_LIBRARY_TARGETS}
EXPORT "${TARGETS_EXPORT_NAME}" EXPORT "${TARGETS_EXPORT_NAME}"
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}

View File

@ -56,15 +56,19 @@ if (SLS_USE_HDF5)
endif () endif ()
endif (SLS_USE_HDF5) endif (SLS_USE_HDF5)
set(RECEIVER_LIBRARY_TARGETS slsReceiverObject)
#Shared library #Shared library
add_library(slsReceiverShared SHARED $<TARGET_OBJECTS:slsReceiverObject>) if(SLS_BUILD_SHARED_LIBRARIES)
target_link_libraries(slsReceiverShared PUBLIC slsReceiverObject) add_library(slsReceiverShared SHARED $<TARGET_OBJECTS:slsReceiverObject>)
set_target_properties(slsReceiverShared PROPERTIES target_link_libraries(slsReceiverShared PUBLIC slsReceiverObject)
LIBRARY_OUTPUT_NAME SlsReceiver set_target_properties(slsReceiverShared PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin LIBRARY_OUTPUT_NAME SlsReceiver
PUBLIC_HEADER "${PUBLICHEADERS}" LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
) PUBLIC_HEADER "${PUBLICHEADERS}"
)
list(APPEND RECEIVER_LIBRARY_TARGETS slsReceiverShared)
endif(SLS_BUILD_SHARED_LIBRARIES)
#Static library #Static library
add_library(slsReceiverStatic STATIC $<TARGET_OBJECTS:slsReceiverObject>) add_library(slsReceiverStatic STATIC $<TARGET_OBJECTS:slsReceiverObject>)
@ -74,63 +78,74 @@ set_target_properties(slsReceiverStatic PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
PUBLIC_HEADER "${PUBLICHEADERS}" PUBLIC_HEADER "${PUBLICHEADERS}"
) )
list(APPEND RECEIVER_LIBRARY_TARGETS slsReceiverStatic)
# message("Receiver LTO_AVAILABLE:" ${SLS_LTO_AVAILABLE})
if((CMAKE_BUILD_TYPE STREQUAL "Release") AND SLS_LTO_AVAILABLE) if((CMAKE_BUILD_TYPE STREQUAL "Release") AND SLS_LTO_AVAILABLE)
set_property(TARGET slsReceiverObject PROPERTY INTERPROCEDURAL_OPTIMIZATION True) set_property(TARGET ${RECEIVER_LIBRARY_TARGETS} PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
set_property(TARGET slsReceiverStatic PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
set_property(TARGET slsReceiverShared PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
endif() endif()
add_executable(slsReceiver
src/ReceiverApp.cpp
)
# Receiver binaries
set_target_properties(slsReceiver PROPERTIES if (SLS_USE_RECEIVER_BINARIES)
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin add_executable(slsReceiver
) src/ReceiverApp.cpp
if(SLS_LTO_AVAILABLE) )
set_property(TARGET slsReceiver PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
endif()
target_link_libraries(slsReceiver PUBLIC set_target_properties(slsReceiver PROPERTIES
PUBLIC RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
slsReceiverStatic )
pthread if(SLS_LTO_AVAILABLE)
rt set_property(TARGET slsReceiver PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
PRIVATE endif()
slsProjectWarnings
)
add_executable(slsMultiReceiver target_link_libraries(slsReceiver PUBLIC
src/MultiReceiverApp.cpp PUBLIC
) slsReceiverStatic
pthread
rt
PRIVATE
slsProjectWarnings
)
add_executable(slsMultiReceiver
src/MultiReceiverApp.cpp
)
set_target_properties(slsMultiReceiver PROPERTIES set_target_properties(slsMultiReceiver PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
) )
if(SLS_LTO_AVAILABLE) if(SLS_LTO_AVAILABLE)
set_property(TARGET slsMultiReceiver PROPERTY INTERPROCEDURAL_OPTIMIZATION True) set_property(TARGET slsMultiReceiver PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
endif() endif()
target_link_libraries(slsMultiReceiver target_link_libraries(slsMultiReceiver
PUBLIC PUBLIC
slsReceiverStatic slsReceiverStatic
pthread pthread
rt rt
PRIVATE PRIVATE
slsProjectWarnings slsProjectWarnings
) )
if (SLS_USE_TESTS) install(TARGETS slsReceiver slsMultiReceiver
add_subdirectory(tests) EXPORT "${TARGETS_EXPORT_NAME}"
endif(SLS_USE_TESTS) RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
install(TARGETS slsReceiverShared slsReceiver slsMultiReceiver slsReceiverObject slsReceiverStatic PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sls
)
endif(SLS_USE_RECEIVER_BINARIES)
if (SLS_USE_TESTS)
add_subdirectory(tests)
endif(SLS_USE_TESTS)
install(TARGETS ${RECEIVER_LIBRARY_TARGETS}
EXPORT "${TARGETS_EXPORT_NAME}" EXPORT "${TARGETS_EXPORT_NAME}"
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}

View File

@ -72,15 +72,21 @@ if (SLS_USE_TESTS)
add_subdirectory(tests) add_subdirectory(tests)
endif(SLS_USE_TESTS) endif(SLS_USE_TESTS)
# Add shared library version of the support lib #List of targets to support adding removing targets as config
add_library(slsSupportShared SHARED $<TARGET_OBJECTS:slsSupportObject>) set(SUPPORT_LIBRARY_TARGETS slsSupportObject)
target_link_libraries(slsSupportShared PUBLIC slsSupportObject)
set_target_properties(slsSupportShared PROPERTIES # Add shared library version of the support lib
LIBRARY_OUTPUT_NAME SlsSupport if(SLS_BUILD_SHARED_LIBRARIES)
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin add_library(slsSupportShared SHARED $<TARGET_OBJECTS:slsSupportObject>)
PUBLIC_HEADER "${PUBLICHEADERS}" 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}"
)
list(APPEND SUPPORT_LIBRARY_TARGETS slsSupportShared)
endif(SLS_BUILD_SHARED_LIBRARIES)
# Add static version of the support lib # Add static version of the support lib
add_library(slsSupportStatic STATIC $<TARGET_OBJECTS:slsSupportObject>) add_library(slsSupportStatic STATIC $<TARGET_OBJECTS:slsSupportObject>)
@ -91,14 +97,13 @@ set_target_properties(slsSupportStatic PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
PUBLIC_HEADER "${PUBLICHEADERS}" PUBLIC_HEADER "${PUBLICHEADERS}"
) )
list(APPEND SUPPORT_LIBRARY_TARGETS slsSupportStatic)
if((CMAKE_BUILD_TYPE STREQUAL "Release") AND SLS_LTO_AVAILABLE) if((CMAKE_BUILD_TYPE STREQUAL "Release") AND SLS_LTO_AVAILABLE)
set_property(TARGET slsSupportObject PROPERTY INTERPROCEDURAL_OPTIMIZATION True) set_property(TARGET ${SUPPORT_LIBRARY_TARGETS} PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
set_property(TARGET slsSupportShared PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
set_property(TARGET slsSupportStatic PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
endif() endif()
install(TARGETS slsSupportShared slsSupportStatic slsSupportObject install(TARGETS ${SUPPORT_LIBRARY_TARGETS}
EXPORT "${TARGETS_EXPORT_NAME}" EXPORT "${TARGETS_EXPORT_NAME}"
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}

View File

@ -28,11 +28,11 @@ target_link_libraries(tests
slsProjectWarnings slsProjectWarnings
) )
if (SLS_USE_TEXTCLIENT) if (SLS_USE_DETECTOR)
target_link_libraries(tests PUBLIC target_link_libraries(tests PUBLIC
slsDetectorShared slsDetectorShared
) )
endif (SLS_USE_TEXTCLIENT) endif (SLS_USE_DETECTOR)
if (SLS_USE_RECEIVER) if (SLS_USE_RECEIVER)
target_link_libraries(tests PUBLIC target_link_libraries(tests PUBLIC