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
31 message(STATUS "AliRoot files will be installed in ${ALICE_ROOT}. You can specify a different location by setting ALICE_INSTALL environment variable")
32 set(ALICE_INSTALL ${ALICE_ROOT})
34 message(STATUS "AliRoot files will be installed in ${ALICE_INSTALL}")
35 endif(NOT ALICE_INSTALL)
36 if(${ALICE_INSTALL} STREQUAL ${CMAKE_BINARY_DIR})
37 message(FATAL_ERROR "Install dir should be different from build dir")
39 set(CMAKE_INSTALL_PREFIX ${ALICE_INSTALL})
41 # Environment for SHUTTLE
42 set(DIMDIR $ENV{DIMDIR})
45 get_filename_component(PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}" REALPATH)
46 set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
47 set(CPACK_COMPONENTS_ALL MDC)
51 #--------------------------------------------------------------------------------#
53 #--------------------------------------------------------------------------------#
56 # ------------------------------
58 find_package(Subversion REQUIRED)
61 # ------------------------------
63 find_package(ROOT REQUIRED)
66 # ------------------------------
68 find_package(RuleChecker)
71 # ------------------------------
76 # ------------------------------
81 # ------------------------------
85 # AliRoot CPack configuration
86 #-------------------------------
91 # ------------------------------
94 #--------------------------------------------------------------------------------#
95 # Environment/Compiler Configuration #
96 #--------------------------------------------------------------------------------#
98 ALICE_CheckOutOfSourceBuild()
99 ALICE_RootConfig(CMAKE_CXX_COMPILER --cxx)
100 ALICE_RootConfig(CMAKE_C_COMPILER --cc)
101 ALICE_RootConfig(CMAKE_Fortran_COMPILER --f77)
102 ALICE_ConfigurePlatform()
103 ALICE_ConfigureCompiler()
106 #--------------------------------------------------------------------------------#
107 # AliRoot Path Settings #
108 #--------------------------------------------------------------------------------#
110 ALICE_DevFlagsOutput()
111 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin/tgt_${ALICE_TARGET}")
112 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib/tgt_${ALICE_TARGET}")
113 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib/tgt_${ALICE_TARGET}")
114 set(CMAKE_INCLUDE_EXPORT_DIRECTORY "${PROJECT_BINARY_DIR}/include")
115 file(MAKE_DIRECTORY ${CMAKE_INCLUDE_EXPORT_DIRECTORY})
116 set(EXPORTDIRS "${ALICE_INSTALL}/include")
117 set(BINLIBDIRS "-L${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
120 #--------------------------------------------------------------------------------#
122 #--------------------------------------------------------------------------------#
124 # Exclude Module from all target
125 # ------------------------------
127 #set(EXCLUDEMODULES THydjet SHUTTLE)
131 # ------------------------------
132 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)
135 list(APPEND ALIROOTMODULES THydjet)
139 list(APPEND ALIROOTMODULES SHUTTLE)
143 # ------------------------------
144 list(APPEND ALIROOTMODULES TUHKMgen EPOS)
147 # ------------------------------
148 ALICE_RootConfig(EVE --has-opengl)
149 if(NOT EVE STREQUAL "no")
150 list(APPEND ALIROOTMODULES EVE)
151 endif(NOT EVE STREQUAL "no")
154 # ------------------------------
155 set(CERNMODULES LHAPDF HIJING MICROCERN HERWIG)
158 if(EXISTS ${ROOTINCDIR}/TPythia6.h)
160 list(APPEND CERNMODULES PYTHIA6 EVGEN)
162 message(FATAL_ERROR "ROOT must have Pythia6 enabled !")
163 endif(EXISTS ${ROOTINCDIR}/TPythia6.h)
165 # Set Final list of modules
166 set(MODULES ${ALIROOTMODULES} ${CERNMODULES} ALIROOT)
168 # Set Module directories
169 set(MODDIRS ${MODULES})
171 # Libraries for Linking
172 # ------------------------------
173 set(ALILIBS MUON TPC PMD TRD FMD TOF ITS PHOS AD ACORDE HMPID VZERO ZDC STRUCT T0 EVGEN STEER TRIGGER MFT)
174 set(LIBS ${ROOTCLIBS} ${ROOTPLIBS} ${SYSLIBS})
176 # Configure ARVerion.h
177 # ------------------------------
178 #If the sources were taken from Git
179 if(EXISTS ${PROJECT_SOURCE_DIR}/.git/)
180 include(GetGitRevisionDescription)
185 get_git_head_revision(GIT_REFSPEC GIT_SHA1)
186 message(STATUS "Aliroot branch - ${GIT_REFSPEC} Revision - ${GIT_SHA1} ")
188 STRING(REGEX REPLACE "^(.+/)(.+)/(.*)$" "\\2" BRANCH_TYPE "${GIT_REFSPEC}" )
190 if(BRANCH_TYPE STREQUAL "heads")
191 set(ALIROOT_REVISION "ThisIsaBranchNoRevisionProvided")
193 set(ALIROOT_REVISION ${GIT_SHA1})
196 STRING(REGEX REPLACE "^(.+/)(.+/)(.*)$" "\\3" SHORT_BRANCH "${GIT_REFSPEC}" )
198 set(ALIROOT_BRANCH ${SHORT_BRANCH})
201 message("Git not installed. I can't tell you which revision you are using!")
204 message("AliRoot sources not downloaded from a Version Control System. I can't tell which revision you are using!")
205 endif(EXISTS ${PROJECT_SOURCE_DIR}/.git/)
207 configure_file(${PROJECT_SOURCE_DIR}/cmake/ARVersion.h.tmp ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h @ONLY)
209 string (REPLACE "-" "." ALIROOT_BRANCH_SPEC "${ALIROOT_BRANCH}")
211 #--------------------------------------------------------------------------------#
213 #--------------------------------------------------------------------------------#
216 # ------------------------------
223 # Top Level Build Targets
224 # ------------------------------
226 add_custom_target(alilibs-static)
227 add_custom_target(include-headers ALL)
228 add_custom_target(DA-all)
229 add_custom_target(check-all)
230 add_custom_target(check-hxml)
231 add_custom_target(smell-all)
232 add_custom_target(htmldoc)
233 add_custom_target(par-all)
234 add_custom_target(test-par-all)
236 #NY file(GLOB CFILES_LIST ${CMAKE_SOURCE_DIR}/macros/*.C)
238 add_custom_command(TARGET htmldoc
240 COMMAND mkdir -p html
241 COMMAND rm -rf html/roothtml
242 COMMAND rm -f html/picts
243 COMMAND cd html && aliroot -q -b mkhtml.C\\\(0,1\\\)
244 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
246 # Include Vc, which provides the static libVc and the relevant CMake macros
251 # ------------------------------
252 foreach(MODULE ${MODDIRS})
254 #RS configure_file(${PROJECT_SOURCE_DIR}/cmake/Module.tmp ${PROJECT_SOURCE_DIR}/${MODULE}/CMakeLists.txt @ONLY)
255 add_custom_target(${MODULE}-all ALL)
256 add_custom_target(${MODULE}-par-all)
257 add_custom_target(test-${MODULE}-par-all)
258 add_custom_target(${MODULE}-all-static)
259 add_dependencies(alilibs-static "${MODULE}-static")
260 add_subdirectory(${MODULE})
262 #NY set(dir "${CMAKE_SOURCE_DIR}/${MODULE}")
263 #NY if (EXISTS "${dir}")
264 #NY file(GLOB CFILES_MOD ${dir}/*.C)
265 #NY list(LENGTH CFILES_MOD len)
266 #NY if (${len} GREATER 0)
267 #NY list(APPEND CFILES_LIST "${CFILES_MOD}")
268 #NY endif (${len} GREATER 0)
269 #NY endif(EXISTS "${dir}")
272 #NY foreach(cfile ${CFILES_LIST})
273 #NY add_custom_command(TARGET htmldoc
275 #NY COMMAND cd html &&
276 #NY aliroot -b -q \"mkhtml.C(\"${cfile}\")\" > /dev/null
277 #NY WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
278 #NY endforeach(cfile)
284 if(RULECHECKER_FOUND)
285 add_custom_target(factfile DEPENDS ${FACTFILE})
286 add_custom_command( OUTPUT ${FACTFILE}
287 COMMAND ${CMAKE_COMMAND} -E echo "Re-generating factfile"
288 COMMAND ${JAVA_RUNTIME} -Xmx1024M -jar ${FACTEXTRACTOR_JAR} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}
289 DEPENDS check-hxml ${CMAKE_BINARY_DIR}/check-hxml-touchfile ${_factfile_deps}
290 WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
291 endif(RULECHECKER_FOUND)
293 #--------------------------------------------------------------------------------#
294 # Additional Targets #
295 #--------------------------------------------------------------------------------#
298 # ------------------------------
301 COMMAND root-config --libdir
302 OUTPUT_VARIABLE ROOTALIBDIR)
303 string(REPLACE "\n" "" ROOTALIBDIR ${ROOTALIBDIR})
306 COMMAND root-config --arch
307 OUTPUT_VARIABLE ARCHITECTURE)
311 set(LIBPATH ${CMAKE_BINARY_DIR}/lib/tgt_${ALICE_TARGET})
312 set(BINPATH ${CMAKE_BINARY_DIR}/bin/tgt_${ALICE_TARGET})
313 set(EXPORTDIR ${ALICE_ROOT}/include)
314 set(BINLIBDIRS -L${ALICE_ROOT}/${LIBPATH})
315 set(RAWDIRO ${CMAKE_BINARY_DIR}/RAW)
316 set(ALIMDCSPECFILE ${RAWDIRO}/alimdc.spec)
317 set(RAWDatabaseALIB ${LIBPATH}/libRAWDatabase.${AEXT})
318 set(ESDALIB ${LIBPATH}/libESD.${AEXT})
319 set(STEERBaseALIB ${LIBPATH}/libSTEERBase.${AEXT})
320 set(MDCALIB ${LIBPATH}/libMDC.${AEXT})
321 set(MODDIRO RAW/tgt_${ALICE_TARGET})
324 if( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
325 set(ALIMDCARCHDIR x86_64)
326 elseif( ${ARCHITECTURE} MATCHES "linux" )
327 set(ALIMDCARCHDIR i386)
328 elseif( ${ARCHITECTURE} MATCHES "linuxia64gcc" )
329 set(ALIMDCARCHDIR ia64)
330 elseif(NOT DEFINED ${ARCHITECTURE})
331 message("alimdc-rpm: Unknown architecture" )
332 else( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
333 message("alimdc-rpm: Unknown architecture" )
334 endif( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
337 add_custom_target( alimdc-rpm
338 DEPENDS alimdc-static alimdc-specfile
344 COMMAND rm -rf ${ALICE_ROOT}/alimdc-root
345 COMMAND mkdir -p ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
346 COMMAND mkdir -p ${ALICE_ROOT}/alimdc-root/opt/alimdc/include
347 COMMAND cp ${ALICE_ROOT}/RAW/mdc.h ${ALICE_ROOT}/alimdc-root/opt/alimdc/include
348 COMMAND cp ${LIBPATH}/libAliMDC.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
349 COMMAND cp ${ROOTALIBDIR}/libRoot.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
350 COMMAND cp ${ROOTALIBDIR}/liblzma.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
351 COMMAND cp ${ROOTALIBDIR}/libpcre.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
352 COMMAND cp ${ROOTALIBDIR}/libfreetype.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
353 COMMAND cp ${ROOTALIBDIR}/libpcre.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
354 COMMAND rm -rf ${ALICE_ROOT}/RPMS
355 COMMAND mkdir -p ${ALICE_ROOT}/RPMS/${ALIMDCARCHDIR}/
356 COMMAND rpmbuild --verbose --define "_topdir ${ALICE_ROOT}" --define "_tmppath ${ALICE_ROOT}" -bb ${ALIMDCSPECFILE}
357 COMMAND cp -p ${ALICE_ROOT}/RPMS/${ALIMDCARCHDIR}/alimdc-*.rpm .
358 COMMAND rm -rf ${ALICE_ROOT}/alimdc-root
359 COMMAND rm -rf ${ALICE_ROOT}/RPMS
360 COMMAND echo "***** alimdc RPM created and put in ${CMAKE_BINARY_DIR} folder *****"
365 COMMAND mkdir-p ${RAWDIRO}
369 add_custom_target( alimdc-specfile
374 TARGET alimdc-specfile
376 COMMAND rm -rf ${ALIMDCSPECFILE}
377 COMMAND @echo "***** Making alimdc RPM spec-file ${ALIMDCSPECFILE} *****"
378 COMMAND @echo '\# RPM specfile for alimdc static libs' >> ${ALIMDCSPECFILE}
379 COMMAND @echo '\# Package contains both ROOT and AliRoot' >> ${ALIMDCSPECFILE}
380 COMMAND @echo '\# static libs needed by mStreamRecorder' >> ${ALIMDCSPECFILE}
381 COMMAND @echo '\# in order to ROOT-ify the incoming raw' >> ${ALIMDCSPECFILE}
382 COMMAND @echo '\# data' >> ${ALIMDCSPECFILE}
383 COMMAND @echo '\# Example how-to build alimdc RPM:' >> ${ALIMDCSPECFILE}
384 COMMAND @echo '\# cd ${ALICE_ROOT}' >> ${ALIMDCSPECFILE}
385 COMMAND @echo '\# make alimdc-rpm' >> ${ALIMDCSPECFILE}
386 COMMAND @echo "" >> ${ALIMDCSPECFILE}
387 COMMAND @echo "Summary: AliMDC static libraries" >> ${ALIMDCSPECFILE}
388 COMMAND @echo "Name: alimdc" >> ${ALIMDCSPECFILE}
389 COMMAND @echo "Version: ${ALIROOT_BRANCH_SPEC}" >> ${ALIMDCSPECFILE}
390 COMMAND @echo "Release: ${ALIROOT_REVISION}" >> ${ALIMDCSPECFILE}
391 COMMAND @echo '\# Copyright: CERN Alice Off-line' >> ${ALIMDCSPECFILE}
392 COMMAND @echo "License: CERN Alice Off-line" >> ${ALIMDCSPECFILE}
393 COMMAND @echo "Vendor: ALICE Core Off-line Group" >> ${ALIMDCSPECFILE}
394 COMMAND @echo "URL: http://aliceinfo.cern.ch" >> ${ALIMDCSPECFILE}
395 COMMAND @echo "Group: Applications/Alice" >> ${ALIMDCSPECFILE}
396 COMMAND @echo "Prefix: /opt/%{name}" >> ${ALIMDCSPECFILE}
397 COMMAND @echo "BuildRoot: %{_tmppath}/%{name}-root" >> ${ALIMDCSPECFILE}
398 COMMAND @echo "" >> ${ALIMDCSPECFILE}
399 COMMAND @echo '\# automatic dependencies' >> ${ALIMDCSPECFILE}
400 COMMAND @echo "AutoReqProv: yes" >> ${ALIMDCSPECFILE}
401 COMMAND @echo "" >> ${ALIMDCSPECFILE}
402 COMMAND @echo '\# list here required RPM packages for runtime' >> ${ALIMDCSPECFILE}
403 COMMAND @echo "Requires: glibc" >> ${ALIMDCSPECFILE}
404 COMMAND @echo "" >> ${ALIMDCSPECFILE}
405 COMMAND @echo "Provides: alimdc" >> ${ALIMDCSPECFILE}
406 COMMAND @echo "" >> ${ALIMDCSPECFILE}
407 COMMAND @echo '\# description of the package' >> ${ALIMDCSPECFILE}
408 COMMAND @echo "%description" >> ${ALIMDCSPECFILE}
409 COMMAND @echo "Package contains both ROOT and AliRoot" >> ${ALIMDCSPECFILE}
410 COMMAND @echo "static libs needed by mStreamRecorder" >> ${ALIMDCSPECFILE}
411 COMMAND @echo "in order to ROOT-ify the incoming raw" >> ${ALIMDCSPECFILE}
412 COMMAND @echo "data. The package version correspond to" >> ${ALIMDCSPECFILE}
413 COMMAND @echo "the AliRoot one." >> ${ALIMDCSPECFILE}
414 COMMAND @echo "" >> ${ALIMDCSPECFILE}
415 COMMAND @echo '\# list of files to be installed' >> ${ALIMDCSPECFILE}
416 COMMAND @echo "%files" >> ${ALIMDCSPECFILE}
417 COMMAND @echo "%defattr (-,root,root)" >> ${ALIMDCSPECFILE}
418 COMMAND @echo "%{prefix}/lib/libAliMDC.a" >> ${ALIMDCSPECFILE}
419 COMMAND @echo "%{prefix}/lib/libRoot.a" >> ${ALIMDCSPECFILE}
420 COMMAND @echo "%{prefix}/lib/libpcre.a" >> ${ALIMDCSPECFILE}
421 COMMAND @echo "%{prefix}/lib/liblzma.a" >> ${ALIMDCSPECFILE}
422 COMMAND @echo "%{prefix}/lib/libfreetype.a" >> ${ALIMDCSPECFILE}
423 COMMAND @echo "%{prefix}/include/mdc.h" >> ${ALIMDCSPECFILE}
427 add_custom_target( alimdc-static
428 DEPENDS ${LIBPATH} ${BINPATH} RAW-all-static STEER-all-static )
433 COMMAND ar r ${LIBPATH}/alimdccxxo.a ${CMAKE_BINARY_DIR}/RAW/CMakeFiles/alimdc.dir/alimdc_main.cxx.o
434 COMMAND rm -rf ${LIBPATH}/libAliMDC.a
435 COMMAND ar x ${RAWDatabaseALIB}
436 COMMAND ar x ${MDCALIB}
437 COMMAND ar x ${ESDALIB}
438 COMMAND ar x ${STEERBaseALIB}
439 COMMAND ar r ${LIBPATH}/libAliMDC.a *.o
440 COMMAND ar t ${RAWDatabaseALIB} | xargs rm
441 COMMAND ar t ${MDCALIB} | xargs rm
442 COMMAND ar t ${ESDALIB} | xargs rm
443 COMMAND ar t ${STEERBaseALIB} | xargs rm
444 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 -ldl -lz
445 COMMAND @echo "Target alimdc-static made"
450 COMMAND mkdir -p ${LIBPATH}
454 #include (MakefileDA)
455 include (InstallRequiredSystemLibraries)
459 # ------------------------------
460 install ( DIRECTORY data
462 install ( DIRECTORY OCDB
464 PATTERN ".svn" EXCLUDE)
465 install ( DIRECTORY QAref
467 PATTERN ".svn" EXCLUDE)
468 install ( DIRECTORY GRP
470 PATTERN ".svn" EXCLUDE)