CMakeListst_new.txt 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. # The name of our project is “MPDROOT”. CMakeLists files in this project can
  2. # refer to the root source directory of the project as ${MPDROOT_SOURCE_DIR}
  3. # or as ${CMAKE_SOURCE_DIR} and to the root binary directory of the project as
  4. # ${MPDROOT_BINARY_DIR} or ${CMAKE_BINARY_DIR}.
  5. # This difference is important for the base classes which are in FAIRROOT
  6. # and the experiment part.
  7. # Check if cmake has the required version
  8. CMAKE_MINIMUM_REQUIRED(VERSION 3.11.0 FATAL_ERROR)
  9. cmake_policy(VERSION 3.11...3.21)
  10. # Set name of our project to “MPDROOT". Has to be done
  11. # after check of cmake version since this is a new feature
  12. project(MPDROOT)
  13. #In case you need Fortran
  14. enable_language(Fortran)
  15. set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -std=legacy")
  16. Option(USE_PATH_INFO "Information from PATH and LD_LIBRARY_PATH are used." ON)
  17. Option(ALIBUILD "Flag if we are building with AliBuild." OFF)
  18. # Check for needed environment variables
  19. IF(NOT DEFINED ENV{FAIRROOTPATH})
  20. MESSAGE(FATAL_ERROR "You did not define the environment variable FAIRROOTPATH which is needed to find FairRoot. Please set this variable and execute cmake again.")
  21. ENDIF(NOT DEFINED ENV{FAIRROOTPATH})
  22. IF(NOT DEFINED ENV{SIMPATH})
  23. MESSAGE(FATAL_ERROR "You did not define the environment variable SIMPATH which is nedded to find the external packages. Please set this variable and execute cmake again.")
  24. ENDIF(NOT DEFINED ENV{SIMPATH})
  25. SET(SIMPATH $ENV{SIMPATH})
  26. #SET(ROOTSYS $ENV{ROOTSYS})
  27. SET(FAIRROOTPATH $ENV{FAIRROOTPATH})
  28. # where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/
  29. # is checked
  30. set(CMAKE_MODULE_PATH "${FAIRROOTPATH}/share/fairbase/cmake/modules" ${CMAKE_MODULE_PATH})
  31. set(CMAKE_MODULE_PATH "${FAIRROOTPATH}/share/fairbase/cmake/modules_old" ${CMAKE_MODULE_PATH})
  32. #set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules" ${CMAKE_MODULE_PATH})
  33. set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules_new" ${CMAKE_MODULE_PATH})
  34. Set(CheckSrcDir "${FAIRROOTPATH}/share/fairbase/cmake/checks")
  35. #find_package(FairCMakeModules 0.1 QUIET)
  36. if(NOT FairCMakeModules_FOUND)
  37. message(WARNING "Could not find FairCMakeModules, falling back to local copy. "
  38. "It is recommended to install https://github.com/FairRootGroup/FairCMakeModules")
  39. list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/fallback")
  40. endif()
  41. include(FairFindPackage2)
  42. find_package2(PUBLIC FairRoot)
  43. # Load some basic macros which are needed later on
  44. include(FairMacros)
  45. include(WriteConfigFile)
  46. include(CTest)
  47. include(CheckCompiler)
  48. include(CheckFortran)
  49. include(InstallNicaFemto)
  50. include(CreateMpdConfig)
  51. #Check the compiler and set the compile and link flags
  52. If(NOT CMAKE_BUILD_TYPE)
  53. Message("Set BuildType RelWithDebInfo")
  54. set(CMAKE_BUILD_TYPE RelWithDebInfo)
  55. EndIf(NOT CMAKE_BUILD_TYPE)
  56. Check_Compiler()
  57. #set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g -march=znver2 -mtune=znver2 -std=c++17") # -Wall -Wextra
  58. set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib")
  59. set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin")
  60. set(INCLUDE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/include")
  61. Set(VMCWORKDIR ${CMAKE_SOURCE_DIR})
  62. If(USE_PATH_INFO)
  63. Set(PATH "$PATH")
  64. If (APPLE)
  65. Set(LD_LIBRARY_PATH $ENV{DYLD_LIBRARY_PATH})
  66. Else (APPLE)
  67. Set(LD_LIBRARY_PATH $ENV{LD_LIBRARY_PATH})
  68. EndIf (APPLE)
  69. Else(USE_PATH_INFO)
  70. STRING(REGEX MATCHALL "[^:]+" PATH $ENV{PATH})
  71. EndIf(USE_PATH_INFO)
  72. # Check if the user wants to build the project in the source
  73. # directory
  74. CHECK_OUT_OF_SOURCE_BUILD()
  75. CHECK_INSTALL_DIRECTORY()
  76. # Check if we are on an UNIX system. If not stop with an error
  77. # message
  78. IF(NOT UNIX)
  79. MESSAGE(FATAL_ERROR "You're not on an UNIX system. The project was up to now only tested on UNIX systems, so we break here. If you want to go on please edit the CMakeLists.txt in the source directory.")
  80. ENDIF(NOT UNIX)
  81. # Check if the external packages are installed into a separate install
  82. # directory
  83. CHECK_EXTERNAL_PACKAGE_INSTALL_DIR()
  84. # searches for needed packages
  85. # REQUIRED means that cmake will stop if this packages are not found
  86. # For example the framework can run without GEANT4, but ROOT is
  87. # mandatory
  88. if(SIMPATH)
  89. set(CMAKE_PREFIX_PATH ${SIMPATH} ${CMAKE_PREFIX_PATH})
  90. set(LD_LIBRARY_PATH ${LD_LIBRARY_PATH} ${SIMPATH}/lib)
  91. endif()
  92. find_package2(PUBLIC ROOT REQUIRED)
  93. SET(ROOT_INCLUDE_DIR ${ROOT_INCLUDE_DIR} ${ROOT_INCLUDE_DIRS})
  94. include(ROOTMacros)
  95. if(ROOT_vmc_FOUND)
  96. set(VMCLIB ROOT::VMC)
  97. else()
  98. find_package2(PUBLIC VMC REQUIRED)
  99. set(VMCLIB VMCLibrary)
  100. endif()
  101. find_package2(PUBLIC FairLogger VERSION 1.2.0 REQUIRED)
  102. foreach(dep IN LISTS FairLogger_PACKAGE_DEPENDENCIES)
  103. if(NOT dep STREQUAL "Boost")
  104. find_package2(PUBLIC ${dep} REQUIRED VERSION ${FairLogger_${dep}_VERSION})
  105. set(PROJECT_${dep}_VERSION ${FairLogger_${dep}_VERSION})
  106. endif()
  107. endforeach()
  108. find_package2(PUBLIC Pythia6)
  109. find_package2(PUBLIC Pythia8)
  110. find_package2(PUBLIC Geant3)
  111. find_package2(PUBLIC Geant4)
  112. Find_Package2(PUBLIC VGM)
  113. find_package2(PUBLIC Geant4VMC)
  114. find_package(HEPMC)
  115. find_package(XML2 REQUIRED)
  116. SET(GEANT3_INCLUDE_DIR ${GEANT3_INCLUDE_DIR} ${Geant3_INCLUDE_DIRS})
  117. If(${ROOT_LIBRARY_DIR} MATCHES /lib/root)
  118. set(BOOST_ROOT ${SIMPATH})
  119. set(GSL_DIR ${SIMPATH})
  120. Else(${ROOT_LIBRARY_DIR} MATCHES /lib/root)
  121. set(BOOST_ROOT ${SIMPATH}/basics/boost)
  122. set(GSL_DIR ${SIMPATH}/basics/gsl)
  123. EndIf(${ROOT_LIBRARY_DIR} MATCHES /lib/root)
  124. if(NOT DEFINED Boost_NO_SYSTEM_PATHS)
  125. Set(Boost_NO_SYSTEM_PATHS TRUE)
  126. endif()
  127. if(NOT DEFINED Boost_NO_BOOST_CMAKE AND CMAKE_VERSION VERSION_LESS 3.15)
  128. Set(Boost_NO_BOOST_CMAKE TRUE)
  129. endif()
  130. if(Boost_NO_BOOST_CMAKE)
  131. # If an older version of boost is found both of the variables below are
  132. # cached and in a second cmake run, a good boost version is found even
  133. # if the version is to old.
  134. # To overcome this problem both variables are cleared before checking
  135. # for boost.
  136. Unset(Boost_INCLUDE_DIR CACHE)
  137. Unset(Boost_LIBRARY_DIRS CACHE)
  138. endif()
  139. find_package2(PUBLIC Boost
  140. VERSION 1.67
  141. ADD_REQUIREMENTS_OF FairRoot FairMQ FairLogger
  142. )
  143. If (Boost_FOUND)
  144. Set(Boost_Avail 1)
  145. Else (Boost_FOUND)
  146. Set(Boost_Avail 0)
  147. EndIf (Boost_FOUND)
  148. # set a variable which should be used in all CMakeLists.txt
  149. # Defines all basic include directories from fairbase
  150. SetBasicVariables()
  151. find_package(FairLogger)
  152. SET(PATH ${EXECUTABLE_OUTPUT_PATH} ${PATH})
  153. set(MPDROOT TRUE)
  154. add_definitions(-DMPDROOT)
  155. # Set the library version in the main CMakeLists.txt
  156. SET(FAIRROOT_MAJOR_VERSION 0)
  157. SET(FAIRROOT_MINOR_VERSION 0)
  158. SET(FAIRROOT_PATCH_VERSION 0)
  159. SET(FAIRROOT_VERSION "${FAIRROOT_MAJOR_VERSION}.${FAIRROOT_MINOR_VERSION}.${FAIRROOT_PATCH_VERSION}")
  160. set(FAIRROOT_LIBRARY_PROPERTIES ${FAIRROOT_LIBRARY_PROPERTIES}
  161. VERSION "${FAIRROOT_VERSION}"
  162. SOVERSION "${FAIRROOT_MAJOR_VERSION}.${FAIRROOT_MINOR_VERSION}"
  163. )
  164. set(PROJECT_LIBRARY_PROPERTIES ${FAIRROOT_LIBRARY_PROPERTIES})
  165. configure_file(${FAIRROOTPATH}/share/fairbase/cmake/scripts/FairRootConfigVersion.cmake.in "${CMAKE_BINARY_DIR}/FairRootConfigVersion.cmake" @ONLY)
  166. Generate_Version_Info()
  167. SET(_LIBDIR ${CMAKE_BINARY_DIR}/lib)
  168. SET(LD_LIBRARY_PATH ${_LIBDIR} ${LD_LIBRARY_PATH})
  169. # Recurse into the given subdirectories. This does not actually
  170. # cause another cmake executable to run. The same process will walk through
  171. # the project's entire directory structure.
  172. add_subdirectory (passive)
  173. add_subdirectory (mpdbase)
  174. add_subdirectory (mpdfield)
  175. add_subdirectory (kalman) #MpdBase MpdField
  176. add_subdirectory (shield_pack)
  177. add_subdirectory (generators/unigen_format)
  178. add_subdirectory (generators) # MpdMcDst
  179. add_subdirectory (mcstack) # MpdGen
  180. add_subdirectory (mpdpid) # MpdMCStack MpdBase
  181. add_subdirectory (lhetrack) # MpdBase Kalman Sts Tof
  182. add_subdirectory (mpddst) # MpdBase LHETrack MpdPid
  183. add_subdirectory (tof) # MpdMCStack Kalman
  184. add_subdirectory (tpc) # Tof
  185. add_subdirectory (etof)
  186. add_subdirectory (zdc)
  187. add_subdirectory (clustering)
  188. add_subdirectory (emc) # Cluster
  189. add_subdirectory (ffd)
  190. add_subdirectory (sts)
  191. add_subdirectory (cpc)
  192. add_subdirectory (bmd)
  193. add_subdirectory (mcord)
  194. add_subdirectory (physics) #MpdBase MpdMCStack Kalman MpdPid LHETrack
  195. add_subdirectory (eventdisplay) #Emc
  196. #add_subdirectory (macro)
  197. #add_subdirectory (strawendcap)
  198. #add_subdirectory (strawECT)
  199. #add_subdirectory (bbc)
  200. #add_subdirectory (sft)
  201. #add_subdirectory (stt)
  202. #add_subdirectory (fsa)
  203. #add_subdirectory (ndet)
  204. #add_subdirectory (tgem)
  205. #add_subdirectory (dch)
  206. #if(EXISTS "${CMAKE_SOURCE_DIR}/macro/mpd_scheduler/CMakeLists.txt")
  207. # add_subdirectory (macro/mpd_scheduler)
  208. #endif()
  209. #InstallNicaFemto()
  210. Option(BUILD_DOXYGEN "Build Doxygen" OFF)
  211. if(BUILD_DOXYGEN)
  212. MESSAGE(STATUS "*** Building the Doxygen documentaion ***")
  213. ADD_SUBDIRECTORY(doxygen)
  214. endif(BUILD_DOXYGEN)
  215. WRITE_CONFIG_FILE(config.sh)
  216. SET(VMCWORKDIR ${CMAKE_INSTALL_PREFIX})
  217. SET(ROOT_INCLUDE_PATH ${CMAKE_INSTALL_PREFIX}/include ${ROOT_INCLUDE_PATH})
  218. configure_file(${CMAKE_SOURCE_DIR}/CTestCustom.cmake
  219. ${CMAKE_BINARY_DIR}/CTestCustom.cmake
  220. )
  221. # Summary ######################################################################
  222. if(CMAKE_CXX_FLAGS)
  223. message(STATUS " ")
  224. message(STATUS " ${Cyan}GLOBAL CXX FLAGS${CR} ${BGreen}${CMAKE_CXX_FLAGS}${CR}")
  225. endif()
  226. if(CMAKE_CONFIGURATION_TYPES)
  227. message(STATUS " ")
  228. message(STATUS " ${Cyan}BUILD TYPE CXX FLAGS${CR}")
  229. string(TOUPPER "${CMAKE_BUILD_TYPE}" selected_type)
  230. foreach(type IN LISTS CMAKE_CONFIGURATION_TYPES)
  231. string(TOUPPER "${type}" type_upper)
  232. if(type_upper STREQUAL selected_type)
  233. pad("${type}" 18 " " type_padded)
  234. message(STATUS "${BGreen}* ${type_padded}${CMAKE_CXX_FLAGS_${type_upper}}${CR}")
  235. else()
  236. pad("${type}" 18 " " type_padded)
  237. message(STATUS " ${BWhite}${type_padded}${CR}${CMAKE_CXX_FLAGS_${type_upper}}")
  238. endif()
  239. unset(type_padded)
  240. unset(type_upper)
  241. endforeach()
  242. message(STATUS " ")
  243. message(STATUS " (Change the build type with ${BMagenta}-DCMAKE_BUILD_TYPE=...${CR})")
  244. endif()
  245. ################################################################################