3 # Top level CMakeList.txt file for the AliRoot Build System
5 # Author: Johny Jose (johny.jose@cern.ch)
6 # Port of previous Makefile build to cmake
9 cmake_minimum_required(VERSION 2.8.4 FATAL_ERROR)
11 #--------------------------------------------------------------------------------#
12 # Set Basic CMake Configuration #
13 #--------------------------------------------------------------------------------#
15 project(AliRoot CXX C Fortran)
17 # Environment variables
18 set(ALICE $ENV{ALICE})
20 message(WARNING "Environment variable ALICE is not set")
23 set(ALICE_ROOT $ENV{ALICE_ROOT})
25 message(FATAL_ERROR "Please set ALICE_ROOT to the AliRoot source directory")
28 set(ALICE_INSTALL $ENV{ALICE_INSTALL})
29 # Set AliRoot Installation directory
30 # If CMAKE_INSTALL_PREFIX was not set than we set it to ALICE_INSTALL.
31 # If ALICE_INSTALL was not defined than it will default to source directory
32 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
34 message(STATUS "AliRoot files will be installed in ${ALICE_INSTALL}")
36 message(STATUS "AliRoot files will be installed in ${ALICE_ROOT}. You
37 can specify a different location by passing -DCMAKE_INSTALL_PREFIX or
38 by setting ALICE_INSTALL environment variable")
39 set(ALICE_INSTALL ${ALICE_ROOT})
40 if(${ALICE_INSTALL} STREQUAL ${CMAKE_BINARY_DIR})
41 message(FATAL_ERROR "The install directory must differ from the
45 set(CMAKE_INSTALL_PREFIX ${ALICE_INSTALL} CACHE STRING "Install dir" FORCE)
49 # Environment for SHUTTLE
50 set(DIMDIR $ENV{DIMDIR})
53 get_filename_component(PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}" REALPATH)
54 set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
55 set(CPACK_COMPONENTS_ALL MDC)
59 #--------------------------------------------------------------------------------#
61 #--------------------------------------------------------------------------------#
64 # ------------------------------
66 find_package(Subversion REQUIRED)
69 # ------------------------------
71 find_package(ROOT REQUIRED)
74 # ------------------------------
76 find_package(RuleChecker)
79 # ------------------------------
84 # ------------------------------
89 # ------------------------------
93 # AliRoot CPack configuration
94 #-------------------------------
99 # ------------------------------
103 # ------------------------------
104 find_package(FASTJET)
106 #--------------------------------------------------------------------------------#
107 # Environment/Compiler Configuration #
108 #--------------------------------------------------------------------------------#
110 ALICE_CheckOutOfSourceBuild()
111 ALICE_RootConfig(CMAKE_CXX_COMPILER --cxx)
112 ALICE_RootConfig(CMAKE_C_COMPILER --cc)
113 ALICE_RootConfig(CMAKE_Fortran_COMPILER --f77)
114 ALICE_ConfigurePlatform()
115 ALICE_ConfigureCompiler()
118 #--------------------------------------------------------------------------------#
119 # AliRoot Path Settings #
120 #--------------------------------------------------------------------------------#
122 ALICE_DevFlagsOutput()
123 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin/tgt_${ALICE_TARGET}")
124 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib/tgt_${ALICE_TARGET}")
125 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib/tgt_${ALICE_TARGET}")
126 set(CMAKE_INCLUDE_EXPORT_DIRECTORY "${PROJECT_BINARY_DIR}/include")
127 file(MAKE_DIRECTORY ${CMAKE_INCLUDE_EXPORT_DIRECTORY})
128 set(EXPORTDIRS "${ALICE_INSTALL}/include")
129 set(BINLIBDIRS "-L${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
132 #--------------------------------------------------------------------------------#
134 #--------------------------------------------------------------------------------#
136 # Exclude Module from all target
137 # ------------------------------
139 #set(EXCLUDEMODULES THydjet SHUTTLE)
143 # ------------------------------
144 set(ALIROOTMODULES STEER PHOS TRD TPC ZDC MUON PMD FMD TOF ITS AD ACORDE HMPID T0 BCM STRUCT VZERO THijing THbtp EMCAL THerwig TEPEMGEN FASTSIM TPHIC RAW MONITOR ANALYSIS JETAN HLT STAT TTherminator CORRFW DPMJET TDPMjet STARLIGHT PWGPP PWG PWGCF PWGGA PWGHF PWGDQ PWGJE PWGLF PWGUD TRIGGER PYTHIA8 TAmpt OADB MFT TEvtGen FIT)
147 list(APPEND ALIROOTMODULES THydjet)
151 list(APPEND ALIROOTMODULES SHUTTLE)
155 # ------------------------------
156 list(APPEND ALIROOTMODULES TUHKMgen EPOS)
159 # ------------------------------
160 ALICE_RootConfig(EVE --has-opengl)
161 if(NOT EVE STREQUAL "no")
162 list(APPEND ALIROOTMODULES EVE)
163 endif(NOT EVE STREQUAL "no")
166 # ------------------------------
167 set(CERNMODULES LHAPDF HIJING MICROCERN HERWIG)
170 if(EXISTS ${ROOTINCDIR}/TPythia6.h)
172 list(APPEND CERNMODULES PYTHIA6 EVGEN)
174 message(FATAL_ERROR "ROOT must have Pythia6 enabled !")
175 endif(EXISTS ${ROOTINCDIR}/TPythia6.h)
177 # Set Final list of modules
178 set(MODULES ${ALIROOTMODULES} ${CERNMODULES} ALIROOT)
180 # Set Module directories
181 set(MODDIRS ${MODULES})
183 # Libraries for Linking
184 # ------------------------------
185 set(ALILIBS MUON TPC PMD TRD FMD TOF ITS PHOS AD ACORDE HMPID VZERO ZDC STRUCT T0 EVGEN STEER TRIGGER MFT)
186 set(LIBS ${ROOTCLIBS} ${ROOTPLIBS} ${SYSLIBS})
188 # Configure ARVerion.h
189 # ------------------------------
190 #If the sources were taken from Git
191 if(EXISTS ${PROJECT_SOURCE_DIR}/.git/)
192 include(GetGitRevisionDescription)
197 get_git_head_revision(GIT_REFSPEC GIT_SHA1)
198 message(STATUS "Aliroot branch - ${GIT_REFSPEC} Revision - ${GIT_SHA1} ")
200 STRING(REGEX REPLACE "^(.+/)(.+)/(.*)$" "\\2" BRANCH_TYPE "${GIT_REFSPEC}" )
202 if(BRANCH_TYPE STREQUAL "heads")
203 set(ALIROOT_REVISION "ThisIsaBranchNoRevisionProvided")
205 set(ALIROOT_REVISION ${GIT_SHA1})
208 STRING(REGEX REPLACE "^(.+/)(.+/)(.*)$" "\\3" SHORT_BRANCH "${GIT_REFSPEC}" )
210 set(ALIROOT_BRANCH ${SHORT_BRANCH})
213 message("Git not installed. I can't tell you which revision you are using!")
216 message("AliRoot sources not downloaded from a Version Control System. I can't tell which revision you are using!")
217 endif(EXISTS ${PROJECT_SOURCE_DIR}/.git/)
219 configure_file(${PROJECT_SOURCE_DIR}/cmake/ARVersion.h.tmp ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h @ONLY)
221 string (REPLACE "-" "." ALIROOT_BRANCH_SPEC "${ALIROOT_BRANCH}")
223 #--------------------------------------------------------------------------------#
225 #--------------------------------------------------------------------------------#
228 # ------------------------------
235 # Top Level Build Targets
236 # ------------------------------
238 add_custom_target(alilibs-static)
239 add_custom_target(include-headers ALL)
240 add_custom_target(DA-all)
241 add_custom_target(check-all)
242 add_custom_target(check-hxml)
243 add_custom_target(smell-all)
244 add_custom_target(htmldoc)
245 add_custom_target(par-all)
246 add_custom_target(test-par-all)
248 #NY file(GLOB CFILES_LIST ${CMAKE_SOURCE_DIR}/macros/*.C)
250 add_custom_command(TARGET htmldoc
252 COMMAND mkdir -p html
253 COMMAND rm -rf html/roothtml
254 COMMAND rm -f html/picts
255 COMMAND cd html && aliroot -q -b mkhtml.C\\\(0,1\\\)
256 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
258 # Include Vc, which provides the static libVc and the relevant CMake macros
263 # ------------------------------
264 foreach(MODULE ${MODDIRS})
266 #RS configure_file(${PROJECT_SOURCE_DIR}/cmake/Module.tmp ${PROJECT_SOURCE_DIR}/${MODULE}/CMakeLists.txt @ONLY)
267 add_custom_target(${MODULE}-all ALL)
268 add_custom_target(${MODULE}-par-all)
269 add_custom_target(test-${MODULE}-par-all)
270 add_custom_target(${MODULE}-all-static)
271 add_dependencies(alilibs-static "${MODULE}-static")
272 add_subdirectory(${MODULE})
274 #NY set(dir "${CMAKE_SOURCE_DIR}/${MODULE}")
275 #NY if (EXISTS "${dir}")
276 #NY file(GLOB CFILES_MOD ${dir}/*.C)
277 #NY list(LENGTH CFILES_MOD len)
278 #NY if (${len} GREATER 0)
279 #NY list(APPEND CFILES_LIST "${CFILES_MOD}")
280 #NY endif (${len} GREATER 0)
281 #NY endif(EXISTS "${dir}")
284 #NY foreach(cfile ${CFILES_LIST})
285 #NY add_custom_command(TARGET htmldoc
287 #NY COMMAND cd html &&
288 #NY aliroot -b -q \"mkhtml.C(\"${cfile}\")\" > /dev/null
289 #NY WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
290 #NY endforeach(cfile)
296 if(RULECHECKER_FOUND)
297 add_custom_target(factfile DEPENDS ${FACTFILE})
298 add_custom_command( OUTPUT ${FACTFILE}
299 COMMAND ${CMAKE_COMMAND} -E echo "Re-generating factfile"
300 COMMAND ${JAVA_RUNTIME} -Xmx1024M -jar ${FACTEXTRACTOR_JAR} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}
301 DEPENDS check-hxml ${CMAKE_BINARY_DIR}/check-hxml-touchfile ${_factfile_deps}
302 WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
303 endif(RULECHECKER_FOUND)
305 #--------------------------------------------------------------------------------#
306 # Additional Targets #
307 #--------------------------------------------------------------------------------#
310 # ------------------------------
313 COMMAND root-config --libdir
314 OUTPUT_VARIABLE ROOTALIBDIR)
315 string(REPLACE "\n" "" ROOTALIBDIR ${ROOTALIBDIR})
318 COMMAND root-config --arch
319 OUTPUT_VARIABLE ARCHITECTURE)
323 set(LIBPATH ${CMAKE_BINARY_DIR}/lib/tgt_${ALICE_TARGET})
324 set(BINPATH ${CMAKE_BINARY_DIR}/bin/tgt_${ALICE_TARGET})
325 set(EXPORTDIR ${ALICE_ROOT}/include)
326 #set(BINLIBDIRS -L${ALICE_ROOT}/${LIBPATH})
327 set(RAWDIRO ${CMAKE_BINARY_DIR}/RAW)
328 set(ALIMDCSPECFILE ${RAWDIRO}/alimdc.spec)
329 set(RAWDatabaseALIB ${LIBPATH}/libRAWDatabase.${AEXT})
330 set(ESDALIB ${LIBPATH}/libESD.${AEXT})
331 set(STEERBaseALIB ${LIBPATH}/libSTEERBase.${AEXT})
332 set(MDCALIB ${LIBPATH}/libMDC.${AEXT})
333 set(MODDIRO RAW/tgt_${ALICE_TARGET})
336 if( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
337 set(ALIMDCARCHDIR x86_64)
338 elseif( ${ARCHITECTURE} MATCHES "linux" )
339 set(ALIMDCARCHDIR i386)
340 elseif( ${ARCHITECTURE} MATCHES "linuxia64gcc" )
341 set(ALIMDCARCHDIR ia64)
342 elseif(NOT DEFINED ${ARCHITECTURE})
343 message("alimdc-rpm: Unknown architecture" )
344 else( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
345 message("alimdc-rpm: Unknown architecture" )
346 endif( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
349 # Module version will be written in the generated header
350 configure_file ("RAW/alimdc.spec.in" "${CMAKE_CURRENT_BINARY_DIR}/RAW/alimdc.spec" @ONLY)
352 add_custom_target( alimdc-rpm
353 DEPENDS alimdc-static
359 COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root
360 COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
361 COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/include
362 COMMAND cp ${ALICE_ROOT}/RAW/mdc.h ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/include
363 COMMAND cp ${LIBPATH}/libAliMDC.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
364 COMMAND cp ${ROOTALIBDIR}/libRoot.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
365 COMMAND cp ${ROOTALIBDIR}/liblzma.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
366 COMMAND cp ${ROOTALIBDIR}/libpcre.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
367 COMMAND cp ${ROOTALIBDIR}/libfreetype.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
368 COMMAND cp ${ROOTALIBDIR}/libpcre.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
369 COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/RPMS
370 COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/RPMS/${ALIMDCARCHDIR}/
371 COMMAND rpmbuild --verbose --define "_topdir ${CMAKE_CURRENT_BINARY_DIR}" --define "%buildroot ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root" -bb ${ALIMDCSPECFILE}
372 COMMAND cp -p ${CMAKE_CURRENT_BINARY_DIR}/RPMS/${ALIMDCARCHDIR}/alimdc-*.rpm .
373 COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root
374 COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/RPMS
375 COMMAND echo "***** alimdc RPM created and put in ${CMAKE_BINARY_DIR} folder *****"
380 COMMAND mkdir-p ${RAWDIRO}
384 add_custom_target( alimdc-static
385 DEPENDS ${LIBPATH} ${BINPATH} RAW-all-static STEER-all-static )
390 COMMAND ar r ${LIBPATH}/alimdccxxo.a ${CMAKE_BINARY_DIR}/RAW/CMakeFiles/alimdc.dir/alimdc_main.cxx.o
391 COMMAND rm -rf ${LIBPATH}/libAliMDC.a
392 COMMAND ar x ${RAWDatabaseALIB}
393 COMMAND ar x ${MDCALIB}
394 COMMAND ar x ${ESDALIB}
395 COMMAND ar x ${STEERBaseALIB}
396 COMMAND ar r ${LIBPATH}/libAliMDC.a *.o
397 COMMAND ar t ${RAWDatabaseALIB} | xargs rm
398 COMMAND ar t ${MDCALIB} | xargs rm
399 COMMAND ar t ${ESDALIB} | xargs rm
400 COMMAND ar t ${STEERBaseALIB} | xargs rm
401 COMMAND ${CMAKE_CXX_COMPILER} ${LDFLAGS} -o ${BINPATH}/alimdca ${LIBPATH}/alimdccxxo.a ${LIBPATH}/libAliMDC.a ${ROOTALIBDIR}/libRoot.a ${ROOTALIBDIR}/libfreetype.a ${ROOTALIBDIR}/libpcre.a ${ROOTALIBDIR}/liblzma.a -pthread -lssl -ldl -lz
402 COMMAND @echo "Target alimdc-static made"
407 COMMAND mkdir -p ${LIBPATH}
411 #include (MakefileDA)
412 include (InstallRequiredSystemLibraries)
416 # ------------------------------
417 install ( DIRECTORY data
419 install ( DIRECTORY OCDB
421 PATTERN ".svn" EXCLUDE)
422 install ( DIRECTORY QAref
424 PATTERN ".svn" EXCLUDE)
425 install ( DIRECTORY GRP
427 PATTERN ".svn" EXCLUDE)