246 lines
7.3 KiB
CMake
246 lines
7.3 KiB
CMake
CMAKE_MINIMUM_REQUIRED(VERSION 3.19)
|
|
|
|
FILE(STRINGS VERSION JFJOCH_VERSION)
|
|
|
|
PROJECT(jfjoch VERSION 1.0.0 LANGUAGES C CXX)
|
|
SET(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
|
|
|
|
SET(CMAKE_CXX_STANDARD 20)
|
|
SET(CMAKE_CXX_STANDARD_REQUIRED True)
|
|
|
|
SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wno-deprecated-enum-enum-conversion")
|
|
SET(CMAKE_C_FLAGS_RELEASE "-O3")
|
|
|
|
SET(JFJOCH_WRITER_ONLY OFF CACHE BOOL "Compile HDF5 writer only")
|
|
SET(JFJOCH_INSTALL_DRIVER_SOURCE OFF CACHE BOOL "Install kernel driver source (ignored if building writer only; necessary for RPM building)")
|
|
SET(JFJOCH_USE_CUDA ON CACHE BOOL "Compile Jungfraujoch with CUDA")
|
|
SET(JFJOCH_VIEWER_BUILD OFF CACHE BOOL "Compile Jungfraujoch viewer")
|
|
|
|
OPTION(SLS9 "Build with sls_detector_package v9.2.0" OFF)
|
|
|
|
SET(BUILD_SHARED_LIBS OFF)
|
|
SET(BUILD_TESTING OFF)
|
|
|
|
SET(ZSTD_LEGACY_SUPPORT OFF)
|
|
SET(ZSTD_MULTITHREAD_SUPPORT OFF)
|
|
SET(ZSTD_BUILD_PROGRAMS OFF)
|
|
SET(ZSTD_BUILD_SHARED OFF)
|
|
|
|
SET(SLS_USE_RECEIVER OFF)
|
|
SET(SLS_USE_RECEIVER_BINARIES OFF)
|
|
SET(SLS_BUILD_SHARED_LIBRARIES OFF)
|
|
|
|
SET(BUILD_FAST_INDEXER OFF)
|
|
SET(BUILD_FAST_INDEXER_STATIC ON)
|
|
|
|
SET(HDF5_ENABLE_SZIP_SUPPORT OFF)
|
|
SET(HDF5_ENABLE_SZIP_ENCODING OFF)
|
|
SET(HDF5_BUILD_EXAMPLES OFF)
|
|
SET(HDF5_BUILD_CPP_LIB OFF)
|
|
SET(HDF5_ENABLE_Z_LIB_SUPPORT OFF)
|
|
SET(HDF5_EXTERNALLY_CONFIGURED 1)
|
|
|
|
# TIFF
|
|
SET(jbig OFF)
|
|
SET(zstd OFF)
|
|
SET(lzma OFF)
|
|
SET(jpeg OFF)
|
|
SET(old-jpeg OFF)
|
|
|
|
# PNG
|
|
set(PNG_SHARED OFF)
|
|
set(PNG_STATIC ON)
|
|
set(PNG_EXECUTABLES OFF)
|
|
set(PNG_TESTS OFF)
|
|
|
|
INCLUDE(CheckLanguage)
|
|
CHECK_LANGUAGE(CUDA)
|
|
|
|
SET(CMAKE_CUDA_ARCHITECTURES 75 80 86 89) # T4, A100, RTX A4000, L4
|
|
SET(CMAKE_CUDA_STANDARD 17)
|
|
SET(CMAKE_CUDA_FLAGS_RELEASE "-O3")
|
|
|
|
SET(JFJOCH_CUDA_AVAILABLE OFF)
|
|
|
|
IF (CMAKE_CUDA_COMPILER)
|
|
IF (JFJOCH_USE_CUDA)
|
|
ENABLE_LANGUAGE(CUDA)
|
|
FIND_PACKAGE(CUDAToolkit REQUIRED)
|
|
SET(CMAKE_CUDA_RUNTIME_LIBRARY Static)
|
|
MESSAGE(STATUS "CUDA VERSION: ${CMAKE_CUDA_COMPILER_VERSION}")
|
|
ADD_COMPILE_DEFINITIONS(JFJOCH_USE_CUDA)
|
|
FIND_LIBRARY(CUDART_LIBRARY cudart_static PATHS ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES} REQUIRED)
|
|
SET(JFJOCH_CUDA_AVAILABLE ON)
|
|
ELSE()
|
|
MESSAGE(WARNING "CUDA Available, but disabled by user")
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
INCLUDE_DIRECTORIES(include)
|
|
INCLUDE(CheckIncludeFile)
|
|
|
|
FIND_LIBRARY(NUMA_LIBRARY NAMES numa DOC "NUMA Library")
|
|
CHECK_INCLUDE_FILE(numaif.h HAS_NUMAIF)
|
|
CHECK_INCLUDE_FILE(numa.h HAS_NUMA_H)
|
|
|
|
include(FetchContent)
|
|
|
|
FetchContent_Declare(tiff
|
|
GIT_REPOSITORY https://github.com/fleon-psi/libtiff
|
|
GIT_TAG v4.6.0
|
|
EXCLUDE_FROM_ALL)
|
|
|
|
FetchContent_Declare(
|
|
png
|
|
GIT_REPOSITORY https://github.com/pnggroup/libpng
|
|
GIT_TAG v1.6.49
|
|
EXCLUDE_FROM_ALL
|
|
)
|
|
|
|
FetchContent_Declare(hdf5
|
|
GIT_REPOSITORY https://github.com/HDFGroup/hdf5/
|
|
GIT_TAG hdf5_1.14.5
|
|
GIT_SHALLOW 1
|
|
EXCLUDE_FROM_ALL)
|
|
|
|
SET(PISTACHE_USE_CONTENT_ENCODING_DEFLATE ON)
|
|
SET(PISTACHE_BUILD_TESTS OFF)
|
|
SET(PISTACHE_USE_SSL ON)
|
|
|
|
FetchContent_Declare(
|
|
pistache_http
|
|
GIT_REPOSITORY https://github.com/fleon-psi/pistache
|
|
GIT_TAG 280b0f6f28f81745870bccb31f4a3a59958807f6
|
|
EXCLUDE_FROM_ALL
|
|
)
|
|
|
|
FetchContent_Declare(
|
|
zstd
|
|
GIT_REPOSITORY https://github.com/facebook/zstd
|
|
GIT_TAG 794ea1b0afca0f020f4e57b6732332231fb23c70
|
|
SOURCE_SUBDIR build/cmake
|
|
EXCLUDE_FROM_ALL
|
|
)
|
|
|
|
SET(SLS_DETECTOR_GIT_TAG "8.0.2")
|
|
IF(SLS9)
|
|
SET(SLS_DETECTOR_GIT_TAG "9.2.0")
|
|
ENDIF()
|
|
|
|
FetchContent_Declare(
|
|
sls_detector_package
|
|
GIT_REPOSITORY https://github.com/slsdetectorgroup/slsDetectorPackage
|
|
GIT_TAG ${SLS_DETECTOR_GIT_TAG}
|
|
)
|
|
|
|
FetchContent_Declare(
|
|
catch2
|
|
GIT_REPOSITORY https://github.com/catchorg/Catch2
|
|
GIT_TAG 4e8d92b
|
|
EXCLUDE_FROM_ALL
|
|
)
|
|
|
|
FetchContent_MakeAvailable(pistache_http zstd sls_detector_package catch2 hdf5 tiff png)
|
|
|
|
ADD_SUBDIRECTORY(jungfrau)
|
|
ADD_SUBDIRECTORY(compression)
|
|
ADD_SUBDIRECTORY(common)
|
|
ADD_SUBDIRECTORY(writer)
|
|
ADD_SUBDIRECTORY(frame_serialize)
|
|
ADD_SUBDIRECTORY(reader)
|
|
ADD_SUBDIRECTORY(detector_control)
|
|
ADD_SUBDIRECTORY(image_puller)
|
|
ADD_SUBDIRECTORY(preview)
|
|
ADD_SUBDIRECTORY(symmetry)
|
|
|
|
IF (JFJOCH_WRITER_ONLY)
|
|
MESSAGE(STATUS "Compiling HDF5 writer only")
|
|
ELSE()
|
|
ADD_SUBDIRECTORY(image_pusher)
|
|
ADD_SUBDIRECTORY(broker)
|
|
ADD_SUBDIRECTORY(fpga)
|
|
ADD_SUBDIRECTORY(acquisition_device)
|
|
ADD_SUBDIRECTORY(receiver)
|
|
ADD_SUBDIRECTORY(image_analysis)
|
|
ADD_SUBDIRECTORY(tests)
|
|
ADD_SUBDIRECTORY(tools)
|
|
ENDIF()
|
|
|
|
IF (JFJOCH_VIEWER_BUILD)
|
|
ADD_SUBDIRECTORY(viewer)
|
|
ENDIF()
|
|
|
|
IF (NOT JFJOCH_WRITER_ONLY)
|
|
ADD_CUSTOM_COMMAND(OUTPUT frontend/dist/index.html
|
|
COMMAND npm install
|
|
COMMAND npm run build
|
|
COMMAND npm run redocly
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/frontend)
|
|
ADD_CUSTOM_TARGET(frontend DEPENDS frontend/dist/index.html)
|
|
|
|
ADD_CUSTOM_TARGET(update_version
|
|
COMMAND bash update_version.sh
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
|
|
|
|
IF (JFJOCH_INSTALL_DRIVER_SOURCE)
|
|
INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/fpga/pcie_driver/
|
|
DESTINATION /usr/src/jfjoch-${JFJOCH_VERSION}
|
|
COMPONENT driver-dkms
|
|
FILES_MATCHING PATTERN "dkms.conf")
|
|
|
|
INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/fpga/pcie_driver/
|
|
DESTINATION /usr/src/jfjoch-${JFJOCH_VERSION}/src
|
|
COMPONENT driver-dkms
|
|
FILES_MATCHING PATTERN "*.c" PATTERN "*.h" PATTERN "Makefile")
|
|
ENDIF()
|
|
FILE(MAKE_DIRECTORY ${CMAKE_SOURCE_DIR}/frontend/dist/)
|
|
INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/frontend/dist/ DESTINATION share/jfjoch/frontend COMPONENT jfjoch )
|
|
ENDIF()
|
|
|
|
IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
|
SET(CMAKE_INSTALL_PREFIX /opt/jfjoch CACHE PATH "Default directory" FORCE)
|
|
ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
|
|
|
# Set Package Name
|
|
# Initialize CPACK_COMPONENTS_ALL with common components
|
|
SET(CPACK_COMPONENTS_ALL jfjoch writer)
|
|
IF (SLS9)
|
|
SET(CPACK_PACKAGE_NAME "jfjoch-slsdet9")
|
|
ELSE()
|
|
SET(CPACK_PACKAGE_NAME "jfjoch")
|
|
ENDIF()
|
|
SET(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION /usr/src /usr/share /usr/share/dbus-1 /usr/share/dbus-1/services)
|
|
|
|
IF (JFJOCH_INSTALL_DRIVER_SOURCE)
|
|
LIST(APPEND CPACK_COMPONENTS_ALL driver-dkms)
|
|
SET(CPACK_RPM_DRIVER-DKMS_PACKAGE_REQUIRES "dkms, gcc, bash, sed")
|
|
SET(CPACK_RPM_DRIVER-DKMS_PACKAGE_ARCHITECTURE "noarch")
|
|
SET(CPACK_RPM_DRIVER-DKMS_POST_INSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/fpga/pcie_driver/postinstall.sh)
|
|
SET(CPACK_RPM_DRIVER-DKMS_PRE_UNINSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/fpga/pcie_driver/preuninstall.sh)
|
|
ELSE()
|
|
SET(CPACK_COMPONENTS_ALL jfjoch writer)
|
|
ENDIF()
|
|
|
|
IF (JFJOCH_VIEWER_BUILD)
|
|
LIST(APPEND CPACK_COMPONENTS_ALL viewer)
|
|
ENDIF()
|
|
|
|
SET(CPACK_GENERATOR RPM)
|
|
SET(CPACK_RPM_COMPONENT_INSTALL ON)
|
|
SET(CPACK_RPM_MAIN_COMPONENT jfjoch)
|
|
SET(CPACK_RPM_PACKAGE_RELEASE_DIST ON)
|
|
SET(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
|
|
SET(CPACK_RPM_PACKAGE_VERSION ${JFJOCH_VERSION})
|
|
SET(CPACK_RPM_PACKAGE_RELEASE 1)
|
|
SET(CPACK_RPM_PACKAGE_SUMMARY "Jungfraujoch data acquisition system")
|
|
SET(CPACK_RPM_PACKAGE_DESCRIPTION "Jungfraujoch")
|
|
|
|
SET(CPACK_PACKAGE_CONTACT "Filip Leonarski <filip.leonarski@psi.ch>")
|
|
# Set The Vendor Name
|
|
SET(CPACK_PACKAGE_VENDOR "Paul Scherrer Institut")
|
|
|
|
# Set The License Information
|
|
SET(CPACK_RPM_PACKAGE_LICENSE "GPLv3")
|
|
|
|
INCLUDE(CPack)
|