Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
CMakeLists.txt 4.27 KiB
# set minimum required cmake version
cmake_minimum_required (VERSION 3.2 FATAL_ERROR)

project (UserProject LANGUAGES CXX)

set(Hammer_CompileOptions ;-ansi;-D_FILE_OFFSET_BITS=64;-Wno-unknown-pragmas)
set(Hammer_PIC TRUE)
set(Hammer_Include $ENV{HAMMERSYS}/include)
set(Hammer_Libs )
SET(CMAKE_CXX_STANDARD 17)
set(Hammer_LIBTYPE "STATIC")
set(Boost_NO_BOOST_CMAKE ON)

if(OFF)
	set(CMAKE_MODULE_PATH "$ENV{HAMMERSYS}/share/Hammer/examples/CMakeModules" ${CMAKE_MODULE_PATH})
	find_package(Sanitizers)
endif()

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DROCKSDB_USE_RTTI")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DROCKSDB_USE_RTTI")

# don't use configuration-specific subdirectories in Xcode
if (CMAKE_GENERATOR STREQUAL "Xcode")
   set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/lib)
   set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/lib)
endif (CMAKE_GENERATOR STREQUAL "Xcode")

foreach(libname HammerCore Amplitudes FormFactors HammerTools HammerBase Rates)
    message(STATUS "Adding Dependency: ${libname}")
    if(Hammer_LIBTYPE STREQUAL "STATIC")
        add_library(${libname} STATIC IMPORTED)
        set_target_properties(${libname} PROPERTIES
            IMPORTED_LOCATION "$ENV{HAMMERSYS}/lib64/Hammer/${CMAKE_STATIC_LIBRARY_PREFIX}${libname}${CMAKE_STATIC_LIBRARY_SUFFIX}"
            INTERFACE_INCLUDE_DIRECTORIES "$ENV{HAMMERSYS}/include"
        )
    else()
        add_library(${libname} SHARED IMPORTED)
        set_target_properties(${libname} PROPERTIES
            IMPORTED_LOCATION "$ENV{HAMMERSYS}/lib64/Hammer/${CMAKE_SHARED_LIBRARY_PREFIX}${libname}${CMAKE_SHARED_LIBRARY_SUFFIX}"
            INTERFACE_INCLUDE_DIRECTORIES "$ENV{HAMMERSYS}/include"
        )
    endif()
endforeach()

add_library(ThirdParty::YamlCpp INTERFACE IMPORTED)
set_property(TARGET ThirdParty::YamlCpp PROPERTY INTERFACE_LINK_LIBRARIES $ENV{HAMMERSYS}/lib64/libyaml-cpp.so)

add_library(Boost::boost INTERFACE IMPORTED)
set_property(TARGET Boost::boost PROPERTY INTERFACE_INCLUDE_DIRECTORIES $ENV{BOOSTFOLDER}/include)
add_library(Boost::thread INTERFACE IMPORTED)
set_property(TARGET Boost::thread PROPERTY INTERFACE_LINK_LIBRARIES $ENV{BOOSTFOLDER}/lib/libboost_thread.so)

if(TRUE)
    add_library(ThirdParty::ROOT INTERFACE IMPORTED)
    set_property(TARGET ThirdParty::ROOT PROPERTY INTERFACE_INCLUDE_DIRECTORIES $ENV{ROOTSYS}/include)
    set_property(TARGET ThirdParty::ROOT PROPERTY INTERFACE_LINK_LIBRARIES -L$ENV{ROOTSYS}/lib -lGui -lCore -lImt -lRIO -lNet -lHist -lGraf -lGraf3d -lROOTVecOps -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lROOTDataFrame -lMathCore -lThread -lMultiProc -lMinuit -pthread -lm -ldl -rdynamic -lFoam -lRooFit -lRooFitCore -lRooStats -lHistFactory -lTreePlayer -lMathMore -lXMLParser)
endif()

find_package(ROOT REQUIRED COMPONENTS ROOTDataFrame ROOTVecOps)
include(${ROOT_USE_FILE})

find_package(OpenMP)
if (OPENMP_FOUND)
    set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
    set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif()

ROOT_GENERATE_DICTIONARY(RooHammerModelDict 
                        ${PROJECT_SOURCE_DIR}/include/RooHammerModel.h 
                        LINKDEF ${PROJECT_SOURCE_DIR}/include/LinkDef.h)

ROOT_GENERATE_DICTIONARY(RooUnnormalizedHammerModelDict
                        ${PROJECT_SOURCE_DIR}/include/RooUnnormalizedHammerModel.h
                        LINKDEF ${PROJECT_SOURCE_DIR}/include/LinkDef.h)

add_library(RooHammerModel SHARED ${PROJECT_SOURCE_DIR}/src/RooHammerModel.cxx             RooHammerModelDict.cxx 
                                  ${PROJECT_SOURCE_DIR}/src/RooUnnormalizedHammerModel.cxx RooUnnormalizedHammerModelDict.cxx)
                                  
set(LIBS HammerCore Amplitudes FormFactors HammerTools HammerBase Rates ThirdParty::ROOT ThirdParty::YamlCpp Boost::thread)
target_link_libraries(RooHammerModel PUBLIC ${LIBS})
target_link_libraries(RooHammerModel PUBLIC ${ROOT_LIBRARIES} pthread)
target_link_libraries(RooHammerModel PRIVATE ${OpenMP_CXX_FLAGS})


add_executable(Fitter ${PROJECT_SOURCE_DIR}/src/Fitter.cpp)
target_link_libraries(Fitter ThirdParty::ROOT RooHammerModel pthread)

target_include_directories(RooHammerModel PUBLIC ${PROJECT_SOURCE_DIR}/include)