IAP GITLAB

CMakeLists.txt 4.79 KB
Newer Older
1 2 3
CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
PROJECT (crmc)

4 5
######################################ONLY EDIT THIS######################################
SET (CMAKE_INSTALL_PREFIX ${PROJECT_BINARY_DIR})
6 7 8 9 10 11 12 13 14

# Enable/Disble models to be built
OPTION (__QGSJET01__ "Build with model" ON)
OPTION (__GHEISHA__  "Build with model" OFF)
OPTION (__PYTHIA__   "Build with model" OFF)
OPTION (__HIJING__   "Build with model" OFF)
OPTION (__SIBYLL__   "Build with model" ON)
OPTION (__QGSJETII__ "Build with model" ON)

15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
######################################ONLY EDIT THIS######################################

# The version number
SET (CRMC_VERSION_MAJOR 0)
SET (CRMC_VERSION_MINOR 1)

# hotfix for lxbatch not sure why he selects wrong compiler
#SET (CMAKE_Fortran_COMPILER gfortran)

# comprehensible compiler languages (default c cxx)
ENABLE_LANGUAGE (Fortran)

## RPATH (where to find library)
# use, i.e. don't skip the full RPATH for the build tree
SET(CMAKE_SKIP_BUILD_RPATH  FALSE)

# when building, don't use the install RPATH already
# (but later on when installing)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)

SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
# add the automatically determined parts of the RPATH
# which point to directories outside the build tree to the install RPATH
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

# the RPATH to be used when installing, but only if it's not a system directory
LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
IF("${isSystemDir}" STREQUAL "-1")
  SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
ENDIF("${isSystemDir}" STREQUAL "-1")
45 46 47 48

## find packages
SET (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeModules" CACHE PATH "Module Path" FORCE)
FIND_PACKAGE (Root REQUIRED)
49
FIND_PACKAGE (Boost REQUIRED COMPONENTS filesystem iostreams system program_options)
50 51 52 53 54 55 56 57 58 59 60 61
FIND_PACKAGE (HepMC REQUIRED COMPONENTS HepMC HepMCfio)

## configure a header file to pass some of the CMake settings to the source code
CONFIGURE_FILE (
  "${PROJECT_SOURCE_DIR}/src/crmcconfig.h.in"
  "${PROJECT_BINARY_DIR}/src/crmcconfig.h"
  )

#add epos (must!)
INCLUDE_DIRECTORIES ("${PROJECT_SOURCE_DIR}/src")
ADD_SUBDIRECTORY (src/epos)
SET (EXTRA_MODELS ${EXTRA_MODELS} Epos)
62
SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -D __EPOS__")
63 64 65 66

IF (__QGSJET01__)
ADD_SUBDIRECTORY ("${PROJECT_SOURCE_DIR}/src/qgsjet")
SET (EXTRA_MODELS ${EXTRA_MODELS} Qgsjet01)
67
SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -D __QGSJET01__")
68 69 70 71 72 73

ENDIF (__QGSJET01__)

IF (__GHEISHA__)
ADD_SUBDIRECTORY ("${PROJECT_SOURCE_DIR}/src/gheisha")
SET (EXTRA_MODELS ${EXTRA_MODELS} Gheisha)
74
SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -D __GHEISHA__")
75 76 77 78 79
ENDIF (__GHEISHA__)

IF (__PYTHIA__)
ADD_SUBDIRECTORY ("${PROJECT_SOURCE_DIR}/src/pythia")
SET (EXTRA_MODELS ${EXTRA_MODELS} Pythia)
80
SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -D __PYTHIA__")
81 82 83 84 85
ENDIF (__PYTHIA__)

IF (__HIJING__)
ADD_SUBDIRECTORY ("${PROJECT_SOURCE_DIR}/src/hijing")
SET (EXTRA_MODELS ${EXTRA_MODELS} Hijing)
86
SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -D __HIJING__")
87 88 89 90 91
ENDIF (__HIJING__)

IF (__SIBYLL__)
ADD_SUBDIRECTORY ("${PROJECT_SOURCE_DIR}/src/sibyll")
SET (EXTRA_MODELS ${EXTRA_MODELS} Sibyll)
92
SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -D __SIBYLL__")
93 94 95 96 97
ENDIF (__SIBYLL__)

IF (__QGSJETII__)
ADD_SUBDIRECTORY ("${PROJECT_SOURCE_DIR}/src/qgsjetII")
SET (EXTRA_MODELS ${EXTRA_MODELS} QgsjetII)
98
SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -D __QGSJETII__")
99 100
ENDIF (__QGSJETII__)

101

102 103 104 105 106 107 108
# add the executable
INCLUDE_DIRECTORIES ("${PROJECT_BINARY_DIR}/src") #cmake config file
INCLUDE_DIRECTORIES ("${HepMC_INCLUDE_DIRS}")
INCLUDE_DIRECTORIES ("${Boost_INCLUDE_DIRS}")
INCLUDE_DIRECTORIES ("${ROOT_INCLUDE_DIR}")
ADD_EXECUTABLE(Crmc src/crmchep.cc src/crmctrapfpe.c src/crmc-aaa.f src/models.F)

109
# linking of modules
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
TARGET_LINK_LIBRARIES (Crmc ${HepMC_LIBRARIES})
TARGET_LINK_LIBRARIES (Crmc ${Boost_LIBRARIES})
TARGET_LINK_LIBRARIES (Crmc ${ROOT_LIBRARIES})
TARGET_LINK_LIBRARIES (Crmc ${EXTRA_MODELS})

## installation
# configure the parameter file
install(CODE "SET (CRMCROOT \"${PROJECT_BINARY_DIR}\")")
install(CODE "CONFIGURE_FILE (\"${PROJECT_SOURCE_DIR}/src/crmc.param.in\" \"${PROJECT_BINARY_DIR}/crmc.param\" @ONLY IMMEDIATE)")

# install tabs
if(CMAKE_HOST_UNIX)
    install(CODE "EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E create_symlink ${PROJECT_SOURCE_DIR}/tabs ${PROJECT_BINARY_DIR}/tabs)")
endif(CMAKE_HOST_UNIX)

# install executable
INSTALL (PROGRAMS ${PROJECT_SOURCE_DIR}/src/crmc.py DESTINATION bin)
INSTALL (PROGRAMS ${PROJECT_BINARY_DIR}/Crmc DESTINATION bin RENAME crmc)

# enable dashboard scripting
include (CTest)
ADD_TEST (CrmcRuns bin/crmc -s 123 -f ctest)
ADD_TEST (CrmcCheckFile md5sum "ctest")
SET_TESTS_PROPERTIES (CrmcCheckFile PROPERTIES PASS_REGULAR_EXPRESSION ".*13a1067a443279b3e397eab0e58e2e4e  ctest")
ADD_TEST (CrmcRemoveFile rm "ctest")