cmake_minimum_required(VERSION 3.5) project(HypoTestInv LANGUAGES CXX) # Using ROOT's CONFIG mode search # The Makefile method also included (non-explicitly, though): Foam Html MathMore Minuit XMLParser find_package(ROOT CONFIG REQUIRED COMPONENTS RooStats RooFit RooFitCore) if(TARGET ROOT::Minuit2) message(STATUS "Minuit2 included in ROOT") else() message(STATUS "Minuit2 missing from ROOT, using standalone edition") find_package(Minuit2 CONFIG REQUIRED) endif() # Set flags and things automagically (not ideal, but simplest for now) include("${ROOT_USE_FILE}") message(STATUS "Root use_file Path is: " ${ROOT_USE_FILE}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc/) # This function adds a LinkDef and ROOT dictionary for a library function(ADD_LIBRARY_LINK_DEF NAME) file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/RootDict/${NAME}Dict_LinkDef.h" "#ifdef __CINT__\n" "#pragma link C++ nestedclasses;\n" "#pragma link C++ nestedtypedefs;\n" "#pragma link C++ defined_in \"${CMAKE_CURRENT_SOURCE_DIR}/inc/${NAME}.h\";\n" "#endif\n") root_generate_dictionary( G__${NAME} ${NAME}.h LINKDEF "${CMAKE_CURRENT_BINARY_DIR}/RootDict/${NAME}Dict_LinkDef.h" ) add_library(${NAME} G__${NAME}.cxx ${NAME}.cxx) target_link_libraries(${NAME} INTERFACE ${ROOT_LIBRARIES}) # Link to ROOT's Minuit 2 if available, otherwise standalone edition if(TARGET ROOT::Minuit2) target_link_libraries(${NAME} INTERFACE ROOT::Minuit2) else() target_link_libraries(${NAME} INTERFACE Minuit2::Minuit2) endif() endfunction() #********************************************************************* function(ADD_LIBRARY_LINK_DEF_minus NAME) file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/RootDict/${NAME}Dict_LinkDef.h" "#ifdef __CINT__\n" "#pragma link C++ nestedclasses;\n" "#pragma link C++ nestedtypedefs;\n" "#pragma link C++ class ${NAME}- ;\n" "#endif\n") root_generate_dictionary( G__${NAME} ${NAME}.h LINKDEF "${CMAKE_CURRENT_BINARY_DIR}/RootDict/${NAME}Dict_LinkDef.h" ) option(BUILD_SHARED_LIBS ON) add_library(${NAME} G__${NAME}.cxx ${NAME}.cxx ) target_link_libraries(${NAME} PUBLIC ${ROOT_LIBRARIES}) if(TARGET ROOT::Minuit2) target_link_libraries(${NAME} PUBLIC ROOT::Minuit2) else() target_link_libraries(${NAME} PUBLIC Minuit2::Minuit2) endif() endfunction() #************************************************************************************************* function(ADD_LIBRARY_LINK_DEF_simultaneous NAME) file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/RootDict/${NAME}Dict_LinkDef.h" "#ifdef __CINT__\n" "#pragma link off all globals;\n" "#pragma link off all classes;\n" "#pragma link off all functions;\n" "#pragma link C++ namespace RooStats;\n" "#pragma link C++ namespace RooStats::HistFactory;\n" # "#ifdef USE_FOR_AUTLOADING \n" "#pragma link C++ class RooStats::HistFactory;\n" "#pragma link C++ class RooStats; " # "#endif\n" "#pragma link C++ nestedclasses;\n" "#pragma link C++ nestedtypedefs;\n" "#pragma link C++ class std::map+ ;\n" "#pragma link C++ class RooStats::HistFactory::RooBarlowBeestonLL+ ;\n" "#pragma link C++ defined_in \"${CMAKE_CURRENT_SOURCE_DIR}/inc/${NAME}.h\";\n" "#endif\n") root_generate_dictionary( G__${NAME} ${NAME}.h LINKDEF "${CMAKE_CURRENT_BINARY_DIR}/RootDict/${NAME}Dict_LinkDef.h" ) option(BUILD_SHARED_LIBS ON) add_library(${NAME} G__${NAME}.cxx ${NAME}.cxx ) target_link_libraries(${NAME} PUBLIC ${ROOT_LIBRARIES}) # Link to ROOT's Minuit 2 if available, otherwise standalone edition if(TARGET ROOT::Minuit2) target_link_libraries(${NAME} PUBLIC ROOT::Minuit2) else() target_link_libraries(${NAME} PUBLIC Minuit2::Minuit2) endif() endfunction() #********************************************************************* # Adding core libraries add_library_link_def(WorkspaceCalculator) add_library_link_def(ProfileLikelihoodTestStatEnhanced) add_library_link_def(LimitCalculator) add_library_link_def(LikelihoodCalculator) add_library_link_def(PValueCalculator) add_library_link_def(FitCalculator) add_library_link_def(Asimov) add_library_link_def(Channel) add_library_link_def(ConfigParser) add_library_link_def(Data) add_library_link_def(EstimateSummary) add_library_link_def(FlexibleInterpVar) add_library_link_def(HistFactoryModelUtils) add_library_link_def(HistFactoryNavigation) add_library_link_def_simultaneous(HistFactorySimultaneous) add_library_link_def(HistoToWorkspaceFactoryFast) add_library_link_def(HistoToWorkspaceFactory) add_library_link_def(LinInterpVar) add_library_link_def(MakeModelAndMeasurementsFast) add_library_link_def(Measurement) add_library_link_def(ParamHistFunc) add_library_link_def_minus(PiecewiseInterpolation) add_library_link_def(PreprocessFunction) add_library_link_def(RooBarlowBeestonLL) add_library_link_def(Sample) add_library_link_def(Systematics) add_library_link_def(Helper) add_library_link_def(HistRef) # Adding executables add_executable(StandardHypoTestInv StandardHypoTestInv.cxx HistFactoryException.cxx) target_link_libraries(StandardHypoTestInv PUBLIC WorkspaceCalculator ProfileLikelihoodTestStatEnhanced LimitCalculator Asimov LinInterpVar RooBarlowBeestonLL Channel HistFactoryModelUtils Sample ConfigParser HistFactoryNavigation MakeModelAndMeasurementsFast HistFactorySimultaneous EstimateSummary ParamHistFunc FlexibleInterpVar HistoToWorkspaceFactory PiecewiseInterpolation HistoToWorkspaceFactoryFast PreprocessFunction ) #add_executable(StandardFrequentistDiscovery StandardFrequentistDiscovery.cxx) #target_link_libraries(StandardFrequentistDiscovery PUBLIC # WorkspaceCalculator ProfileLikelihoodTestStatEnhanced PValueCalculator) #add_executable(LikelihoodScan LikelihoodScan.cxx) #target_link_libraries(LikelihoodScan PUBLIC # WorkspaceCalculator ProfileLikelihoodTestStatEnhanced LikelihoodCalculator) #add_executable(SimpleFit SimpleFit.cxx) #target_link_libraries(SimpleFit PUBLIC # WorkspaceCalculator ProfileLikelihoodTestStatEnhanced FitCalculator)