mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-23 23:10:02 +02:00

* Setting pattern from memory (#218) * ToString accepts c-style arrays * fixed patwait time bug in validation * Introduced pattern class * compile for servers too * Python binding for Pattern * added scanParameters in Python * slsReceiver: avoid potential memory leak around Implementation::generalData * additional constructors for scanPrameters in python * bugfix: avoid potentital memory leak in receiver if called outside constructor context * added scanParameters in Python * additional constructors for scanPrameters in python * M3defaultpattern (#227) * default pattern for m3 and moench including Python bindings * M3settings (#228) * some changes to compile on RH7 and in the server to load the default chip status register at startup * Updated mythen3DeectorServer_developer executable with correct initialization at startup Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com> Co-authored-by: Anna Bergamaschi <anna.bergamaschi@psi.ch> * Pattern.h as a public header files (#229) * fixed buffer overflow but caused by using global instead of local enum * replacing out of range trimbits with edge values * replacing dac values that are out of range after interpolation * updated pybind11 to 2.6.2 * Mythen3 improved synchronization (#231) Disabling scans for multi module Mythen3, since there is no feedback of the detectors being ready startDetector first starts the slaves then the master acquire firs calls startDetector for the slaves then acquire on the master getMaster to read back from hardware which one is master * New server for JF to go with the new FW (#232) * Modified Jungfrau speed settings for HW1.0 - FW fix version 1.1.1, compilation date 210218 * Corrected bug. DBIT clk phase is implemented in both HW version 1.0 and 2.0. Previous version did not update the DBIT phase shift on the configuration of a speed. * fix for m3 scan with single module * m3 fw version * m3 server * bugfix for bottom when setting quad * new strategy for finding zmq based on cppzmq Co-authored-by: Dhanya Thattil <dhanya.thattil@psi.ch> Co-authored-by: Dhanya Thattil <33750417+thattil@users.noreply.github.com> Co-authored-by: Alejandro Homs Puron <ahoms@esrf.fr> Co-authored-by: Anna Bergamaschi <anna.bergamaschi@psi.ch> Co-authored-by: Xiaoqiang Wang <xiaoqiangwang@gmail.com> Co-authored-by: lopez_c <carlos.lopez-cuenca@psi.ch>
258 lines
8.5 KiB
CMake
Executable File
258 lines
8.5 KiB
CMake
Executable File
cmake_minimum_required(VERSION 3.12)
|
|
project(slsDetectorPackage)
|
|
set(PROJECT_VERSION 5.1.0)
|
|
include(CheckIPOSupported)
|
|
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
|
|
|
|
cmake_policy(SET CMP0074 NEW)
|
|
include(cmake/project_version.cmake)
|
|
|
|
# Include additional modules that are used unconditionally
|
|
include(GNUInstallDirs)
|
|
|
|
# If conda build, always set lib dir to 'lib'
|
|
if($ENV{CONDA_BUILD})
|
|
set(CMAKE_INSTALL_LIBDIR "lib")
|
|
endif()
|
|
|
|
# Set lower / upper case project names
|
|
string(TOUPPER "${PROJECT_NAME}" PROJECT_NAME_UPPER)
|
|
string(TOLOWER "${PROJECT_NAME}" PROJECT_NAME_LOWER)
|
|
|
|
# Set targets export name (used by slsDetectorPackage and dependencies)
|
|
set(TARGETS_EXPORT_NAME "${PROJECT_NAME_LOWER}-targets")
|
|
#set(namespace "${PROJECT_NAME}::")
|
|
|
|
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
|
|
|
|
|
|
# Check if project is being used directly or via add_subdirectory
|
|
set(SLS_MASTER_PROJECT OFF)
|
|
if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
|
|
set(SLS_MASTER_PROJECT ON)
|
|
endif()
|
|
|
|
option (SLS_USE_HDF5 "HDF5 File format" OFF)
|
|
option (SLS_USE_TEXTCLIENT "Text Client" ON)
|
|
option (SLS_USE_RECEIVER "Receiver" ON)
|
|
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_PYTHON "Python bindings" OFF)
|
|
option(SLS_USE_CTBGUI "ctb GUI" OFF)
|
|
option(SLS_BUILD_DOCS "docs" OFF)
|
|
option(SLS_BUILD_EXAMPLES "examples" OFF)
|
|
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)
|
|
|
|
# set(ClangFormat_BIN_NAME clang-format)
|
|
set(ClangFormat_EXCLUDE_PATTERNS "build/"
|
|
"libs/"
|
|
"slsDetectorCalibration/"
|
|
"ctbGui/"
|
|
"manual/"
|
|
"python/"
|
|
"sample/"
|
|
${CMAKE_BINARY_DIR})
|
|
find_package(ClangFormat)
|
|
|
|
#Enable LTO if available
|
|
check_ipo_supported(RESULT SLS_LTO_AVAILABLE)
|
|
message(STATUS "SLS_LTO_AVAILABLE:" ${SLS_LTO_AVAILABLE})
|
|
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
message(STATUS "No build type selected, default to Release")
|
|
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type (default Release)" FORCE)
|
|
endif()
|
|
|
|
|
|
#Add two fake libraries to manage options
|
|
add_library(slsProjectOptions INTERFACE)
|
|
add_library(slsProjectWarnings INTERFACE)
|
|
target_compile_features(slsProjectOptions INTERFACE cxx_std_11)
|
|
target_compile_options(slsProjectWarnings INTERFACE
|
|
-Wall
|
|
-Wextra
|
|
-Wno-unused-parameter #Needs to be slowly mitigated
|
|
# -Wold-style-cast
|
|
-Wnon-virtual-dtor
|
|
-Woverloaded-virtual
|
|
-Wdouble-promotion
|
|
-Wformat=2
|
|
-Wredundant-decls
|
|
# -Wconversion
|
|
-Wvla
|
|
-Wdouble-promotion
|
|
-Werror=return-type
|
|
|
|
)
|
|
|
|
|
|
#Testing for minimum version for compilers
|
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.2)
|
|
message(FATAL_ERROR "Clang version must be at least 3.2!")
|
|
endif()
|
|
target_compile_options(slsProjectWarnings INTERFACE -Wshadow) #Clag does not warn on constructor
|
|
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
|
|
message(FATAL_ERROR "GCC version must be at least 4.8!")
|
|
endif()
|
|
|
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5)
|
|
target_compile_options(slsProjectWarnings INTERFACE
|
|
-Wno-missing-field-initializers)
|
|
endif()
|
|
|
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6.0)
|
|
target_compile_options(slsProjectWarnings INTERFACE
|
|
-Wno-misleading-indentation # mostly in rapidjson remove using clang format
|
|
-Wduplicated-cond
|
|
-Wnull-dereference )
|
|
|
|
endif()
|
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.0)
|
|
target_compile_options(slsProjectWarnings INTERFACE
|
|
-Wno-class-memaccess )
|
|
|
|
endif()
|
|
endif()
|
|
|
|
|
|
if(SLS_USE_SANITIZER)
|
|
target_compile_options(slsProjectOptions INTERFACE -fsanitize=address,undefined -fno-omit-frame-pointer)
|
|
target_link_libraries(slsProjectOptions INTERFACE -fsanitize=address,undefined)
|
|
# target_compile_options(slsProjectOptions INTERFACE -fsanitize=thread)
|
|
# target_link_libraries(slsProjectOptions INTERFACE -fsanitize=thread)
|
|
endif()
|
|
|
|
if(SLS_TUNE_LOCAL)
|
|
target_compile_options(slsProjectOptions INTERFACE -mtune=native -march=native)
|
|
endif()
|
|
|
|
|
|
#rapidjson
|
|
add_library(rapidjson INTERFACE)
|
|
target_include_directories(rapidjson INTERFACE
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/libs/rapidjson>
|
|
)
|
|
|
|
# Install fake the libraries
|
|
install(TARGETS slsProjectOptions slsProjectWarnings rapidjson
|
|
EXPORT "${TARGETS_EXPORT_NAME}"
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
|
)
|
|
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
set(CMAKE_INSTALL_RPATH $ORIGIN)
|
|
# set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
|
|
|
|
|
|
set(ZeroMQ_HINT "" CACHE STRING "Hint where ZeroMQ could be found")
|
|
#Adapted from: https://github.com/zeromq/cppzmq/
|
|
if (NOT TARGET libzmq)
|
|
if(ZeroMQ_HINT)
|
|
message(STATUS "Looking for ZeroMQ in: ${ZeroMQ_HINT}")
|
|
find_package(ZeroMQ 4
|
|
NO_DEFAULT_PATH
|
|
HINTS ${ZeroMQ_DIR}
|
|
)
|
|
else()
|
|
find_package(ZeroMQ 4)
|
|
endif()
|
|
|
|
|
|
|
|
# libzmq autotools install: fallback to pkg-config
|
|
if(NOT ZeroMQ_FOUND)
|
|
message(STATUS "CMake libzmq package not found, trying again with pkg-config (normal install of zeromq)")
|
|
list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/libzmq-pkg-config)
|
|
find_package(ZeroMQ 4 REQUIRED)
|
|
endif()
|
|
|
|
# TODO "REQUIRED" above should already cause a fatal failure if not found, but this doesn't seem to work
|
|
if(NOT ZeroMQ_FOUND)
|
|
message(FATAL_ERROR "ZeroMQ was not found, neither as a CMake package nor via pkg-config")
|
|
endif()
|
|
|
|
if (ZeroMQ_FOUND AND NOT TARGET libzmq)
|
|
message(FATAL_ERROR "ZeroMQ version not supported!")
|
|
endif()
|
|
endif()
|
|
|
|
if (SLS_USE_TESTS)
|
|
enable_testing()
|
|
add_subdirectory(tests)
|
|
endif(SLS_USE_TESTS)
|
|
|
|
|
|
|
|
|
|
# Common functionallity to detector and receiver
|
|
add_subdirectory(slsSupportLib)
|
|
|
|
if (SLS_USE_TEXTCLIENT)
|
|
add_subdirectory(slsDetectorSoftware)
|
|
endif (SLS_USE_TEXTCLIENT)
|
|
|
|
if (SLS_USE_RECEIVER)
|
|
add_subdirectory(slsReceiverSoftware)
|
|
endif (SLS_USE_RECEIVER)
|
|
|
|
if (SLS_USE_GUI)
|
|
add_subdirectory(slsDetectorGui)
|
|
endif (SLS_USE_GUI)
|
|
|
|
if (SLS_USE_SIMULATOR)
|
|
add_subdirectory(slsDetectorServers)
|
|
endif (SLS_USE_SIMULATOR)
|
|
|
|
if (SLS_USE_INTEGRATION_TESTS)
|
|
add_subdirectory(integrationTests)
|
|
endif (SLS_USE_INTEGRATION_TESTS)
|
|
|
|
if (SLS_USE_PYTHON)
|
|
find_package (Python 3.6 COMPONENTS Interpreter Development)
|
|
add_subdirectory(libs/pybind11)
|
|
add_subdirectory(python)
|
|
endif(SLS_USE_PYTHON)
|
|
|
|
if (SLS_USE_CTBGUI)
|
|
add_subdirectory(ctbGui)
|
|
endif(SLS_USE_CTBGUI)
|
|
|
|
configure_file( .clang-tidy
|
|
${CMAKE_BINARY_DIR}/.clang-tidy
|
|
)
|
|
|
|
if (SLS_BUILD_EXAMPLES)
|
|
add_subdirectory(sample)
|
|
endif(SLS_BUILD_EXAMPLES)
|
|
|
|
if(SLS_BUILD_DOCS)
|
|
add_subdirectory(docs)
|
|
endif(SLS_BUILD_DOCS)
|
|
|
|
|
|
if(SLS_USE_MOENCH)
|
|
add_subdirectory(slsDetectorCalibration/moenchExecutables)
|
|
endif(SLS_USE_MOENCH)
|
|
|
|
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 slsSupportShared slsDetectorShared slsReceiverShared)
|
|
# Generate and install package config file and version
|
|
include(cmake/package_config.cmake)
|
|
endif()
|