CMAKE_MINIMUM_REQUIRED(VERSION 3.18) PROJECT(Jungfraujoch VERSION 1.0 LANGUAGES C CXX) SET(CMAKE_CXX_STANDARD 20) SET(CMAKE_CXX_STANDARD_REQUIRED True) SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -mtune=native") SET(CMAKE_C_FLAGS_RELEASE "-O3 -march=native -mtune=native") SET(HDF5_USE_STATIC_LIBRARIES ON) INCLUDE(CheckLanguage) CHECK_LANGUAGE(CUDA) SET(CMAKE_CUDA_ARCHITECTURES 70 75 80 86 89) # V100, T4, A100, RTX A4000, L4 SET(CMAKE_CUDA_STANDARD 17) SET(CMAKE_CUDA_FLAGS_RELEASE "-O3") IF (CMAKE_CUDA_COMPILER) ENABLE_LANGUAGE(CUDA) 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) ENDIF() SET(JFJOCH_COMPILE_WRITER ON CACHE BOOL "Compile HDF5 writer") SET(JFJOCH_COMPILE_RECEIVER ON CACHE BOOL "Compile image receiver") SET(JFJOCH_COMPILE_DETECTOR ON CACHE BOOL "Compile detector control") SET(JFJOCH_COMPILE_INDEXER ON CACHE BOOL "Compile indexer") SET(JFJOCH_COMPILE_TESTS OFF CACHE BOOL "Compile tests") 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) LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") FIND_PACKAGE(ZeroMQ 4 REQUIRED) ADD_SUBDIRECTORY(jungfrau) ADD_SUBDIRECTORY(frame_serialize) ADD_SUBDIRECTORY(grpc) ADD_SUBDIRECTORY(compression) ADD_SUBDIRECTORY(common) ADD_SUBDIRECTORY(broker) ADD_SUBDIRECTORY(etc) SET(jfjoch_executables jfjoch_broker) IF (JFJOCH_COMPILE_TESTS OR JFJOCH_COMPILE_RECEIVER) ADD_SUBDIRECTORY(fpga) ADD_SUBDIRECTORY(receiver) ADD_SUBDIRECTORY(image_analysis) LIST(APPEND jfjoch_executables jfjoch_receiver) ENDIF() IF (JFJOCH_COMPILE_DETECTOR) ADD_SUBDIRECTORY(detector_control) LIST(APPEND jfjoch_executables jfjoch_detector) ENDIF() IF (JFJOCH_COMPILE_TESTS OR JFJOCH_COMPILE_WRITER) ADD_SUBDIRECTORY(writer) LIST(APPEND jfjoch_executables jfjoch_writer jfjoch_writer_multi) ENDIF() IF (JFJOCH_COMPILE_TESTS) ADD_SUBDIRECTORY(tests) ADD_SUBDIRECTORY(tools) LIST(APPEND jfjoch_executables CatchTest DataAnalysisPerfTest CompressionBenchmark HDF5DatasetWriteTest jfjoch_udp_simulator) ENDIF() LIST(APPEND jfjoch_executables) ADD_CUSTOM_COMMAND(OUTPUT frontend_ui/build/index.html COMMAND npm run build WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/frontend_ui DEPENDS jfjoch-grpc-js) ADD_CUSTOM_TARGET(frontend DEPENDS frontend_ui/build/index.html) ADD_CUSTOM_TARGET(jfjoch DEPENDS ${jfjoch_executables}) 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)