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 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 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)
183 get_git_head_revision(GIT_REFSPEC GIT_SHA1)
184 message(STATUS "Aliroot Revision - ${GIT_SHA1} Branch - ${GIT_REFSPEC}")
186 STRING(REGEX REPLACE "^(.+/)(.+/)(.*)$" "\\3" SHORT_BRANCH "${GIT_REFSPEC}" )
188 set(ALIROOT_REVISION ${GIT_SHA1})
189 set(ALIROOT_BRANCH ${SHORT_BRANCH})
192 message("Git not installed. I can't tell you which revision you are using!")
195 message("AliRoot sources not downloaded from a Version Control System. I can't tell which revision you are using!")
196 endif(EXISTS ${PROJECT_SOURCE_DIR}/.git/)
198 configure_file(${PROJECT_SOURCE_DIR}/cmake/ARVersion.h.tmp ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h @ONLY)
200 string (REPLACE "-" "." ALIROOT_BRANCH_SPEC "${ALIROOT_BRANCH}")
202 #--------------------------------------------------------------------------------#
204 #--------------------------------------------------------------------------------#
207 # ------------------------------
214 # Top Level Build Targets
215 # ------------------------------
217 add_custom_target(alilibs-static)
218 add_custom_target(include-headers ALL)
219 add_custom_target(DA-all)
220 add_custom_target(check-all)
221 add_custom_target(check-hxml)
222 add_custom_target(smell-all)
223 add_custom_target(htmldoc)
224 add_custom_target(par-all)
225 add_custom_target(test-par-all)
227 #NY file(GLOB CFILES_LIST ${CMAKE_SOURCE_DIR}/macros/*.C)
229 add_custom_command(TARGET htmldoc
231 COMMAND mkdir -p html
232 COMMAND rm -rf html/roothtml
233 COMMAND rm -f html/picts
234 COMMAND cd html && aliroot -q -b mkhtml.C\\\(0,1\\\)
235 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
237 # Include Vc, which provides the static libVc and the relevant CMake macros
242 # ------------------------------
243 foreach(MODULE ${MODDIRS})
245 #RS configure_file(${PROJECT_SOURCE_DIR}/cmake/Module.tmp ${PROJECT_SOURCE_DIR}/${MODULE}/CMakeLists.txt @ONLY)
246 add_custom_target(${MODULE}-all ALL)
247 add_custom_target(${MODULE}-par-all)
248 add_custom_target(test-${MODULE}-par-all)
249 add_custom_target(${MODULE}-all-static)
250 add_dependencies(alilibs-static "${MODULE}-static")
251 add_subdirectory(${MODULE})
253 #NY set(dir "${CMAKE_SOURCE_DIR}/${MODULE}")
254 #NY if (EXISTS "${dir}")
255 #NY file(GLOB CFILES_MOD ${dir}/*.C)
256 #NY list(LENGTH CFILES_MOD len)
257 #NY if (${len} GREATER 0)
258 #NY list(APPEND CFILES_LIST "${CFILES_MOD}")
259 #NY endif (${len} GREATER 0)
260 #NY endif(EXISTS "${dir}")
263 #NY foreach(cfile ${CFILES_LIST})
264 #NY add_custom_command(TARGET htmldoc
266 #NY COMMAND cd html &&
267 #NY aliroot -b -q \"mkhtml.C(\"${cfile}\")\" > /dev/null
268 #NY WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
269 #NY endforeach(cfile)
275 if(RULECHECKER_FOUND)
276 add_custom_target(factfile DEPENDS ${FACTFILE})
277 add_custom_command( OUTPUT ${FACTFILE}
278 COMMAND ${CMAKE_COMMAND} -E echo "Re-generating factfile"
279 COMMAND ${JAVA_RUNTIME} -Xmx1024M -jar ${FACTEXTRACTOR_JAR} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}
280 DEPENDS check-hxml ${CMAKE_BINARY_DIR}/check-hxml-touchfile ${_factfile_deps}
281 WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
282 endif(RULECHECKER_FOUND)
284 #--------------------------------------------------------------------------------#
285 # Additional Targets #
286 #--------------------------------------------------------------------------------#
289 # ------------------------------
292 COMMAND root-config --libdir
293 OUTPUT_VARIABLE ROOTALIBDIR)
294 string(REPLACE "\n" "" ROOTALIBDIR ${ROOTALIBDIR})
297 COMMAND root-config --arch
298 OUTPUT_VARIABLE ARCHITECTURE)
302 set(LIBPATH ${CMAKE_BINARY_DIR}/lib/tgt_${ALICE_TARGET})
303 set(BINPATH ${CMAKE_BINARY_DIR}/bin/tgt_${ALICE_TARGET})
304 set(EXPORTDIR ${ALICE_ROOT}/include)
305 set(BINLIBDIRS -L${ALICE_ROOT}/${LIBPATH})
306 set(RAWDIRO ${CMAKE_BINARY_DIR}/RAW)
307 set(ALIMDCSPECFILE ${RAWDIRO}/alimdc.spec)
308 set(RAWDatabaseALIB ${LIBPATH}/libRAWDatabase.${AEXT})
309 set(ESDALIB ${LIBPATH}/libESD.${AEXT})
310 set(STEERBaseALIB ${LIBPATH}/libSTEERBase.${AEXT})
311 set(MDCALIB ${LIBPATH}/libMDC.${AEXT})
312 set(MODDIRO RAW/tgt_${ALICE_TARGET})
315 if( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
316 set(ALIMDCARCHDIR x86_64)
317 elseif( ${ARCHITECTURE} MATCHES "linux" )
318 set(ALIMDCARCHDIR i386)
319 elseif( ${ARCHITECTURE} MATCHES "linuxia64gcc" )
320 set(ALIMDCARCHDIR ia64)
321 elseif(NOT DEFINED ${ARCHITECTURE})
322 message("alimdc-rpm: Unknown architecture" )
323 else( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
324 message("alimdc-rpm: Unknown architecture" )
325 endif( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
328 add_custom_target( alimdc-rpm
329 DEPENDS alimdc-static alimdc-specfile
335 COMMAND rm -rf ${ALICE_ROOT}/alimdc-root
336 COMMAND mkdir -p ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
337 COMMAND mkdir -p ${ALICE_ROOT}/alimdc-root/opt/alimdc/include
338 COMMAND cp ${ALICE_ROOT}/RAW/mdc.h ${ALICE_ROOT}/alimdc-root/opt/alimdc/include
339 COMMAND cp ${LIBPATH}/libAliMDC.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
340 COMMAND cp ${ROOTALIBDIR}/libRoot.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
341 COMMAND cp ${ROOTALIBDIR}/liblzma.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
342 COMMAND cp ${ROOTALIBDIR}/libpcre.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
343 COMMAND cp ${ROOTALIBDIR}/libfreetype.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
344 COMMAND cp ${ROOTALIBDIR}/libpcre.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
345 COMMAND rm -rf ${ALICE_ROOT}/RPMS
346 COMMAND mkdir -p ${ALICE_ROOT}/RPMS/${ALIMDCARCHDIR}/
347 COMMAND rpmbuild --verbose --define "_topdir ${ALICE_ROOT}" --define "_tmppath ${ALICE_ROOT}" -bb ${ALIMDCSPECFILE}
348 COMMAND cp -p ${ALICE_ROOT}/RPMS/${ALIMDCARCHDIR}/alimdc-*.rpm .
349 COMMAND rm -rf ${ALICE_ROOT}/alimdc-root
350 COMMAND rm -rf ${ALICE_ROOT}/RPMS
351 COMMAND echo "***** alimdc RPM created and put in ${CMAKE_BINARY_DIR} folder *****"
356 COMMAND mkdir-p ${RAWDIRO}
360 add_custom_target( alimdc-specfile
365 TARGET alimdc-specfile
367 COMMAND rm -rf ${ALIMDCSPECFILE}
368 COMMAND @echo "***** Making alimdc RPM spec-file ${ALIMDCSPECFILE} *****"
369 COMMAND @echo '\# RPM specfile for alimdc static libs' >> ${ALIMDCSPECFILE}
370 COMMAND @echo '\# Package contains both ROOT and AliRoot' >> ${ALIMDCSPECFILE}
371 COMMAND @echo '\# static libs needed by mStreamRecorder' >> ${ALIMDCSPECFILE}
372 COMMAND @echo '\# in order to ROOT-ify the incoming raw' >> ${ALIMDCSPECFILE}
373 COMMAND @echo '\# data' >> ${ALIMDCSPECFILE}
374 COMMAND @echo '\# Example how-to build alimdc RPM:' >> ${ALIMDCSPECFILE}
375 COMMAND @echo '\# cd ${ALICE_ROOT}' >> ${ALIMDCSPECFILE}
376 COMMAND @echo '\# make alimdc-rpm' >> ${ALIMDCSPECFILE}
377 COMMAND @echo "" >> ${ALIMDCSPECFILE}
378 COMMAND @echo "Summary: AliMDC static libraries" >> ${ALIMDCSPECFILE}
379 COMMAND @echo "Name: alimdc" >> ${ALIMDCSPECFILE}
380 COMMAND @echo "Version: ${ALIROOT_BRANCH_SPEC}" >> ${ALIMDCSPECFILE}
381 COMMAND @echo "Release: ${ALIROOT_REVISION}" >> ${ALIMDCSPECFILE}
382 COMMAND @echo '\# Copyright: CERN Alice Off-line' >> ${ALIMDCSPECFILE}
383 COMMAND @echo "License: CERN Alice Off-line" >> ${ALIMDCSPECFILE}
384 COMMAND @echo "Vendor: ALICE Core Off-line Group" >> ${ALIMDCSPECFILE}
385 COMMAND @echo "URL: http://aliceinfo.cern.ch" >> ${ALIMDCSPECFILE}
386 COMMAND @echo "Group: Applications/Alice" >> ${ALIMDCSPECFILE}
387 COMMAND @echo "Prefix: /opt/%{name}" >> ${ALIMDCSPECFILE}
388 COMMAND @echo "BuildRoot: %{_tmppath}/%{name}-root" >> ${ALIMDCSPECFILE}
389 COMMAND @echo "" >> ${ALIMDCSPECFILE}
390 COMMAND @echo '\# automatic dependencies' >> ${ALIMDCSPECFILE}
391 COMMAND @echo "AutoReqProv: yes" >> ${ALIMDCSPECFILE}
392 COMMAND @echo "" >> ${ALIMDCSPECFILE}
393 COMMAND @echo '\# list here required RPM packages for runtime' >> ${ALIMDCSPECFILE}
394 COMMAND @echo "Requires: glibc" >> ${ALIMDCSPECFILE}
395 COMMAND @echo "" >> ${ALIMDCSPECFILE}
396 COMMAND @echo "Provides: alimdc" >> ${ALIMDCSPECFILE}
397 COMMAND @echo "" >> ${ALIMDCSPECFILE}
398 COMMAND @echo '\# description of the package' >> ${ALIMDCSPECFILE}
399 COMMAND @echo "%description" >> ${ALIMDCSPECFILE}
400 COMMAND @echo "Package contains both ROOT and AliRoot" >> ${ALIMDCSPECFILE}
401 COMMAND @echo "static libs needed by mStreamRecorder" >> ${ALIMDCSPECFILE}
402 COMMAND @echo "in order to ROOT-ify the incoming raw" >> ${ALIMDCSPECFILE}
403 COMMAND @echo "data. The package version correspond to" >> ${ALIMDCSPECFILE}
404 COMMAND @echo "the AliRoot one." >> ${ALIMDCSPECFILE}
405 COMMAND @echo "" >> ${ALIMDCSPECFILE}
406 COMMAND @echo '\# list of files to be installed' >> ${ALIMDCSPECFILE}
407 COMMAND @echo "%files" >> ${ALIMDCSPECFILE}
408 COMMAND @echo "%defattr (-,root,root)" >> ${ALIMDCSPECFILE}
409 COMMAND @echo "%{prefix}/lib/libAliMDC.a" >> ${ALIMDCSPECFILE}
410 COMMAND @echo "%{prefix}/lib/libRoot.a" >> ${ALIMDCSPECFILE}
411 COMMAND @echo "%{prefix}/lib/libpcre.a" >> ${ALIMDCSPECFILE}
412 COMMAND @echo "%{prefix}/lib/liblzma.a" >> ${ALIMDCSPECFILE}
413 COMMAND @echo "%{prefix}/lib/libfreetype.a" >> ${ALIMDCSPECFILE}
414 COMMAND @echo "%{prefix}/include/mdc.h" >> ${ALIMDCSPECFILE}
418 add_custom_target( alimdc-static
419 DEPENDS ${LIBPATH} ${BINPATH} RAW-all-static STEER-all-static )
424 COMMAND ar r ${LIBPATH}/alimdccxxo.a ${CMAKE_BINARY_DIR}/RAW/CMakeFiles/alimdc.dir/alimdc_main.cxx.o
425 COMMAND rm -rf ${LIBPATH}/libAliMDC.a
426 COMMAND ar x ${RAWDatabaseALIB}
427 COMMAND ar x ${MDCALIB}
428 COMMAND ar x ${ESDALIB}
429 COMMAND ar x ${STEERBaseALIB}
430 COMMAND ar r ${LIBPATH}/libAliMDC.a *.o
431 COMMAND ar t ${RAWDatabaseALIB} | xargs rm
432 COMMAND ar t ${MDCALIB} | xargs rm
433 COMMAND ar t ${ESDALIB} | xargs rm
434 COMMAND ar t ${STEERBaseALIB} | xargs rm
435 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
436 COMMAND @echo "Target alimdc-static made"
441 COMMAND mkdir -p ${LIBPATH}
445 #include (MakefileDA)
446 include (InstallRequiredSystemLibraries)
450 # ------------------------------
451 install ( DIRECTORY data
453 install ( DIRECTORY OCDB
455 PATTERN ".svn" EXCLUDE)
456 install ( DIRECTORY QAref
458 PATTERN ".svn" EXCLUDE)
459 install ( DIRECTORY GRP
461 PATTERN ".svn" EXCLUDE)