From addafd69e1007b61336c328292c89d57c66cfff4 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Thu, 20 Mar 2025 18:57:56 +0100 Subject: [PATCH 1/5] GPU Standalone: Modernize CMake, get rid of legacy include_directories(...) and add_definitions(...) --- GPU/GPUTracking/CMakeLists.txt | 54 ++++--- .../Standalone/Benchmark/CMakeLists.txt | 2 + GPU/GPUTracking/Standalone/CMakeLists.txt | 150 ++++++++---------- GPU/TPCFastTransformation/CMakeLists.txt | 2 + 4 files changed, 98 insertions(+), 110 deletions(-) diff --git a/GPU/GPUTracking/CMakeLists.txt b/GPU/GPUTracking/CMakeLists.txt index 5ce96d450f765..e69e11c91d157 100644 --- a/GPU/GPUTracking/CMakeLists.txt +++ b/GPU/GPUTracking/CMakeLists.txt @@ -262,6 +262,27 @@ string(REPLACE ".cxx" ".h" HDRS_TMP "${SRCS_DATATYPES}") set(HDRS_CINT_DATATYPES ${HDRS_CINT_DATATYPES} ${HDRS_TMP}) unset(HDRS_TMP) +set(INCDIRS + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/Definitions + ${CMAKE_CURRENT_SOURCE_DIR}/DataTypes + ${CMAKE_CURRENT_SOURCE_DIR}/Base + ${CMAKE_CURRENT_SOURCE_DIR}/SectorTracker + ${CMAKE_CURRENT_SOURCE_DIR}/TPCConvert + ${CMAKE_CURRENT_SOURCE_DIR}/dEdx + ${CMAKE_CURRENT_SOURCE_DIR}/ITS + ${CMAKE_CURRENT_SOURCE_DIR}/TRDTracking + ${CMAKE_CURRENT_SOURCE_DIR}/qa + ${CMAKE_CURRENT_SOURCE_DIR}/Global + ${CMAKE_CURRENT_SOURCE_DIR}/HLTHeaders + ${CMAKE_CURRENT_SOURCE_DIR}/Interface + ${CMAKE_CURRENT_SOURCE_DIR}/Merger + ${CMAKE_CURRENT_SOURCE_DIR}/Refit + ${CMAKE_CURRENT_SOURCE_DIR}/Debug + ${CMAKE_CURRENT_SOURCE_DIR}/DataCompression + ${CMAKE_CURRENT_SOURCE_DIR}/TPCClusterFinder + ${CMAKE_CURRENT_BINARY_DIR}/include_gpu_onthefly) + # Main CMake part for O2 if(ALIGPU_BUILD_TYPE STREQUAL "O2") o2_add_library(GPUDataTypes @@ -297,25 +318,7 @@ if(ALIGPU_BUILD_TYPE STREQUAL "O2") O2::DetectorsRaw O2::Steer O2::ML - PUBLIC_INCLUDE_DIRECTORIES . - Definitions - DataTypes - Base - SectorTracker - TPCConvert - dEdx - ITS - TRDTracking - qa - Global - HLTHeaders - Interface - Merger - Refit - Debug - DataCompression - TPCClusterFinder - ${CMAKE_CURRENT_BINARY_DIR}/include_gpu_onthefly + PUBLIC_INCLUDE_DIRECTORIES ${INCDIRS} SOURCES ${SRCS} ${SRCS_NO_CINT} ${SRCS_NO_H}) target_include_directories( @@ -349,15 +352,18 @@ if(ALIGPU_BUILD_TYPE STREQUAL "Standalone") add_library(${MODULE} SHARED ${SRCS} ${SRCS_NO_CINT} ${SRCS_NO_H} ${SRCS_DATATYPES}) set(targetName ${MODULE}) add_library(O2::${MODULE} ALIAS ${MODULE}) - install(TARGETS ${MODULE}) + install(TARGETS ${targetName}) + target_link_libraries(${targetName} PUBLIC TPCFastTransformation) + target_include_directories(${targetName} PUBLIC ${INCDIRS}) if(GPUCA_CONFIG_ROOT) - ROOT_GENERATE_DICTIONARY(G__${MODULE} ${HDRS_CINT_O2} ${HDRS_CINT_DATATYPES} ${HDRS_CINT_O2_ADDITIONAL} GPUTrackingLinkDef_Standalone.h) - target_sources(${MODULE} PRIVATE G__${MODULE}) + ROOT_GENERATE_DICTIONARY(G__${targetName} ${HDRS_CINT_O2} ${HDRS_CINT_DATATYPES} ${HDRS_CINT_O2_ADDITIONAL} GPUTrackingLinkDef_Standalone.h MODULE ${targetName}) INSTALL(FILES - ${CMAKE_CURRENT_BINARY_DIR}/lib${MODULE}_rdict.pcm - ${CMAKE_CURRENT_BINARY_DIR}/lib${MODULE}.rootmap + ${CMAKE_CURRENT_BINARY_DIR}/lib${targetName}_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/lib${targetName}.rootmap DESTINATION .) + else() + target_compile_definitions(${targetName} PRIVATE GPUCA_NO_ROOT) endif() endif() diff --git a/GPU/GPUTracking/Standalone/Benchmark/CMakeLists.txt b/GPU/GPUTracking/Standalone/Benchmark/CMakeLists.txt index de2d683036193..e418d94b62cb2 100644 --- a/GPU/GPUTracking/Standalone/Benchmark/CMakeLists.txt +++ b/GPU/GPUTracking/Standalone/Benchmark/CMakeLists.txt @@ -27,6 +27,8 @@ endif() if(ALIGPU_BUILD_TYPE STREQUAL "Standalone") add_executable(ca ${SRCS}) set(targetName ca) + target_link_libraries(${targetName} PUBLIC GPUTracking) + endif() target_compile_definitions(${targetName} PUBLIC $) diff --git a/GPU/GPUTracking/Standalone/CMakeLists.txt b/GPU/GPUTracking/Standalone/CMakeLists.txt index 5ed511173f53e..cf5a447c26669 100644 --- a/GPU/GPUTracking/Standalone/CMakeLists.txt +++ b/GPU/GPUTracking/Standalone/CMakeLists.txt @@ -80,7 +80,6 @@ if(GPUCA_CONFIG_VC) find_package(Vc REQUIRED) else() set(Vc_FOUND OFF) - add_definitions(-DGPUCA_NO_VC) endif() if(GPUCA_BUILD_EVENT_DISPLAY) @@ -111,118 +110,97 @@ else() set(OpenGL_FOUND OFF) endif() -if(GPUCA_CONFIG_O2) - add_definitions(-DGPUCA_TPC_GEOMETRY_O2) -endif() - if(GPUCA_CONFIG_ROOT) find_package(ROOT CONFIG REQUIRED) -else() - add_definitions(-DGPUCA_NO_ROOT) endif() find_package(Microsoft.GSL REQUIRED HINTS "$ENV{MS_GSL_ROOT}/share/cmake") if(GPUCA_CONFIG_FMT) find_package(fmt REQUIRED HINTS $ENV{FMT_ROOT}) else() - add_definitions(-DGPUCA_NO_FMT) + set(fmt_FOUND OFF) endif() # Detect GPU Backends find_package(O2GPU) -# Global include directories -include_directories(${GPU_DIR}/Common - ${GPU_DIR}/Utils - ${GPU_DIR}/TPCFastTransformation - ${GPUTRACKING_DIR} - ${GPUTRACKING_DIR}/Debug - ${GPUTRACKING_DIR}/Definitions - ${GPUTRACKING_DIR}/DataTypes - ${GPUTRACKING_DIR}/Base - ${GPUTRACKING_DIR}/dEdx - ${GPUTRACKING_DIR}/TPCConvert - ${GPUTRACKING_DIR}/Global - ${GPUTRACKING_DIR}/HLTHeaders - ${GPUTRACKING_DIR}/Merger - ${GPUTRACKING_DIR}/Refit - ${GPUTRACKING_DIR}/qa - ${GPUTRACKING_DIR}/SectorTracker - ${GPUTRACKING_DIR}/DataCompression - ${GPUTRACKING_DIR}/TRDTracking - ${GPUTRACKING_DIR}/TPCClusterFinder - ${GPUTRACKING_DIR}/ITS - ${GPUTRACKING_DIR}/Interface - ${O2_DIR}/Common/Field/include - ${O2_DIR}/Common/Constants/include - ${O2_DIR}/Common/MathUtils/include - ${O2_DIR}/Common/Utils/include - ${O2_DIR}/DataFormats/common/include - ${O2_DIR}/DataFormats/Detectors/Common/include - ${O2_DIR}/DataFormats/Detectors/ITSMFT/common/include - ${O2_DIR}/DataFormats/Detectors/ITSMFT/ITS/include - ${O2_DIR}/DataFormats/Detectors/TOF/include - ${O2_DIR}/DataFormats/Detectors/TPC/include - ${O2_DIR}/DataFormats/Detectors/TRD/include - ${O2_DIR}/DataFormats/Headers/include - ${O2_DIR}/DataFormats/MemoryResources/include - ${O2_DIR}/DataFormats/Reconstruction/include - ${O2_DIR}/DataFormats/Reconstruction/src - ${O2_DIR}/DataFormats/simulation/include - ${O2_DIR}/Detectors/Base/include - ${O2_DIR}/Detectors/Base/src - ${O2_DIR}/Detectors/ITSMFT/common/base/include - ${O2_DIR}/Detectors/ITSMFT/ITS/base/include - ${O2_DIR}/Detectors/ITSMFT/ITS/tracking/include - ${O2_DIR}/Detectors/ITSMFT/ITS/tracking/GPU - ${O2_DIR}/Detectors/ITSMFT/ITS/tracking/GPU/cuda - ${O2_DIR}/Detectors/ITSMFT/ITS/tracking/GPU/hip - ${O2_DIR}/Detectors/Raw/include - ${O2_DIR}/Detectors/TOF/base/include - ${O2_DIR}/Detectors/TPC/base/include - ${O2_DIR}/Detectors/TRD/base/include - ${O2_DIR}/Detectors/TRD/base/src - ${O2_DIR}/Framework/Foundation/3rdparty/include) - # Create main targets add_subdirectory(../../ GPU) -add_library(standalone_support SHARED ${GPUTRACKING_DIR}/utils/EmptyFile.cxx) +add_library(standalone_support SHARED ${O2_DIR}/Common/Field/src/MagFieldFast.cxx + ${O2_DIR}/DataFormats/Detectors/TPC/src/CompressedClusters.cxx + ${O2_DIR}/DataFormats/simulation/src/MCCompLabel.cxx + ${O2_DIR}/DataFormats/Reconstruction/src/TrackParametrization.cxx + ${O2_DIR}/DataFormats/Reconstruction/src/TrackParametrizationWithError.cxx + ${O2_DIR}/DataFormats/Reconstruction/src/Vertex.cxx + ${O2_DIR}/DataFormats/Reconstruction/src/TrackLTIntegral.cxx + ${O2_DIR}/DataFormats/Reconstruction/src/TrackParametrization.cxx + ${O2_DIR}/DataFormats/Reconstruction/src/TrackParametrizationWithError.cxx + ${O2_DIR}/Detectors/TRD/base/src/GeometryBase.cxx + ${O2_DIR}/Detectors/Base/src/MatLayerCylSet.cxx + ${O2_DIR}/Detectors/Base/src/MatLayerCyl.cxx + ${O2_DIR}/Detectors/Base/src/Ray.cxx + ${O2_DIR}/Detectors/Base/src/Propagator.cxx + ${O2_DIR}/Detectors/ITSMFT/ITS/tracking/src/Road.cxx) + target_compile_definitions(standalone_support PUBLIC $) +target_include_directories(standalone_support PUBLIC $) + +target_include_directories(standalone_support PUBLIC + ${GPU_DIR}/Common + ${GPU_DIR}/Utils + ${O2_DIR}/Common/Field/include + ${O2_DIR}/Common/Constants/include + ${O2_DIR}/Common/MathUtils/include + ${O2_DIR}/Common/Utils/include + ${O2_DIR}/DataFormats/common/include + ${O2_DIR}/DataFormats/Detectors/Common/include + ${O2_DIR}/DataFormats/Detectors/ITSMFT/common/include + ${O2_DIR}/DataFormats/Detectors/ITSMFT/ITS/include + ${O2_DIR}/DataFormats/Detectors/TOF/include + ${O2_DIR}/DataFormats/Detectors/TPC/include + ${O2_DIR}/DataFormats/Detectors/TRD/include + ${O2_DIR}/DataFormats/Headers/include + ${O2_DIR}/DataFormats/MemoryResources/include + ${O2_DIR}/DataFormats/Reconstruction/include + ${O2_DIR}/DataFormats/Reconstruction/src + ${O2_DIR}/DataFormats/simulation/include + ${O2_DIR}/Detectors/Base/include + ${O2_DIR}/Detectors/Base/src + ${O2_DIR}/Detectors/ITSMFT/common/base/include + ${O2_DIR}/Detectors/ITSMFT/ITS/base/include + ${O2_DIR}/Detectors/ITSMFT/ITS/tracking/include + ${O2_DIR}/Detectors/ITSMFT/ITS/tracking/GPU + ${O2_DIR}/Detectors/ITSMFT/ITS/tracking/GPU/cuda + ${O2_DIR}/Detectors/ITSMFT/ITS/tracking/GPU/hip + ${O2_DIR}/Detectors/Raw/include + ${O2_DIR}/Detectors/TOF/base/include + ${O2_DIR}/Detectors/TPC/base/include + ${O2_DIR}/Detectors/TRD/base/include + ${O2_DIR}/Detectors/TRD/base/src + ${O2_DIR}/Framework/Foundation/3rdparty/include) target_link_libraries(standalone_support PUBLIC# dl pthread - Microsoft.GSL::GSL - TPCFastTransformation) -target_link_libraries(GPUTracking PUBLIC TPCFastTransformation standalone_support) -target_link_libraries(ca PUBLIC GPUTracking) - -# Add all sources and dependencies to to support based on Config File -target_sources(standalone_support PRIVATE - ${O2_DIR}/Common/Field/src/MagFieldFast.cxx - ${O2_DIR}/DataFormats/Detectors/TPC/src/CompressedClusters.cxx - ${O2_DIR}/DataFormats/simulation/src/MCCompLabel.cxx - ${O2_DIR}/DataFormats/Reconstruction/src/TrackParametrization.cxx - ${O2_DIR}/DataFormats/Reconstruction/src/TrackParametrizationWithError.cxx - ${O2_DIR}/DataFormats/Reconstruction/src/Vertex.cxx - ${O2_DIR}/DataFormats/Reconstruction/src/TrackLTIntegral.cxx - ${O2_DIR}/DataFormats/Reconstruction/src/TrackParametrization.cxx - ${O2_DIR}/DataFormats/Reconstruction/src/TrackParametrizationWithError.cxx - ${O2_DIR}/Detectors/TRD/base/src/GeometryBase.cxx - ${O2_DIR}/Detectors/Base/src/MatLayerCylSet.cxx - ${O2_DIR}/Detectors/Base/src/MatLayerCyl.cxx - ${O2_DIR}/Detectors/Base/src/Ray.cxx - ${O2_DIR}/Detectors/Base/src/Propagator.cxx - ${O2_DIR}/Detectors/ITSMFT/ITS/tracking/src/Road.cxx) + Microsoft.GSL::GSL) + +target_link_libraries(GPUTracking PUBLIC standalone_support) +target_link_libraries(TPCFastTransformation PUBLIC standalone_support) + +if(GPUCA_CONFIG_O2) + target_compile_definitions(GPUTracking PRIVATE GPUCA_TPC_GEOMETRY_O2) +endif() if(GPUCA_CONFIG_FMT) target_link_libraries(standalone_support PUBLIC fmt::fmt) - target_link_libraries(TPCFastTransformation PUBLIC fmt::fmt) +else() + target_compile_definitions(standalone_support PUBLIC GPUCA_NO_FMT) endif() if(GPUCA_CONFIG_VC) target_link_libraries(standalone_support PUBLIC Vc::Vc) - target_link_libraries(TPCFastTransformation PUBLIC Vc::Vc) +else() + target_compile_definitions(standalone_support PUBLIC GPUCA_NO_VC) endif() if(GPUCA_CONFIG_ROOT) diff --git a/GPU/TPCFastTransformation/CMakeLists.txt b/GPU/TPCFastTransformation/CMakeLists.txt index 133bf35281b55..c7869467d15b5 100644 --- a/GPU/TPCFastTransformation/CMakeLists.txt +++ b/GPU/TPCFastTransformation/CMakeLists.txt @@ -119,6 +119,8 @@ endif() if(ALIGPU_BUILD_TYPE STREQUAL "Standalone") add_library(${MODULE} SHARED ${SRCS}) + set(targetName ${MODULE}) + target_include_directories(${targetName} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) endif() install (FILES macro/TPCFastTransformInit.C From 79ce47b6d01cfc89c5c5d71980649ed0802f5de6 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 22 Mar 2025 20:15:59 +0100 Subject: [PATCH 2/5] GPU CMake: remove unnecessary compile definitions --- GPU/Common/CMakeLists.txt | 2 -- GPU/Utils/CMakeLists.txt | 2 -- 2 files changed, 4 deletions(-) diff --git a/GPU/Common/CMakeLists.txt b/GPU/Common/CMakeLists.txt index bacf4454c39fd..efac4fc436758 100644 --- a/GPU/Common/CMakeLists.txt +++ b/GPU/Common/CMakeLists.txt @@ -37,8 +37,6 @@ if(ALIGPU_BUILD_TYPE STREQUAL "O2") PUBLIC $ $) - target_compile_definitions(${targetName} PRIVATE GPUCA_O2_LIB GPUCA_TPC_GEOMETRY_O2) - # cuda test, only compile if CUDA if(CUDA_ENABLED) o2_add_test(GPUsortCUDA NAME test_GPUsortCUDA diff --git a/GPU/Utils/CMakeLists.txt b/GPU/Utils/CMakeLists.txt index 01ca3eb59c029..bf23c792c2034 100644 --- a/GPU/Utils/CMakeLists.txt +++ b/GPU/Utils/CMakeLists.txt @@ -31,7 +31,5 @@ if(ALIGPU_BUILD_TYPE STREQUAL "O2") HEADERS ${HDRS_CINT} LINKDEF GPUUtilsLinkDef.h) - target_compile_definitions(${targetName} PRIVATE GPUCA_O2_LIB GPUCA_TPC_GEOMETRY_O2) - install(FILES ${HDRS_CINT} ${HDRS_INSTALL} DESTINATION include/GPU) endif() From 76a36b7039e9465c6b6e068c4f4f38bad2aa36cd Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 22 Mar 2025 20:31:19 +0100 Subject: [PATCH 3/5] GPU Standalone: Fix compilation without FMT --- GPU/GPUTracking/Definitions/GPULogging.h | 2 +- GPU/GPUTracking/Standalone/CMakeLists.txt | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/GPU/GPUTracking/Definitions/GPULogging.h b/GPU/GPUTracking/Definitions/GPULogging.h index 4ad6b70b2fd8b..c8ba635d1af7a 100644 --- a/GPU/GPUTracking/Definitions/GPULogging.h +++ b/GPU/GPUTracking/Definitions/GPULogging.h @@ -69,7 +69,7 @@ #define GPUCritical(...) GPUWarning(__VA_ARGS__) #define GPUFatal(string, ...) \ { \ - fprintf(stderr, string "\n", __VA_ARGS__); \ + fprintf(stderr, string "\n", ##__VA_ARGS__); \ exit(1); \ } #endif diff --git a/GPU/GPUTracking/Standalone/CMakeLists.txt b/GPU/GPUTracking/Standalone/CMakeLists.txt index cf5a447c26669..5a39f082f2bbd 100644 --- a/GPU/GPUTracking/Standalone/CMakeLists.txt +++ b/GPU/GPUTracking/Standalone/CMakeLists.txt @@ -128,7 +128,6 @@ find_package(O2GPU) add_subdirectory(../../ GPU) add_library(standalone_support SHARED ${O2_DIR}/Common/Field/src/MagFieldFast.cxx ${O2_DIR}/DataFormats/Detectors/TPC/src/CompressedClusters.cxx - ${O2_DIR}/DataFormats/simulation/src/MCCompLabel.cxx ${O2_DIR}/DataFormats/Reconstruction/src/TrackParametrization.cxx ${O2_DIR}/DataFormats/Reconstruction/src/TrackParametrizationWithError.cxx ${O2_DIR}/DataFormats/Reconstruction/src/Vertex.cxx From 3ee99d553a04583824af4b86b7aa1088bebb0466 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 22 Mar 2025 20:33:14 +0100 Subject: [PATCH 4/5] GPU: Fix incorrect printf syntax --- GPU/GPUTracking/Global/GPUChainTrackingClusterizer.cxx | 2 +- GPU/GPUTracking/Global/GPUChainTrackingDebugAndProfiling.cxx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/GPU/GPUTracking/Global/GPUChainTrackingClusterizer.cxx b/GPU/GPUTracking/Global/GPUChainTrackingClusterizer.cxx index a48050a6cacbc..4047dcae0a6b3 100644 --- a/GPU/GPUTracking/Global/GPUChainTrackingClusterizer.cxx +++ b/GPU/GPUTracking/Global/GPUChainTrackingClusterizer.cxx @@ -124,7 +124,7 @@ void GPUChainTracking::TPCClusterizerEnsureZSOffsets(uint32_t iSector, const CfF } if (pagesEndpoint != nPagesExpected) { - GPUFatal("Sector %d, Endpoint %d, Fragment %d: TPC raw page count mismatch: expected %d / buffered %lu", iSector, endpoint, fragment.index, pagesEndpoint, nPagesExpected); + GPUFatal("Sector %d, Endpoint %d, Fragment %d: TPC raw page count mismatch: expected %d / buffered %u", iSector, endpoint, fragment.index, pagesEndpoint, nPagesExpected); } if (nAdcDecoded != nAdcsExpected) { diff --git a/GPU/GPUTracking/Global/GPUChainTrackingDebugAndProfiling.cxx b/GPU/GPUTracking/Global/GPUChainTrackingDebugAndProfiling.cxx index 38e1cd0036c16..c42d9622f5332 100644 --- a/GPU/GPUTracking/Global/GPUChainTrackingDebugAndProfiling.cxx +++ b/GPU/GPUTracking/Global/GPUChainTrackingDebugAndProfiling.cxx @@ -258,13 +258,13 @@ void GPUChainTracking::SanityCheck() const auto& ref = trk.getClusterRef(); if (ref.getFirstEntry() > mIOPtrs.nOutputClusRefsTPCO2) { if (nErrors++ < 1000) { - GPUError("Invalid getFirst() entry in cluster reference: %u > $u", ref.getFirstEntry(), mIOPtrs.nOutputClusRefsTPCO2); + GPUError("Invalid getFirst() entry in cluster reference: %u > %u", ref.getFirstEntry(), mIOPtrs.nOutputClusRefsTPCO2); continue; } } if (ref.getFirstEntry() + (ref.getEntries() * 3 + 1) / 2 > mIOPtrs.nOutputClusRefsTPCO2) { if (nErrors++ < 1000) { - GPUError("Invalid getEntries() entry in cluster reference: %u > $u", ref.getFirstEntry() + (ref.getEntries() * 3 + 1) / 2, mIOPtrs.nOutputClusRefsTPCO2); + GPUError("Invalid getEntries() entry in cluster reference: %u > %u", ref.getFirstEntry() + (ref.getEntries() * 3 + 1) / 2, mIOPtrs.nOutputClusRefsTPCO2); continue; } } From 935ff4abe076779e2eb1e2457174d2f7cce1b059 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Sat, 22 Mar 2025 20:41:33 +0100 Subject: [PATCH 5/5] GPU Standalone: Add CMake check to require ROOT if building event display --- GPU/GPUTracking/Standalone/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/GPU/GPUTracking/Standalone/CMakeLists.txt b/GPU/GPUTracking/Standalone/CMakeLists.txt index 5a39f082f2bbd..1f48b4fc5ade1 100644 --- a/GPU/GPUTracking/Standalone/CMakeLists.txt +++ b/GPU/GPUTracking/Standalone/CMakeLists.txt @@ -112,6 +112,8 @@ endif() if(GPUCA_CONFIG_ROOT) find_package(ROOT CONFIG REQUIRED) +elseif(GPUCA_BUILD_EVENT_DISPLAY) + message(FATAL_ERROR "Cannot build event display without ROOT") endif() find_package(Microsoft.GSL REQUIRED HINTS "$ENV{MS_GSL_ROOT}/share/cmake")