######################################################## # cmake file for building MarlinTPC Package CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR) ######################################################## # project name PROJECT(MarlinTPC) MESSAGE(STATUS "\n-- >>> Processing CMakeLists.txt for ${PROJECT_NAME} ...") # reuse all non-build-directory library paths in binary targets after # installation SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # in MarlinTPC two libraries are built, which both should be versioned # so the version definition is a link to a file in tpcconddata INCLUDE ( "MarlinTPC_Version" ) ENABLE_TESTING() ### DEPENDENCIES ############################################################ # Modules for FIND_PACKAGE command of cmake FIND_PACKAGE( ILCUTIL REQUIRED COMPONENTS ILCSOFT_CMAKE_MODULES ) # load default settings from ILCSOFT_CMAKE_MODULES INCLUDE( ilcsoft_default_settings ) # Integrate build of sub-package TPCCondData as an essential part of MarlinTPC for convenience. # Historically it was built alongside the other processors, but false dependencies could easily # break its stand-alone build feature. This way, such errors will not go unnoticed anymore. ADD_SUBDIRECTORY(tpcconddata) INCLUDE_DIRECTORIES( ${TPCCondData_INCLUDE_DIRS} ) LINK_LIBRARIES( ${TPCCondData_LIBRARIES} ) # Set the default installation directory to be the source directory # ----------------------------------------------------------------- # As CMAKE_INSTALL_PREFIX(_INITIALIZED_TO_DEFAULT) keeps its status through # all add_subdirectory calls, TPCCondData needs its own install prefix # In consecutive calls to cmake the install prefix will already be defined # from the respective last call and thus one can check, if it was set to the # default project source dir, instead of checking again # CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT, which becomes unset in # consecutive cmake calls. IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR (${CMAKE_INSTALL_PREFIX} STREQUAL ${PROJECT_SOURCE_DIR})) SET( CMAKE_INSTALL_PREFIX ${PROJECT_SOURCE_DIR} CACHE PATH "install prefix path - overwrite with -D CMAKE_INSTALL_PREFIX = ..." FORCE ) ENDIF() MESSAGE(STATUS "CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX} - overwrite with -D CMAKE_INSTALL_PREFIX" ) # FIXME which packages are really REQUIRED ... # TODO with the current build scheme all these packages will be used for the # MarlinTPC lib and the binaries below (global include) with a newer minimum # cmake version one could switch to target-specific includes (and link # libraries). FIND_PACKAGE( Marlin 1.0 REQUIRED ) FIND_PACKAGE( LCCD REQUIRED ) FIND_PACKAGE( AIDA REQUIRED ) FIND_PACKAGE( ROOT REQUIRED COMPONENTS Minuit2 ) FIND_PACKAGE( CLHEP REQUIRED ) FIND_PACKAGE( GSL REQUIRED ) FIND_PACKAGE( KalTest ) FIND_PACKAGE( KalDet ) FIND_PACKAGE( PathFinder ) FIND_PACKAGE( GBL ) FIND_PACKAGE( MarlinUtil ) FOREACH( pkg Marlin LCCD AIDA ROOT CLHEP GSL Mokka KalTest KalDet ) IF( ${pkg}_FOUND ) INCLUDE_DIRECTORIES( ${${pkg}_INCLUDE_DIRS} ) LINK_LIBRARIES( ${${pkg}_LIBRARIES} ) LINK_LIBRARIES( ${${pkg}_COMPONENT_LIBRARIES} ) ADD_DEFINITIONS( ${${pkg}_DEFINITIONS} ) ENDIF() ENDFOREACH() # activate relevant source code fractions by adding pre-processor definitions IF( LCCD_FOUND ) ADD_DEFINITIONS( "-DUSE_LCCD" ) ENDIF() IF( KalTest_FOUND AND KalDet_FOUND ) MESSAGE ( STATUS "Check for KalTest + KalDet -- works" ) ADD_DEFINITIONS( -DUSE_TRACK_FITTER_KALMAN ) ELSE() MESSAGE( STATUS "KalTest + KalDet not found -- TrackFitterKalman will not be available!" ) ENDIF() IF( PathFinder_FOUND ) ADD_DEFINITIONS( "-DUSE_PATHFINDER" ) ELSE() MESSAGE( STATUS "PathFinder not found, track finding routine will not be available." ) ENDIF() IF( GBL_FOUND ) ADD_DEFINITIONS( "-DUSE_GBL" ) ELSE() MESSAGE( STATUS "GBL not found, track fitting with GBL will not be available." ) ENDIF() IF( MarlinUtil_FOUND ) ADD_DEFINITIONS( "-DUSE_MARLINUTIL" ) ELSE() MESSAGE( STATUS "MarlinUtil not found, CEDViewer will not be able to show raw tracker data." ) ENDIF() ### DOCUMENTATION ########################################################### OPTION( INSTALL_DOC "Set to OFF to skip build/install Documentation" OFF ) IF( INSTALL_DOC ) ADD_SUBDIRECTORY( ./doc ) ENDIF() ### LIBRARY AND TOOLS ####################################################### # require proper c++ #ADD_DEFINITIONS( "-Wall -ansi -pedantic" ) #ADD_DEFINITIONS( "-Wno-long-long" ) # ==============================MarlinTPC library ============================ SET( libname ${PROJECT_NAME} ) MACRO( ADD_MARLINTPC_LIBDIR _input_dir ) INCLUDE_DIRECTORIES( ${_input_dir}/include ) AUX_SOURCE_DIRECTORY( ${_input_dir}/src library_sources ) INSTALL_DIRECTORY( ${_input_dir}/include/ DESTINATION include/marlintpc FILES_MATCHING PATTERN "*.h" ) INSTALL_DIRECTORY( ${_input_dir}/include/ DESTINATION include/marlintpc FILES_MATCHING PATTERN "*.hh" ) ENDMACRO() ADD_MARLINTPC_LIBDIR( ./general ) ADD_MARLINTPC_LIBDIR( ./reconstruction/photoelectric ) ADD_MARLINTPC_LIBDIR( ./reconstruction/general ) ADD_MARLINTPC_LIBDIR( ./reconstruction/padbased ) ADD_MARLINTPC_LIBDIR( ./reconstruction/pixelbased ) ADD_MARLINTPC_LIBDIR( ./reconstruction/trackreco ) ADD_MARLINTPC_LIBDIR( ./reconstruction ) ADD_MARLINTPC_LIBDIR( ./digitisation ) ADD_MARLINTPC_LIBDIR( ./tools/HepRepOutput ) ADD_MARLINTPC_LIBDIR( ./tools/Position ) ADD_MARLINTPC_LIBDIR( ./tools/LCObjectCopier ) ADD_MARLINTPC_LIBDIR( ./tools/IntersectionCalculator ) ADD_MARLINTPC_LIBDIR( ./tools/TrackCircleIntersectionCalculator ) ADD_MARLINTPC_LIBDIR( ./tools/PadGeometryChecker ) ADD_MARLINTPC_LIBDIR( ./tools/processors ) ADD_MARLINTPC_LIBDIR( ./tools/Field ) ADD_MARLINTPC_LIBDIR( ./tools/DataConversionUtils ) ADD_MARLINTPC_LIBDIR( ./cedviewerextension ) ADD_MARLINTPC_LIBDIR( ./calibration ) ADD_MARLINTPC_LIBDIR( ./simulation/TPCCloudSimulation ) ADD_MARLINTPC_LIBDIR( ./simulation/TPCPhotoelectricSimulation ) ADD_MARLINTPC_LIBDIR( ./simulation ) ADD_MARLINTPC_LIBDIR( ./validation/processors ) ADD_MARLINTPC_LIBDIR( ./analysis ) if ( ${ROOT_VERSION_MAJOR} GREATER 5 ) MESSAGE(WARNING "*****************************************************\n" " removing ./reconstruction/pixelbased/src/GridPixXrayObjectCalculatorProcessor.cc from build \n" " as it is not compatible with ROOT6 !!!! \n" " *****************************************************\n" ) LIST( REMOVE_ITEM library_sources "./reconstruction/pixelbased/src/GridPixXrayObjectCalculatorProcessor.cc" ) endif() ADD_SHARED_LIBRARY( ${libname} ${library_sources} ) INSTALL_SHARED_LIBRARY( ${libname} DESTINATION lib ) # Make install path of libMarlinTPC.so known to other binaries in the project SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH};${CMAKE_INSTALL_PREFIX}/lib") FOREACH( pkg Marlin MarlinUtil LCCD AIDA ROOT CLHEP GSL Mokka KalTest KalDet PathFinder GBL) IF( ${pkg}_FOUND ) INCLUDE_DIRECTORIES( ${${pkg}_INCLUDE_DIRS} ) TARGET_LINK_LIBRARIES( ${libname} ${${pkg}_LIBRARIES} ) TARGET_LINK_LIBRARIES( ${libname} ${${pkg}_COMPONENT_LIBRARIES} ) ADD_DEFINITIONS( ${${pkg}_DEFINITIONS} ) ENDIF() ENDFOREACH() # unclear, why this should be necessary, (see global LINK_LIBRARIES at # TPCCondData, above), but it somehow helps with some unresolved links: #TARGET_LINK_LIBRARIES( ${libname} ${TPCCondData_LIBRARIES} ) # ===== install TPCCondData together with MarlinTPC for convenience ... INSTALL_DIRECTORY( ${TPCCondData_INCLUDE_DIRS}/ DESTINATION include/marlintpc) # ==============================MarlinTPC tools ============================== MACRO( ADD_MARLINTPC_TOOL _name ) ADD_EXECUTABLE( ${_name} ${ARGN} ) TARGET_LINK_LIBRARIES( ${_name} ${libname} ) INSTALL( TARGETS ${_name} DESTINATION bin ) ENDMACRO() ADD_MARLINTPC_TOOL( EmptyLCIOFileGenerator ./tools/EmptyLCIOFileGenerator/EmptyLCIOFileGenerator.cc ) ADD_MARLINTPC_TOOL( PositionGenerator ./tools/PositionGenerator/PositionGenerator.cc ) ADD_MARLINTPC_TOOL( FieldMapGenerator ./tools/FieldMapGenerator/FieldMapGenerator.cc ) ADD_MARLINTPC_TOOL( TimePixToLCIOConverter ./tools/TimePixToLCIOConverter/TimePixToLCIOConverter.cpp ) ADD_MARLINTPC_TOOL( MokkaToDigitisationConverter ./tools/MokkaToDigitisationConverter/MokkaToDigitisationConverter.cc ) ADD_MARLINTPC_TOOL( MappingGenerator ./tools/MappingGenerator/MappingGenerator.cpp ) ADD_MARLINTPC_TOOL( ChannelCorrectionGenerator ./tools/ChannelCorrectionGenerator/ChannelCorrectionGenerator.cpp ) ADD_MARLINTPC_TOOL( LCTimestampConverter ./tools/LCTimestampConverter/LCTimestampConverter.cpp ) ADD_MARLINTPC_TOOL( testSignalSplitter ./validation/testSignalSplitter/testSignalSplitter.cpp ) ADD_MARLINTPC_TOOL( generateMuons ./validation/generateMuons/generateMuons.cpp ) ADD_MARLINTPC_TOOL( generateElectronsForLP1 ./validation/generateElectronsForLP1/generateElectronsForLP1.cpp ) ADD_MARLINTPC_TOOL( CreateMuonsLCIO ./validation/TPCGEMSimInput/CreateMuonsLCIO.cc ) ADD_MARLINTPC_TOOL( generatePedestalRawData ./validation/testConditions/generatePedestalRawData.cpp ) if( NOT APPLE ) SET_TARGET_PROPERTIES( generatePedestalRawData PROPERTIES LINK_FLAGS -Wl,--no-as-needed ) endif() ADD_MARLINTPC_TOOL( checkCalculatedPedestals ./validation/testConditions/checkCalculatedPedestals.cpp ) ADD_MARLINTPC_TOOL( testResiduals ./validation/testResiduals/testResiduals.cpp ) ADD_MARLINTPC_TOOL( testResiduals2 ./validation/testResiduals/testResiduals2.cpp ) ADD_MARLINTPC_TOOL( generateStraightLine ./validation/generateRawData/generateStraightLine.cpp ) ADD_MARLINTPC_TOOL( generateRawData ./validation/generateRawData/generateRawData.cpp ./validation/generateRawData/curlerGenerator.cc ) ADD_MARLINTPC_TOOL( generateRawData2 ./validation/generateRawData/generateRawData2.cpp ./validation/generateRawData/curlerGenerator.cc ) ADD_MARLINTPC_TOOL( TPCConditions2LCCD.exe ./tools/TPCConditions2LCCD/TPCConditions2LCCD.cpp ) ADD_MARLINTPC_TOOL( TPCFieldSetting2LCCD.exe ./tools/TPCFieldSetting2LCCD/TPCFieldSetting2LCCD.cpp ) ADD_MARLINTPC_TOOL( helixGen ./validation/generateRawData/helixGen.cpp ./validation/generateRawData/helix.cc ) ADD_MARLINTPC_TOOL( helixGen1 ./validation/generateRawData/helixGen1.cpp ./validation/generateRawData/helix.cc ) ADD_MARLINTPC_TOOL( testPulseFinder ./validation/testPulseFinder/testPulseFinder.cpp ./validation/testPulseFinder/PulseFinderTester.cc ) ADD_MARLINTPC_TOOL( testInterSectionCalculator ./validation/testIntersectionCalulator/testInterSectionCalculator.cpp ) ADD_MARLINTPC_TOOL( testSimHitDistributor ./validation/testSimHitDistributor/testSimHitDistributor.cpp ) ADD_MARLINTPC_TOOL( testHistogramWidthExtractionTools ./validation/testHistogramWidthExtractionTools/testHistogramWidthExtractionTools.cpp ) ADD_MARLINTPC_TOOL( GenericADCElectronicsParameters2LCCD.exe ./tools/GenericADCElectronicsParameters2LCCD/GenericADCElectronicsParameters2LCCD.cpp ) ADD_MARLINTPC_TOOL( testTPCGas ./validation/testTPCGas/testTPCGas.cpp ) ADD_MARLINTPC_TOOL( ConvertStoreAltroPedestal ./tools/DataConversionUtils/bin/ConvertStoreAltroPedestal.cpp ) ADD_MARLINTPC_TOOL( ConvertAltroraw2LCIO ./tools/DataConversionUtils/bin/ConvertAltroraw2lcio.cpp ) ADD_MARLINTPC_TOOL( AdvancedAltroConverter ./tools/DataConversionUtils/bin/AdvancedAltroConverter.cpp ) ADD_MARLINTPC_TOOL( ConvertMMraw2LCIO ./tools/DataConversionUtils/bin/ConvertMMraw2lcio.cpp ) IF( KalTest_FOUND AND KalDet_FOUND ) ADD_MARLINTPC_TOOL( generateHelix ./validation/generateRawData/generateHelix.cpp ) ADD_MARLINTPC_TOOL( generateHelix2 ./validation/generateRawData/generateHelix2.cpp ./validation/generateRawData/helix.cc ) ADD_MARLINTPC_TOOL( testTPCHitMap ./validation/testTPCHitMap/testTPCHitMap.cpp ) ADD_MARLINTPC_TOOL( testTPCHitMap1 ./validation/testTPCHitMap/testTPCHitMap1.cpp ) ADD_MARLINTPC_TOOL( testTPCHitDomain ./validation/testTPCHitDomain/testTPCHitDomain.cpp ) ADD_MARLINTPC_TOOL( testKalTrackingHelix ./validation/testKalTrackingHelix/testKalTrackingHelix.cpp ./validation/testKalTrackingHelix/KalTrackingHelixTester.cc ) ADD_MARLINTPC_TOOL( testTrackingResult ./validation/testTrackingResult/testTrackingResult.cpp ) ELSE() MESSAGE( STATUS "KalTest + KalDet not found -- Helix generator will not be available!" ) ENDIF() # The tests in MarlinTPC # Add required environment variables for the individual test if necessary # using SET_PROPERTY ADD_TEST(testPulseFinder ${CMAKE_CURRENT_BINARY_DIR}/bin/testPulseFinder) ADD_TEST(testInterSectionCalculator ${CMAKE_CURRENT_BINARY_DIR}/bin/testInterSectionCalculator) ADD_TEST(testResiduals ${CMAKE_CURRENT_BINARY_DIR}/bin/testResiduals2) ADD_TEST(checkCalculatedPedestals ${CMAKE_CURRENT_SOURCE_DIR}/validation/ctests/checkCalculatedPedestals.sh ) ADD_TEST(reco_multiModule_TrackMakingKalmanFilter_smokeTest ${CMAKE_CURRENT_SOURCE_DIR}/validation/ctests/reco_multiModule_TrackMakingKalmanFilter_smokeTest.sh ) ADD_TEST(testTPCHitMap ${CMAKE_CURRENT_BINARY_DIR}/bin/testTPCHitMap) ADD_TEST(testTPCHitDomain ${CMAKE_CURRENT_SOURCE_DIR}/validation/ctests/testTPCHitDomain.sh) ADD_TEST(testKalTrackingHelix ${CMAKE_CURRENT_BINARY_DIR}/bin/testKalTrackingHelix) SET_PROPERTY(TEST checkCalculatedPedestals reco_multiModule_TrackMakingKalmanFilter_smokeTest testTPCHitDomain PROPERTY ENVIRONMENT "MARLINTPC_BIN_DIR=${CMAKE_CURRENT_BINARY_DIR}/bin" "MARLINTPC_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}" "MARLIN_BIN_DIR=${Marlin_DIR}/bin" "MARLIN_DLL=${CMAKE_CURRENT_BINARY_DIR}/lib/libMarlinTPC.so" ) # display some standard variables DISPLAY_STD_VARIABLES() # generate and install following configuration files GENERATE_PACKAGE_CONFIGURATION_FILES( MarlinTPCConfig.cmake MarlinTPCConfigVersion.cmake MarlinTPCLibDeps.cmake ) MESSAGE(STATUS "<<< Processing CMakeLists.txt for ${PROJECT_NAME} done.\n--")