Back to home page

EIC code displayed by LXR

 
 

    


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