Warning, /epic-lfhcal-tbana/NewStructure/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 cmake_minimum_required(VERSION 3.12)
0002 project(LFHCAL VERSION 1.0 LANGUAGES CXX)
0003
0004 # Attempt to extract -std=c++XX from root-config --cflags, default to 20 if not found
0005 execute_process(
0006 COMMAND root-config --cflags
0007 OUTPUT_VARIABLE ROOT_CFLAGS_STD
0008 OUTPUT_STRIP_TRAILING_WHITESPACE
0009 )
0010 string(REGEX MATCH "-std=c\\+\\+[0-9]+" STD_FLAG "${ROOT_CFLAGS_STD}")
0011 if(STD_FLAG)
0012 string(REGEX REPLACE "-std=c\\+\\+" "" CXX_STANDARD "${STD_FLAG}")
0013 set(CMAKE_CXX_STANDARD ${CXX_STANDARD})
0014 else()
0015 set(CMAKE_CXX_STANDARD 20)
0016 endif()
0017 set(CMAKE_CXX_STANDARD_REQUIRED ON)
0018
0019 message(STATUS "Using C++ standard: ${CMAKE_CXX_STANDARD}")
0020
0021 # Set C++17 standard
0022 set(CMAKE_CXX_STANDARD ${CMAKE_CXX_STANDARD})
0023 set(CMAKE_CXX_STANDARD_REQUIRED ON)
0024 set(CMAKE_CXX_EXTENSIONS OFF)
0025
0026 # Find ROOT package
0027 find_package(ROOT REQUIRED COMPONENTS Core RIO Hist Tree Gpad Graf)
0028 include(${ROOT_USE_FILE})
0029
0030 # Add common compiler flags
0031 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fPIC -ansi -Wno-overloaded-virtual -Wno-long-long -fno-common")
0032
0033 # Platform-specific settings
0034 if(UNIX AND NOT APPLE)
0035 # Linux
0036 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-rpath='${ORIGIN}'")
0037 endif()
0038
0039 # Include directories
0040 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
0041
0042 # Build h2g_decode subproject
0043 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/h2g_decode/CMakeLists.txt)
0044 # Set USE_ROOT to OFF for h2g_decode subproject
0045 set(USE_ROOT OFF CACHE BOOL "Disable ROOT for h2g_decode" FORCE)
0046 add_subdirectory(h2g_decode)
0047 set(H2G_DECODE_FOUND TRUE)
0048 add_compile_definitions(DECODE_HGCROC)
0049 # Add h2g_decode source directory to include paths
0050 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/h2g_decode/src)
0051 message(STATUS "Building h2g_decode from source")
0052 else()
0053 # Fallback to prebuilt library
0054 set(H2G_DECODE_FOUND FALSE)
0055 if(APPLE)
0056 set(H2G_DECODE_LIBRARY "${CMAKE_CURRENT_SOURCE_DIR}/lib/libh2g_decode.dylib")
0057 elseif(UNIX)
0058 set(H2G_DECODE_LIBRARY "${CMAKE_CURRENT_SOURCE_DIR}/lib/libh2g_decode.so")
0059 elseif(WIN32)
0060 set(H2G_DECODE_LIBRARY "${CMAKE_CURRENT_SOURCE_DIR}/lib/h2g_decode.dll")
0061 endif()
0062
0063 if(EXISTS ${H2G_DECODE_LIBRARY})
0064 message(STATUS "Found h2g_decode library: ${H2G_DECODE_LIBRARY}")
0065 set(H2G_DECODE_FOUND TRUE)
0066 add_compile_definitions(DECODE_HGCROC)
0067 # Create imported target for the library
0068 add_library(h2g_decode SHARED IMPORTED)
0069 set_target_properties(h2g_decode PROPERTIES IMPORTED_LOCATION ${H2G_DECODE_LIBRARY})
0070 target_include_directories(h2g_decode INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/lib)
0071 else()
0072 message(STATUS "h2g_decode library not found, HGCROC decoding will be disabled")
0073 endif()
0074 endif()
0075
0076 # Generate ROOT dictionary
0077 set(LINKDEF_FILE ${CMAKE_CURRENT_SOURCE_DIR}/LinkDef.h)
0078 set(ROOT_HEADERS
0079 Setup.h
0080 RootSetupWrapper.h
0081 Calib.h
0082 Event.h
0083 Tile.h
0084 HGCROC.h
0085 Caen.h
0086 TileSpectra.h
0087 TileTrend.h
0088 CalibSummary.h
0089 )
0090
0091 # Generate ROOT dictionary
0092 root_generate_dictionary(Cint ${ROOT_HEADERS} LINKDEF ${LINKDEF_FILE})
0093
0094 # Common library source files
0095 set(LIB_SOURCES
0096 Setup.cc
0097 RootSetupWrapper.cc
0098 Calib.cc
0099 Event.cc
0100 Tile.cc
0101 HGCROC.cc
0102 Caen.cc
0103 TileSpectra.cc
0104 TileTrend.cc
0105 CalibSummary.cc
0106 )
0107
0108 # Create the LFHCAL shared library
0109 add_library(LFHCAL SHARED
0110 ${LIB_SOURCES}
0111 Cint.cxx
0112 )
0113
0114 # Link against ROOT libraries
0115 target_link_libraries(LFHCAL ${ROOT_LIBRARIES})
0116
0117 # Waveform fitting library
0118 add_library(WaveformFitting STATIC
0119 waveform_fitting/waveform_fit_base.cc
0120 waveform_fitting/crystal_ball_fit.cc
0121 waveform_fitting/max_sample_fit.cc
0122 )
0123 target_include_directories(WaveformFitting PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
0124 target_link_libraries(WaveformFitting ${ROOT_LIBRARIES})
0125
0126 # Analysis library
0127 add_library(Analysis STATIC
0128 Analyses.cc
0129 HGCROC_Convert.cc
0130 )
0131 target_include_directories(Analysis PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
0132 target_link_libraries(Analysis ${ROOT_LIBRARIES})
0133
0134 # Convert executable
0135 add_executable(Convert Convert.cc)
0136 target_link_libraries(Convert LFHCAL Analysis WaveformFitting ${ROOT_LIBRARIES})
0137 if(H2G_DECODE_FOUND)
0138 target_compile_definitions(Convert PRIVATE DECODE_HGCROC)
0139 target_link_libraries(Convert h2g_decode)
0140 endif()
0141
0142 # DataPrep executable
0143 add_executable(DataPrep DataPrep.cc)
0144 target_link_libraries(DataPrep LFHCAL Analysis WaveformFitting ${ROOT_LIBRARIES})
0145 if(H2G_DECODE_FOUND)
0146 target_compile_definitions(DataPrep PRIVATE DECODE_HGCROC)
0147 target_link_libraries(DataPrep h2g_decode)
0148 endif()
0149
0150 # DataAna executable
0151 add_executable(DataAna DataAna.cc DataAnalysis.cc)
0152 target_link_libraries(DataAna LFHCAL Analysis WaveformFitting ${ROOT_LIBRARIES})
0153 if(H2G_DECODE_FOUND)
0154 target_compile_definitions(DataAna PRIVATE DECODE_HGCROC)
0155 target_link_libraries(DataAna h2g_decode)
0156 endif()
0157
0158 # Display executable
0159 add_executable(Display Display.cc EventDisplay.cc)
0160 target_link_libraries(Display LFHCAL Analysis WaveformFitting ${ROOT_LIBRARIES})
0161 if(H2G_DECODE_FOUND)
0162 target_compile_definitions(Display PRIVATE DECODE_HGCROC)
0163 target_link_libraries(Display h2g_decode)
0164 endif()
0165
0166 # Compare executable
0167 add_executable(Compare Compare.cc ComparisonCalib.cc)
0168 target_link_libraries(Compare LFHCAL ${ROOT_LIBRARIES})
0169
0170 # HGCROC_Conversion target (modified Convert with additional flags)
0171 if(H2G_DECODE_FOUND)
0172 add_executable(HGCROC_Conversion Convert.cc)
0173 target_compile_definitions(HGCROC_Conversion PRIVATE DECODE_HGCROC)
0174 target_link_libraries(HGCROC_Conversion LFHCAL Analysis WaveformFitting ${ROOT_LIBRARIES} h2g_decode)
0175 else()
0176 message(WARNING "HGCROC_Conversion target will not be built - h2g_decode library not found")
0177 endif()
0178
0179 # Set default build target
0180 set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT DataPrep)
0181