Add support for building RPMs (#1439)
Build and Deploy on local RHEL9 / build (push) Successful in 2m5s
Build on RHEL9 docker image / build (push) Successful in 3m30s
Build and Deploy on local RHEL8 / build (push) Successful in 4m52s
Build on RHEL8 docker image / build (push) Successful in 5m3s
Run Simulator Tests on local RHEL9 / build (push) Successful in 14m43s
Run Simulator Tests on local RHEL8 / build (push) Successful in 18m15s

* rpm

* versioned binaries

* also zmq process

* use distro style naming

* added gui
This commit is contained in:
Erik Fröjdh
2026-05-04 17:56:23 +02:00
committed by GitHub
parent 6bbbce5dc3
commit 753ef2be45
5 changed files with 84 additions and 13 deletions
+31 -1
View File
@@ -208,6 +208,7 @@ option(SLS_TUNE_LOCAL "tune to local machine" OFF)
option(SLS_DEVEL_HEADERS "install headers for devel" OFF)
option(SLS_USE_MOENCH "compile zmq and post processing for Moench" OFF)
option(SLS_USE_JUNGFRAU "compile post processing for Jungfrau" OFF)
option(SLS_INSTALL_VERSIONED_BINARIES "Add version number to binaries on install" OFF) #Needed for multi version RPM
#Convenience option to switch off defaults when building Moench binaries only
option(SLS_BUILD_ONLY_MOENCH "compile only Moench" OFF)
@@ -463,4 +464,33 @@ if(SLS_MASTER_PROJECT)
set(CMAKE_INSTALL_DIR "share/cmake/${PROJECT_NAME}")
set(PROJECT_LIBRARIES slsSupportShared slsDetectorShared slsReceiverShared)
include(cmake/package_config.cmake)
endif()
endif()
#Packaging
# Generic CPack metadata
set(CPACK_PACKAGE_NAME "slsDetectorPackage")
set(CPACK_PACKAGE_VENDOR "Paul Scherrer Institut")
set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "DAQ software for PSI developed detectors")
# RPM-specific settings
set(CPACK_GENERATOR "RPM")
set(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
set(CPACK_RPM_PACKAGE_LICENSE "LGPL-3.0")
set(CPACK_RPM_PACKAGE_GROUP "Applications/System")
set(CPACK_RPM_PACKAGE_RELEASE 1)
# Adds %{?dist} to the RPM Release field
set(CPACK_RPM_PACKAGE_RELEASE_DIST ON)
set(CPACK_RPM_PACKAGE_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}")
set(CPACK_RPM_COMPONENT_INSTALL ON)
set(CPACK_RPM_GUI_PACKAGE_REQUIRES
"qt5-qtbase, qt5-qtbase-gui"
)
#control which RPMs are generated
set(CPACK_COMPONENTS_ALL cli receiver zmq gui)
include(CPack)
@@ -84,7 +84,19 @@ foreach(exe ${MOENCH_EXECUTABLES})
set_property(TARGET ${exe} PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
endif()
# Mainly for RPMs to enable side by side installations of different versions
if(SLS_INSTALL_VERSIONED_BINARIES)
install(PROGRAMS "$<TARGET_FILE:${exe}>"
DESTINATION bin
RENAME "$<TARGET_FILE_BASE_NAME:${exe}>-${PROJECT_VERSION}"
COMPONENT zmq
)
else()
install(TARGETS ${exe}
DESTINATION bin
COMPONENT zmq
)
endif()
endforeach(exe ${MOENCH_EXECUTABLES})
install(TARGETS ${MOENCH_EXECUTABLES} DESTINATION bin)
+1 -4
View File
@@ -121,9 +121,6 @@ endif()
install(TARGETS slsDetectorGui
# EXPORT "${TARGETS_EXPORT_NAME}" #do not export gui
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
# PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT gui
)
+15 -1
View File
@@ -108,8 +108,22 @@ if(SLS_USE_TEXTCLIENT)
if((CMAKE_BUILD_TYPE STREQUAL "Release") AND SLS_LTO_AVAILABLE)
set_property(TARGET ${val1} PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
endif()
# Mainly for RPMs to enable side by side installations of different versions
if(SLS_INSTALL_VERSIONED_BINARIES)
install(PROGRAMS "$<TARGET_FILE:${val1}>"
DESTINATION bin
RENAME "$<TARGET_FILE_BASE_NAME:${val1}>-${PROJECT_VERSION}"
COMPONENT cli
)
else()
install(TARGETS ${val1}
DESTINATION bin
COMPONENT cli
)
endif()
endforeach()
install(TARGETS ${det_bin_names} DESTINATION bin)
endif(SLS_USE_TEXTCLIENT)
+24 -6
View File
@@ -167,13 +167,31 @@ if (SLS_USE_RECEIVER_BINARIES)
target_link_libraries(slsFrameSynchronizer PRIVATE "$<BUILD_INTERFACE:libzmq-static>")
endif()
install(TARGETS slsReceiver slsMultiReceiver slsFrameSynchronizer
EXPORT "${TARGETS_EXPORT_NAME}"
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sls
# Receiver binaries
set(SLS_RECEIVER_BINARIES
slsReceiver
slsMultiReceiver
slsFrameSynchronizer
)
if(SLS_INSTALL_VERSIONED_BINARIES)
message(STATUS "Versioned binaries will be installed")
foreach(target IN LISTS SLS_RECEIVER_BINARIES)
install(PROGRAMS "$<TARGET_FILE:${target}>"
DESTINATION ${CMAKE_INSTALL_BINDIR}
RENAME "$<TARGET_FILE_BASE_NAME:${target}>-${PROJECT_VERSION}"
COMPONENT receiver
)
endforeach()
else()
install(TARGETS ${SLS_RECEIVER_BINARIES}
EXPORT "${TARGETS_EXPORT_NAME}"
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT receiver
)
endif()
endif(SLS_USE_RECEIVER_BINARIES)