CMakeLists.txt 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. # CMakeLists.txt for FAS package. It creates a library with dictionary and a main program
  2. cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
  3. project(PicoDst)
  4. # You need to tell CMake where to find the ROOT installation. This can be done
  5. # in a number of ways:
  6. # - ROOT built with classic configure/make use the provided
  7. # $ROOTSYS/etc/cmake/FindROOT.cmake
  8. # - ROOT built with CMake. Add in CMAKE_PREFIX_PATH the installation prefix
  9. # for ROOT
  10. find_package(Git)
  11. list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS})
  12. #---Locate the ROOT package and defines a number of variables (e.g. ROOT_INCLUDE_DIRS)
  13. find_package(ROOT REQUIRED COMPONENTS MathCore RIO Hist Tree Net)
  14. set(FAIRSOFT_PATH $ENV{FAIRROOTPATH}/share/fairbase/cmake/modules)
  15. list(APPEND CMAKE_MODULE_PATH ${FAIRSOFT_PATH})
  16. find_package(FairRoot QUIET COMPONENTS Base)
  17. if(NOT FAIRROOT_FOUND)
  18. message(STATUS "FairRoot package NOT found.")
  19. endif()
  20. #---Define useful ROOT functions and macros (e.g. ROOT_GENERATE_DICTIONARY)
  21. include(${ROOT_USE_FILE})
  22. #set (CMAKE_CXX_STANDARD 11)
  23. add_definitions(${ROOT_CXX_FLAGS})
  24. set(CMAKE_BUILD_TYPE Debug)
  25. #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -Wall -pthread")
  26. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wall")
  27. set(PICO_DST_INCLUDE_DIRECTORIES
  28. ${CMAKE_CURRENT_SOURCE_DIR}
  29. "${CMAKE_CURRENT_SOURCE_DIR}/converter"
  30. "${CMAKE_CURRENT_SOURCE_DIR}/bin"
  31. "${CMAKE_CURRENT_SOURCE_DIR}/include"
  32. "${CMAKE_CURRENT_SOURCE_DIR}/src"
  33. ${CMAKE_CURRENT_SOURCE_DIR}
  34. ${ROOT_INLCUDE_DIRS}
  35. )
  36. include_directories(${PICO_DST_INCLUDE_DIRECTORIES})
  37. set(PICO_DST_INCLUDE_LIBRARIES
  38. ${ROOT_LIBRARIES}
  39. )
  40. set(PicoDst_h_files
  41. "${CMAKE_CURRENT_SOURCE_DIR}/include/PicoDstBaseEvent.h"
  42. "${CMAKE_CURRENT_SOURCE_DIR}/include/PicoDstMCEvent.h"
  43. "${CMAKE_CURRENT_SOURCE_DIR}/include/PicoDstRecoEvent.h"
  44. "${CMAKE_CURRENT_SOURCE_DIR}/include/PicoDstBaseTrack.h"
  45. "${CMAKE_CURRENT_SOURCE_DIR}/include/PicoDstMCTrack.h"
  46. "${CMAKE_CURRENT_SOURCE_DIR}/include/PicoDstRecoTrack.h"
  47. "${CMAKE_CURRENT_SOURCE_DIR}/include/PicoDstFHCal.h"
  48. )
  49. set(PicoDst_cxx_files
  50. "${CMAKE_CURRENT_SOURCE_DIR}/src/PicoDstBaseEvent.cxx"
  51. "${CMAKE_CURRENT_SOURCE_DIR}/src/PicoDstMCEvent.cxx"
  52. "${CMAKE_CURRENT_SOURCE_DIR}/src/PicoDstRecoEvent.cxx"
  53. "${CMAKE_CURRENT_SOURCE_DIR}/src/PicoDstBaseTrack.cxx"
  54. "${CMAKE_CURRENT_SOURCE_DIR}/src/PicoDstMCTrack.cxx"
  55. "${CMAKE_CURRENT_SOURCE_DIR}/src/PicoDstRecoTrack.cxx"
  56. "${CMAKE_CURRENT_SOURCE_DIR}/src/PicoDstFHCal.cxx"
  57. )
  58. set(PicoDst_LinkDef
  59. "${CMAKE_CURRENT_SOURCE_DIR}/include/PicoDst.LinkDef.h"
  60. )
  61. #---Generate dictionary
  62. ROOT_GENERATE_DICTIONARY(G__PicoDst
  63. ${PicoDst_h_files}
  64. LINKDEF ${PicoDst_LinkDef}
  65. )
  66. #---Compile library
  67. add_library(PicoDst SHARED ${PicoDst_cxx_files} G__PicoDst.cxx)
  68. target_link_libraries(PicoDst ${PICO_DST_INCLUDE_LIBRARIES})
  69. set(ENV{PICO_DST_BIN} "${CMAKE_CURRENT_BINARY_DIR}")
  70. set(ENV{PICO_DST_SRC} "${CMAKE_CURRENT_SOURCE_DIR}/src")
  71. set(ENV{PICO_DST_INC} "${CMAKE_CURRENT_SOURCE_DIR}/include")
  72. set(PICO_DST_BIN "${CMAKE_CURRENT_BINARY_DIR}")
  73. set(PICO_DST_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src")
  74. set(PICO_DST_INC "${CMAKE_CURRENT_SOURCE_DIR}/include")
  75. message(STATUS "PICO_DST_BIN: " $ENV{PICO_DST_BIN})
  76. message(STATUS "PICO_DST_INC: " $ENV{PICO_DST_INC})
  77. message(STATUS "PICO_DST_SRC: " $ENV{PICO_DST_SRC})
  78. set(BASH $ENV{SHELL})
  79. file( WRITE ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "#!${BASH}\n")
  80. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "\n")
  81. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "export PICO_DST_BIN=$ENV{PICO_DST_BIN}\n")
  82. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "export PICO_DST_SRC=$ENV{PICO_DST_SRC}\n")
  83. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "export PICO_DST_INC=$ENV{PICO_DST_INC}\n")
  84. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "\n")
  85. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "export LD_LIBRARY_PATH=$PICO_DST_BIN:$LD_LIBRARY_PATH\n")
  86. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "export PATH=$PICO_DST_BIN:$PATH\n")
  87. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "export CPATH=$PICO_DST_INC:$CPATH\n")
  88. # Get the current working branch
  89. execute_process(
  90. COMMAND git rev-parse --abbrev-ref HEAD
  91. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  92. OUTPUT_VARIABLE GIT_BRANCH
  93. RESULT_VARIABLE GIT_BRANCH_ERROR_CODE
  94. OUTPUT_STRIP_TRAILING_WHITESPACE
  95. )
  96. if( GIT_BRANCH_ERROR_CODE )
  97. set(GIT_BRANCH 0)
  98. endif()
  99. # Get the latest abbreviated commit hash of the working branch
  100. execute_process(
  101. COMMAND git rev-parse --short HEAD
  102. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  103. OUTPUT_VARIABLE GIT_COMMIT_HASH
  104. RESULT_VARIABLE GIT_COMMIT_HASH_ERROR_CODE
  105. OUTPUT_STRIP_TRAILING_WHITESPACE
  106. )
  107. if( GIT_COMMIT_HASH_ERROR_CODE )
  108. set(GIT_COMMIT_HASH 0)
  109. endif()
  110. # Get the current version
  111. execute_process(
  112. COMMAND git describe --tags --match "*"
  113. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  114. OUTPUT_VARIABLE GIT_TAG_VERSION
  115. RESULT_VARIABLE GIT_TAG_VERSION_ERROR_CODE
  116. OUTPUT_STRIP_TRAILING_WHITESPACE
  117. )
  118. if( GIT_TAG_VERSION_ERROR_CODE )
  119. set(GIT_TAG_VERSION 0.0)
  120. endif()
  121. #---If one wants to input those definitions manually, use this commands:
  122. #add_definitions("-DGIT_COMMIT_HASH=${GIT_COMMIT_HASH}")
  123. #add_definitions("-DGIT_BRANCH=${GIT_BRANCH}")
  124. #add_definitions("-DGIT_TAG_VERSION=${GIT_TAG_VERSION}")
  125. #add_definitions("-DPICO_DST_BIN_DIR=${PICO_DST_BIN}")
  126. #add_definitions("-DPICO_DST_SRC_DIR=${PICO_DST_SRC}")
  127. #add_definitions("-DPICO_DST_INC_DIR=${PICO_DST_INC}")
  128. configure_file(
  129. ${CMAKE_CURRENT_SOURCE_DIR}/include/PicoDstVersion.h.in
  130. ${CMAKE_CURRENT_BINARY_DIR}/generated/PicoDstVersion.h
  131. )
  132. include_directories(${CMAKE_CURRENT_BINARY_DIR}/generated)
  133. set_target_properties (PicoDst
  134. PROPERTIES
  135. VERSION ${GIT_TAG_VERSION} SOVERSION ${GIT_BRANCH}-${GIT_COMMIT_HASH}
  136. PUBLIC_HEADER ${CMAKE_CURRENT_BINARY_DIR}/generated/PicoDstVersion.h
  137. )
  138. add_executable(PicoDst-config "${CMAKE_CURRENT_SOURCE_DIR}/bin/PicoDstConfig.cpp")
  139. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "\n")
  140. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "alias PicoDst-config='${PICO_DST_BIN}/PicoDst-config'\n")
  141. if( FAIRROOT_FOUND )
  142. #---Compile executable
  143. if(DEFINED ENV{VMCWORKDIR})
  144. set(MPDROOTDIR $ENV{VMCWORKDIR})
  145. message(STATUS "MpdRoot environment is found: ${MPDROOTDIR}")
  146. set(PICODSTCONVERTER_INCLUDE_DIRECTORIES
  147. ${FAIRROOT_INCLUDE_DIR}
  148. ${MPDROOTDIR}/tpc
  149. ${MPDROOTDIR}/kalman
  150. ${MPDROOTDIR}/lhetrack
  151. ${MPDROOTDIR}/mcstack
  152. ${MPDROOTDIR}/generators
  153. ${MPDROOTDIR}/strawendcap
  154. ${MPDROOTDIR}/etof
  155. ${MPDROOTDIR}/tof
  156. ${MPDROOTDIR}/sft
  157. ${MPDROOTDIR}/sts
  158. ${MPDROOTDIR}/zdc
  159. ${MPDROOTDIR}/mpddst
  160. ${MPDROOTDIR}/mpdbase
  161. ${MPDROOTDIR}/mpdpid
  162. )
  163. #---Add Needed libraries
  164. find_library(BASE NAMES Base PATHS ${FAIRROOT_LIBRARY_DIR})
  165. find_library(MCSTACK NAMES MCStack PATHS $ENV{FAIRLIBDIR})
  166. if (MCSTACK)
  167. message(STATUS "MCStack library is found")
  168. add_definitions("-D_OLD_MCSTACK_")
  169. endif()
  170. if (NOT MCSTACK)
  171. find_library(MPDMCSTACK NAMES MpdMCStack PATHS $ENV{FAIRLIBDIR})
  172. message(STATUS "MpdMCStack library is found")
  173. add_definitions("-D_NEW_MCSTACK_")
  174. endif()
  175. find_library(PASSIVE NAMES Passive PATHS $ENV{FAIRLIBDIR})
  176. find_library(MPDFIELD NAMES MpdField PATHS $ENV{FAIRLIBDIR})
  177. find_library(MPDBASE NAMES MpdBase PATHS $ENV{FAIRLIBDIR})
  178. find_library(MPDDST NAMES MpdDst PATHS $ENV{FAIRLIBDIR})
  179. find_library(MPDGENERALGENERATOR NAMES MpdGeneralGenerator PATHS $ENV{FAIRLIBDIR})
  180. find_library(KALMAN NAMES Kalman PATHS $ENV{FAIRLIBDIR})
  181. find_library(CLUSTER NAMES Cluster PATHS $ENV{FAIRLIBDIR})
  182. find_library(TPC NAMES tpc PATHS $ENV{FAIRLIBDIR})
  183. find_library(TOF NAMES Tof PATHS $ENV{FAIRLIBDIR})
  184. find_library(ETOF NAMES Etof PATHS $ENV{FAIRLIBDIR})
  185. find_library(STRAWENDCAP NAMES Strawendcap PATHS $ENV{FAIRLIBDIR})
  186. find_library(ZDC NAMES Zdc PATHS $ENV{FAIRLIBDIR})
  187. find_library(FFD NAMES Ffd PATHS $ENV{FAIRLIBDIR})
  188. find_library(CPC NAMES Cpc PATHS $ENV{FAIRLIBDIR})
  189. find_library(STRAWECT NAMES StrawECT PATHS $ENV{FAIRLIBDIR})
  190. find_library(LHETrack NAMES LHETrack PATHS $ENV{FAIRLIBDIR})
  191. find_library(STS NAMES Sts PATHS $ENV{FAIRLIBDIR})
  192. find_library(MPDPID NAMES MpdPid PATHS $ENV{FAIRLIBDIR})
  193. if(MCSTACK)
  194. set(PICODSTCONVERTER_INCLUDE_LIBRARIES
  195. PicoDst ${BASE}
  196. ${MCSTACK} ${PASSIVE} ${KALMAN} ${CLUSTER} ${TPC} ${STS} ${ZDC} ${FFD}
  197. ${STRAWECT} ${STRAWENDCAP} ${LHETRACK} ${TOF}
  198. ${MPDFIELD} ${MPDBASE} ${MPDDST} ${MPDGENERALGENERATOR} ${MPDPID}
  199. )
  200. elseif(MPDMCSTACK)
  201. set(PICODSTCONVERTER_INCLUDE_LIBRARIES
  202. PicoDst ${BASE}
  203. ${MPDMCSTACK} ${PASSIVE} ${KALMAN} ${CLUSTER} ${TPC} ${STS} ${ZDC} ${FFD}
  204. ${STRAWECT} ${STRAWENDCAP} ${LHETRACK} ${TOF}
  205. ${MPDFIELD} ${MPDBASE} ${MPDDST} ${MPDGENERALGENERATOR} ${MPDPID}
  206. )
  207. elseif()
  208. message(FATAL_ERROR "No MCSTACK nor MPDMCSTACK libraries was found!")
  209. endif()
  210. add_executable(PicoDstConverter "${CMAKE_CURRENT_SOURCE_DIR}/converter/PicoDstConverter.cpp")
  211. target_include_directories(PicoDstConverter PUBLIC ${PICODSTCONVERTER_INCLUDE_DIRECTORIES})
  212. target_link_libraries(PicoDstConverter ${PICODSTCONVERTER_INCLUDE_LIBRARIES})
  213. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "alias PicoDstConverter='${PICO_DST_BIN}/PicoDstConverter'\n")
  214. else(DEFINED ENV{VMCWORKDIR})
  215. message(WARNING "MpdRoot environment is NOT found. Skip corresponding step.")
  216. endif(DEFINED ENV{VMCWORKDIR})
  217. endif()