1 # -*- mode: cmake -*-/usr/share/applications/thunderbird.desktop
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 # Sets 3 git variables
192 # - GIT_REFSPEC - complete name of the current reference
193 # - ALIROOT_BRANCH - name of the branch or tag extracted from the current reference
194 # - GIT_SHA1 - current hash in the long format
195 # - GIT_SHORT_SHA1 - current hash in the short format
196 if(EXISTS ${PROJECT_SOURCE_DIR}/.git/)
197 include(GetGitRevisionDescription)
202 get_git_head_revision(GIT_REFSPEC GIT_SHA1)
204 # GIT_REFSPEC is empty for detached mode = tags in detached mode or checkout to specific hash
207 # returns the closest reference to the current hash
208 # name of the current tag or heads/branch in the case of branches
209 git_describe(ALIROOT_GIT_TAG "--all" "--abbrev=0")
211 STRING(REGEX REPLACE "^(.+/)(.+)/(.*)$" "\\2" BRANCH_TYPE "${GIT_REFSPEC}" )
213 # the revision is not set in the case of a branch, it means we are doing development
214 # and the revision will trigger a reconfiguration
215 if(BRANCH_TYPE STREQUAL "heads")
216 set(ALIROOT_REVISION "ThisIsaBranchNoRevisionProvided")
217 STRING(REGEX REPLACE "^(.+/)(.+/)(.*)$" "\\3" SHORT_BRANCH "${GIT_REFSPEC}" )
219 set(SHORT_BRANCH ${ALIROOT_GIT_TAG})
220 set(ALIROOT_REVISION ${GIT_SHA1})
223 set(ALIROOT_BRANCH ${SHORT_BRANCH})
225 # generate the short version of the revision hash
226 execute_process(COMMAND git rev-parse --short ${GIT_SHA1}
227 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
228 OUTPUT_STRIP_TRAILING_WHITESPACE
230 OUTPUT_VARIABLE GIT_SHORT_SHA1)
232 # if the rev-parse fails we set the short sha to the long initial one
234 set(GIT_SHORT_SHA1 ${GIT_SHA1})
237 message(STATUS "Aliroot branch/tag: \"${ALIROOT_BRANCH}\" - Revision: \"${GIT_SHORT_SHA1}\" ")
240 message("Git not installed. I can't tell you which revision you are using!")
243 message("AliRoot sources not downloaded from a Version Control System. I can't tell which revision you are using!")
244 endif(EXISTS ${PROJECT_SOURCE_DIR}/.git/)
246 configure_file(${PROJECT_SOURCE_DIR}/cmake/ARVersion.h.tmp ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/FromTemplate/ARVersion.h @ONLY)
248 string (REPLACE "-" "." ALIROOT_BRANCH_SPEC "${ALIROOT_BRANCH}")
250 #--------------------------------------------------------------------------------#
252 #--------------------------------------------------------------------------------#
255 # ------------------------------
262 # Top Level Build Targets
263 # ------------------------------
265 add_custom_target(alilibs-static)
266 add_custom_target(include-headers ALL)
267 add_custom_target(DA-all)
268 add_custom_target(check-all)
269 add_custom_target(check-hxml)
270 add_custom_target(smell-all)
271 add_custom_target(htmldoc)
272 add_custom_target(par-all)
273 add_custom_target(test-par-all)
275 #NY file(GLOB CFILES_LIST ${CMAKE_SOURCE_DIR}/macros/*.C)
277 add_custom_command(TARGET htmldoc
279 COMMAND mkdir -p html
280 COMMAND rm -rf html/roothtml
281 COMMAND rm -f html/picts
282 COMMAND cd html && aliroot -q -b mkhtml.C\\\(0,1\\\)
283 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
285 # Include Vc, which provides the static libVc and the relevant CMake macros
290 # ------------------------------
291 foreach(MODULE ${MODDIRS})
293 #RS configure_file(${PROJECT_SOURCE_DIR}/cmake/Module.tmp ${PROJECT_SOURCE_DIR}/${MODULE}/CMakeLists.txt @ONLY)
294 add_custom_target(${MODULE}-all ALL)
295 add_custom_target(${MODULE}-par-all)
296 add_custom_target(test-${MODULE}-par-all)
297 add_custom_target(${MODULE}-all-static)
298 add_dependencies(alilibs-static "${MODULE}-static")
299 add_subdirectory(${MODULE})
301 #NY set(dir "${CMAKE_SOURCE_DIR}/${MODULE}")
302 #NY if (EXISTS "${dir}")
303 #NY file(GLOB CFILES_MOD ${dir}/*.C)
304 #NY list(LENGTH CFILES_MOD len)
305 #NY if (${len} GREATER 0)
306 #NY list(APPEND CFILES_LIST "${CFILES_MOD}")
307 #NY endif (${len} GREATER 0)
308 #NY endif(EXISTS "${dir}")
311 #NY foreach(cfile ${CFILES_LIST})
312 #NY add_custom_command(TARGET htmldoc
314 #NY COMMAND cd html &&
315 #NY aliroot -b -q \"mkhtml.C(\"${cfile}\")\" > /dev/null
316 #NY WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
317 #NY endforeach(cfile)
323 if(RULECHECKER_FOUND)
324 add_custom_target(factfile DEPENDS ${FACTFILE})
325 add_custom_command( OUTPUT ${FACTFILE}
326 COMMAND ${CMAKE_COMMAND} -E echo "Re-generating factfile"
327 COMMAND ${JAVA_RUNTIME} -Xmx1024M -jar ${FACTEXTRACTOR_JAR} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}
328 DEPENDS check-hxml ${CMAKE_BINARY_DIR}/check-hxml-touchfile ${_factfile_deps}
329 WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
330 endif(RULECHECKER_FOUND)
332 #--------------------------------------------------------------------------------#
333 # Additional Targets #
334 #--------------------------------------------------------------------------------#
337 # ------------------------------
340 COMMAND root-config --libdir
341 OUTPUT_VARIABLE ROOTALIBDIR)
342 string(REPLACE "\n" "" ROOTALIBDIR ${ROOTALIBDIR})
345 COMMAND root-config --arch
346 OUTPUT_VARIABLE ARCHITECTURE)
350 set(LIBPATH ${CMAKE_BINARY_DIR}/lib/tgt_${ALICE_TARGET})
351 set(BINPATH ${CMAKE_BINARY_DIR}/bin/tgt_${ALICE_TARGET})
352 set(EXPORTDIR ${ALICE_ROOT}/include)
353 set(BINLIBDIRS -L${ALICE_ROOT}/${LIBPATH})
354 set(RAWDIRO ${CMAKE_BINARY_DIR}/RAW)
355 set(ALIMDCSPECFILE ${RAWDIRO}/alimdc.spec)
356 set(RAWDatabaseALIB ${LIBPATH}/libRAWDatabase.${AEXT})
357 set(ESDALIB ${LIBPATH}/libESD.${AEXT})
358 set(STEERBaseALIB ${LIBPATH}/libSTEERBase.${AEXT})
359 set(MDCALIB ${LIBPATH}/libMDC.${AEXT})
360 set(MODDIRO RAW/tgt_${ALICE_TARGET})
363 if( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
364 set(ALIMDCARCHDIR x86_64)
365 elseif( ${ARCHITECTURE} MATCHES "linux" )
366 set(ALIMDCARCHDIR i386)
367 elseif( ${ARCHITECTURE} MATCHES "linuxia64gcc" )
368 set(ALIMDCARCHDIR ia64)
369 elseif(NOT DEFINED ${ARCHITECTURE})
370 message("alimdc-rpm: Unknown architecture" )
371 else( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
372 message("alimdc-rpm: Unknown architecture" )
373 endif( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
376 # Module version will be written in the generated header
377 configure_file ("RAW/alimdc.spec.in" "${CMAKE_CURRENT_BINARY_DIR}/RAW/alimdc.spec" @ONLY)
379 add_custom_target( alimdc-rpm
380 DEPENDS alimdc-static
386 COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root
387 COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
388 COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/include
389 COMMAND cp ${ALICE_ROOT}/RAW/mdc.h ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/include
390 COMMAND cp ${LIBPATH}/libAliMDC.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
391 COMMAND cp ${ROOTALIBDIR}/libRoot.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
392 COMMAND cp ${ROOTALIBDIR}/liblzma.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
393 COMMAND cp ${ROOTALIBDIR}/libpcre.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
394 COMMAND cp ${ROOTALIBDIR}/libfreetype.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
395 COMMAND cp ${ROOTALIBDIR}/libpcre.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
396 COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/RPMS
397 COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/RPMS/${ALIMDCARCHDIR}/
398 COMMAND rpmbuild --verbose --define "_topdir ${CMAKE_CURRENT_BINARY_DIR}" --define "%buildroot ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root" -bb ${ALIMDCSPECFILE}
399 COMMAND cp -p ${CMAKE_CURRENT_BINARY_DIR}/RPMS/${ALIMDCARCHDIR}/alimdc-*.rpm .
400 COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root
401 COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/RPMS
402 COMMAND echo "***** alimdc RPM created and put in ${CMAKE_BINARY_DIR} folder *****"
407 COMMAND mkdir-p ${RAWDIRO}
411 add_custom_target( alimdc-static
412 DEPENDS ${LIBPATH} ${BINPATH} RAW-all-static STEER-all-static )
417 COMMAND ar r ${LIBPATH}/alimdccxxo.a ${CMAKE_BINARY_DIR}/RAW/CMakeFiles/alimdc.dir/alimdc_main.cxx.o
418 COMMAND rm -rf ${LIBPATH}/libAliMDC.a
419 COMMAND ar x ${RAWDatabaseALIB}
420 COMMAND ar x ${MDCALIB}
421 COMMAND ar x ${ESDALIB}
422 COMMAND ar x ${STEERBaseALIB}
423 COMMAND ar r ${LIBPATH}/libAliMDC.a *.o
424 COMMAND ar t ${RAWDatabaseALIB} | xargs rm
425 COMMAND ar t ${MDCALIB} | xargs rm
426 COMMAND ar t ${ESDALIB} | xargs rm
427 COMMAND ar t ${STEERBaseALIB} | xargs rm
428 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
429 COMMAND @echo "Target alimdc-static made"
434 COMMAND mkdir -p ${LIBPATH}
438 #include (MakefileDA)
439 include (InstallRequiredSystemLibraries)
443 # ------------------------------
444 install ( DIRECTORY data
446 install ( DIRECTORY OCDB
448 PATTERN ".svn" EXCLUDE)
449 install ( DIRECTORY QAref
451 PATTERN ".svn" EXCLUDE)
452 install ( DIRECTORY GRP
454 PATTERN ".svn" EXCLUDE)