CMakeLists.txt 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  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_SRC: " $ENV{PICO_DST_SRC})
  77. set(BASH $ENV{SHELL})
  78. file( WRITE ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "#!${BASH}\n")
  79. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "\n")
  80. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "export PICO_DST_BIN=$ENV{PICO_DST_BIN}\n")
  81. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "export PICO_DST_SRC=$ENV{PICO_DST_SRC}\n")
  82. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "export PICO_DST_INC=$ENV{PICO_DST_INC}\n")
  83. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "\n")
  84. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "export LD_LIBRARY_PATH=$PICO_DST_BIN:$LD_LIBRARY_PATH\n")
  85. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "export PATH=$PICO_DST_BIN:$PATH\n")
  86. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "export CPATH=$PICO_DST_INC:$CPATH\n")
  87. # Get the current working branch
  88. execute_process(
  89. COMMAND git rev-parse --abbrev-ref HEAD
  90. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  91. OUTPUT_VARIABLE GIT_BRANCH
  92. RESULT_VARIABLE GIT_BRANCH_ERROR_CODE
  93. OUTPUT_STRIP_TRAILING_WHITESPACE
  94. )
  95. if( GIT_BRANCH_ERROR_CODE )
  96. set(GIT_BRANCH 0)
  97. endif()
  98. # Get the latest abbreviated commit hash of the working branch
  99. execute_process(
  100. COMMAND git rev-parse --short HEAD
  101. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  102. OUTPUT_VARIABLE GIT_COMMIT_HASH
  103. RESULT_VARIABLE GIT_COMMIT_HASH_ERROR_CODE
  104. OUTPUT_STRIP_TRAILING_WHITESPACE
  105. )
  106. if( GIT_COMMIT_HASH_ERROR_CODE )
  107. set(GIT_COMMIT_HASH 0)
  108. endif()
  109. # Get the current version
  110. execute_process(
  111. COMMAND git describe --tags --match "*"
  112. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  113. OUTPUT_VARIABLE GIT_TAG_VERSION
  114. RESULT_VARIABLE GIT_TAG_VERSION_ERROR_CODE
  115. OUTPUT_STRIP_TRAILING_WHITESPACE
  116. )
  117. if( GIT_TAG_VERSION_ERROR_CODE )
  118. set(GIT_TAG_VERSION 0.0)
  119. endif()
  120. #---If one wants to input those definitions manually, use this commands:
  121. #add_definitions("-DGIT_COMMIT_HASH=${GIT_COMMIT_HASH}")
  122. #add_definitions("-DGIT_BRANCH=${GIT_BRANCH}")
  123. #add_definitions("-DGIT_TAG_VERSION=${GIT_TAG_VERSION}")
  124. #add_definitions("-DPICO_DST_BIN_DIR=${PICO_DST_BIN}")
  125. #add_definitions("-DPICO_DST_SRC_DIR=${PICO_DST_SRC}")
  126. #add_definitions("-DPICO_DST_INC_DIR=${PICO_DST_INC}")
  127. configure_file(
  128. ${CMAKE_CURRENT_SOURCE_DIR}/include/PicoDstVersion.h.in
  129. ${CMAKE_CURRENT_BINARY_DIR}/generated/PicoDstVersion.h
  130. )
  131. include_directories(${CMAKE_CURRENT_BINARY_DIR}/generated)
  132. set_target_properties (PicoDst
  133. PROPERTIES
  134. VERSION ${GIT_TAG_VERSION} SOVERSION ${GIT_BRANCH}-${GIT_COMMIT_HASH}
  135. PUBLIC_HEADER ${CMAKE_CURRENT_BINARY_DIR}/generated/PicoDstVersion.h
  136. )
  137. add_executable(PicoDst-config "${CMAKE_CURRENT_SOURCE_DIR}/bin/PicoDstConfig.cpp")
  138. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "\n")
  139. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "alias PicoDst-config='${PICO_DST_BIN}/PicoDst-config'\n")
  140. if( FAIRROOT_FOUND )
  141. #---Compile executable
  142. if(DEFINED ENV{VMCWORKDIR})
  143. set(MPDROOTDIR $ENV{VMCWORKDIR})
  144. message(STATUS "MpdRoot environment is found: ${MPDROOTDIR}")
  145. set(PICODSTCONVERTER_INCLUDE_DIRECTORIES
  146. ${FAIRROOT_INCLUDE_DIR}
  147. ${MPDROOTDIR}/tpc
  148. ${MPDROOTDIR}/kalman
  149. ${MPDROOTDIR}/lhetrack
  150. ${MPDROOTDIR}/mcstack
  151. ${MPDROOTDIR}/strawendcap
  152. ${MPDROOTDIR}/etof
  153. ${MPDROOTDIR}/tof
  154. ${MPDROOTDIR}/sft
  155. ${MPDROOTDIR}/sts
  156. ${MPDROOTDIR}/zdc
  157. ${MPDROOTDIR}/mpddst
  158. ${MPDROOTDIR}/mpdbase
  159. ${MPDROOTDIR}/mpdpid
  160. )
  161. #---Add Needed libraries
  162. find_library(BASE NAMES Base PATHS ${FAIRROOT_LIBRARY_DIR})
  163. find_library(MCSTACK NAMES MCStack PATHS $ENV{FAIRLIBDIR})
  164. find_library(PASSIVE NAMES Passive PATHS $ENV{FAIRLIBDIR})
  165. find_library(MPDFIELD NAMES MpdField PATHS $ENV{FAIRLIBDIR})
  166. find_library(MPDBASE NAMES MpdBase PATHS $ENV{FAIRLIBDIR})
  167. find_library(MPDDST NAMES MpdDst PATHS $ENV{FAIRLIBDIR})
  168. find_library(MPDGENERALGENERATOR NAMES MpdGeneralGenerator PATHS $ENV{FAIRLIBDIR})
  169. find_library(KALMAN NAMES Kalman PATHS $ENV{FAIRLIBDIR})
  170. find_library(CLUSTER NAMES Cluster PATHS $ENV{FAIRLIBDIR})
  171. find_library(TPC NAMES tpc PATHS $ENV{FAIRLIBDIR})
  172. find_library(TOF NAMES Tof PATHS $ENV{FAIRLIBDIR})
  173. find_library(ETOF NAMES Etof PATHS $ENV{FAIRLIBDIR})
  174. find_library(STRAWENDCAP NAMES Strawendcap PATHS $ENV{FAIRLIBDIR})
  175. find_library(ZDC NAMES Zdc PATHS $ENV{FAIRLIBDIR})
  176. find_library(FFD NAMES Ffd PATHS $ENV{FAIRLIBDIR})
  177. find_library(CPC NAMES Cpc PATHS $ENV{FAIRLIBDIR})
  178. find_library(STRAWECT NAMES StrawECT PATHS $ENV{FAIRLIBDIR})
  179. find_library(LHETrack NAMES LHETrack PATHS $ENV{FAIRLIBDIR})
  180. find_library(STS NAMES Sts PATHS $ENV{FAIRLIBDIR})
  181. find_library(MPDPID NAMES MpdPid PATHS $ENV{FAIRLIBDIR})
  182. set(PICODSTCONVERTER_INCLUDE_LIBRARIES
  183. PicoDst ${BASE}
  184. ${MCSTACK} ${PASSIVE} ${KALMAN} ${CLUSTER} ${TPC} ${STS} ${ZDC} ${FFD}
  185. ${STRAWECT} ${STRAWENDCAP} ${LHETRACK} ${TOF}
  186. ${MPDFIELD} ${MPDBASE} ${MPDDST} ${MPDGENERALGENERATOR} ${MPDPID}
  187. )
  188. add_executable(PicoDstConverter "${CMAKE_CURRENT_SOURCE_DIR}/converter/PicoDstConverter.cpp")
  189. target_include_directories(PicoDstConverter PUBLIC ${PICODSTCONVERTER_INCLUDE_DIRECTORIES})
  190. target_link_libraries(PicoDstConverter ${PICODSTCONVERTER_INCLUDE_LIBRARIES})
  191. file( APPEND ${CMAKE_CURRENT_BINARY_DIR}/setPicoDst.sh "alias PicoDstConverter='${PICO_DST_BIN}/PicoDstConverter'\n")
  192. else(DEFINED ENV{VMCWORKDIR})
  193. message(WARNING "MpdRoot environment is NOT found. Skip corresponding step.")
  194. endif(DEFINED ENV{VMCWORKDIR})
  195. endif()