avoid creation and keeping of MC histograms when MC option is off
[u/mrichter/AliRoot.git] / CMakeLists.txt
CommitLineData
62e74968 1# -*- mode: cmake -*-
2
6db31708 3# Top level CMakeList.txt file for the AliRoot Build System
4#
5# Author: Johny Jose (johny.jose@cern.ch)
6# Port of previous Makefile build to cmake
e969a926 7
e969a926 8
6b06712c 9cmake_minimum_required(VERSION 2.8.4 FATAL_ERROR)
e969a926 10
6db31708 11#--------------------------------------------------------------------------------#
12# Set Basic CMake Configuration #
13#--------------------------------------------------------------------------------#
b07a2059 14
6db31708 15project(AliRoot CXX C Fortran)
bf4c2121 16
17# Environment variables
64cf46ff 18set(ALICE $ENV{ALICE})
6db31708 19if(NOT ALICE)
20 message(WARNING "Environment variable ALICE is not set")
21endif(NOT ALICE)
3ea0d710 22
64cf46ff 23set(ALICE_ROOT $ENV{ALICE_ROOT})
3ea0d710 24if(NOT ALICE_ROOT)
6db31708 25 message(FATAL_ERROR "Please set ALICE_ROOT to the AliRoot source directory")
3ea0d710 26endif(NOT ALICE_ROOT)
27
07044cfb 28set(ALICE_INSTALL $ENV{ALICE_INSTALL})
6db31708 29# Set AliRoot Installation directory
30if(NOT ALICE_INSTALL)
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})
33else()
34 message(STATUS "AliRoot files will be installed in ${ALICE_INSTALL}")
35endif(NOT ALICE_INSTALL)
07044cfb 36if(${ALICE_INSTALL} STREQUAL ${CMAKE_BINARY_DIR})
37 message(FATAL_ERROR "Install dir should be different from build dir")
38endif()
24b052aa 39set(CMAKE_INSTALL_PREFIX ${ALICE_INSTALL})
6db31708 40
07044cfb 41# Environment for SHUTTLE
42set(DIMDIR $ENV{DIMDIR})
43set(ODIR $ENV{ODIR})
44
dad683d0 45get_filename_component(PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}" REALPATH)
f72dcc4f 46set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
0742852a 47set(CPACK_COMPONENTS_ALL MDC)
e969a926 48
6db31708 49include(ALICE_CMake)
f2cec6fb 50
6db31708 51#--------------------------------------------------------------------------------#
52# Find Packages #
53#--------------------------------------------------------------------------------#
e969a926 54
6db31708 55# Subversion
56# ------------------------------
e969a926 57
6db31708 58find_package(Subversion REQUIRED)
f7d3fd75 59
6db31708 60# ROOT
61# ------------------------------
f7d3fd75 62
6db31708 63find_package(ROOT REQUIRED)
3ea0d710 64
6db31708 65# IRST Rule Checker
66# ------------------------------
e969a926 67
6db31708 68find_package(RuleChecker)
e969a926 69
6db31708 70# DATE
71# ------------------------------
e969a926 72
6db31708 73find_package(DATE)
e969a926 74
6db31708 75# GEANT3
76# ------------------------------
e969a926 77
6db31708 78find_package(GEANT3)
e969a926 79
6db31708 80# AMORE
81# ------------------------------
82
83find_package(AMORE)
84
0742852a 85# AliRoot CPack configuration
86#-------------------------------
87
88find_package(CPack)
89
7e0cf530 90# ZeroMQ
91# ------------------------------
92find_package(ZeroMQ)
0742852a 93
6db31708 94#--------------------------------------------------------------------------------#
95# Environment/Compiler Configuration #
96#--------------------------------------------------------------------------------#
97
98ALICE_CheckOutOfSourceBuild()
99ALICE_RootConfig(CMAKE_CXX_COMPILER --cxx)
100ALICE_RootConfig(CMAKE_C_COMPILER --cc)
101ALICE_RootConfig(CMAKE_Fortran_COMPILER --f77)
102ALICE_ConfigurePlatform()
103ALICE_ConfigureCompiler()
104
105
106#--------------------------------------------------------------------------------#
107# AliRoot Path Settings #
108#--------------------------------------------------------------------------------#
109
110ALICE_DevFlagsOutput()
111set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin/tgt_${ALICE_TARGET}")
112set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib/tgt_${ALICE_TARGET}")
113set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib/tgt_${ALICE_TARGET}")
114set(CMAKE_INCLUDE_EXPORT_DIRECTORY "${PROJECT_BINARY_DIR}/include")
115file(MAKE_DIRECTORY ${CMAKE_INCLUDE_EXPORT_DIRECTORY})
116set(EXPORTDIRS "${ALICE_INSTALL}/include")
117set(BINLIBDIRS "-L${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
118
0742852a 119
6db31708 120#--------------------------------------------------------------------------------#
121# AliRoot Modules #
122#--------------------------------------------------------------------------------#
123
124# Exclude Module from all target
125# ------------------------------
126
45526b5e 127#set(EXCLUDEMODULES THydjet SHUTTLE)
6db31708 128
0742852a 129
6db31708 130# Standard Modules
131# ------------------------------
c1c44db3 132set(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)
45526b5e 133
134if(THydjet)
135 list(APPEND ALIROOTMODULES THydjet)
136endif(THydjet)
137
138if(SHUTTLE)
139 list(APPEND ALIROOTMODULES SHUTTLE)
140endif(SHUTTLE)
6db31708 141
142# Additional Modules
143# ------------------------------
144list(APPEND ALIROOTMODULES TUHKMgen EPOS)
145
146# EVE
147# ------------------------------
148ALICE_RootConfig(EVE --has-opengl)
149if(NOT EVE STREQUAL "no")
150 list(APPEND ALIROOTMODULES EVE)
151endif(NOT EVE STREQUAL "no")
152
153# CERN Modules
154# ------------------------------
155set(CERNMODULES LHAPDF HIJING MICROCERN HERWIG)
156
157# Check for Pythia 6
158if(EXISTS ${ROOTINCDIR}/TPythia6.h)
159 set(PYTHIA6 TRUE)
872bf9ef 160 list(APPEND CERNMODULES PYTHIA6 EVGEN)
811ffdcc 161elseif(NOT NOPYTHIA)
45526b5e 162 message(FATAL_ERROR "ROOT must have Pythia6 enabled !")
6db31708 163endif(EXISTS ${ROOTINCDIR}/TPythia6.h)
164
165# Set Final list of modules
166set(MODULES ${ALIROOTMODULES} ${CERNMODULES} ALIROOT)
167
168# Set Module directories
169set(MODDIRS ${MODULES})
170
171# Libraries for Linking
172# ------------------------------
5e319bd5 173set(ALILIBS MUON TPC PMD TRD FMD TOF ITS PHOS AD ACORDE HMPID VZERO ZDC STRUCT T0 EVGEN STEER TRIGGER MFT)
6db31708 174set(LIBS ${ROOTCLIBS} ${ROOTPLIBS} ${SYSLIBS})
175
176# Configure ARVerion.h
177# ------------------------------
0492edf5
A
178#If the sources were taken from Git
179if(EXISTS ${PROJECT_SOURCE_DIR}/.git/)
180 include(GetGitRevisionDescription)
aca5075b 181
0492edf5 182 find_package(Git)
aca5075b 183
0492edf5
A
184 if(GIT_FOUND)
185 get_git_head_revision(GIT_REFSPEC GIT_SHA1)
aca5075b 186 message(STATUS "Aliroot branch - ${GIT_REFSPEC} Revision - ${GIT_SHA1} ")
187
188 STRING(REGEX REPLACE "^(.+/)(.+)/(.*)$" "\\2" BRANCH_TYPE "${GIT_REFSPEC}" )
189
190 if(BRANCH_TYPE STREQUAL "heads")
191 set(ALIROOT_REVISION "ThisIsaBranchNoRevisionProvided")
192 else()
193 set(ALIROOT_REVISION ${GIT_SHA1})
194 endif()
0492edf5
A
195
196 STRING(REGEX REPLACE "^(.+/)(.+/)(.*)$" "\\3" SHORT_BRANCH "${GIT_REFSPEC}" )
197
0492edf5
A
198 set(ALIROOT_BRANCH ${SHORT_BRANCH})
199
200 else()
201 message("Git not installed. I can't tell you which revision you are using!")
202 endif(GIT_FOUND)
203else()
204 message("AliRoot sources not downloaded from a Version Control System. I can't tell which revision you are using!")
205endif(EXISTS ${PROJECT_SOURCE_DIR}/.git/)
206
207configure_file(${PROJECT_SOURCE_DIR}/cmake/ARVersion.h.tmp ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h @ONLY)
208
209string (REPLACE "-" "." ALIROOT_BRANCH_SPEC "${ALIROOT_BRANCH}")
6db31708 210
211#--------------------------------------------------------------------------------#
212# Build Modules #
213#--------------------------------------------------------------------------------#
214
215# Module Variables
216# ------------------------------
217set(ALLLIBS)
218set(ALLEXECS)
219set(INCLUDEFILES)
220set(BINLIBS)
221set(EXPORTFILES)
222
223# Top Level Build Targets
224# ------------------------------
225
226add_custom_target(alilibs-static)
e93f6949 227add_custom_target(include-headers ALL)
45526b5e 228add_custom_target(DA-all)
e93f6949 229add_custom_target(check-all)
230add_custom_target(check-hxml)
ae388d3b 231add_custom_target(smell-all)
6a1caa6b 232add_custom_target(htmldoc)
6a9e2760 233add_custom_target(par-all)
3a8dbb31 234add_custom_target(test-par-all)
7531a2ac 235
6a1caa6b 236#NY file(GLOB CFILES_LIST ${CMAKE_SOURCE_DIR}/macros/*.C)
237
238add_custom_command(TARGET htmldoc
239 PRE_BUILD
240 COMMAND mkdir -p html
241 COMMAND rm -rf html/roothtml
242 COMMAND rm -f html/picts
5a46c82e 243 COMMAND cd html && aliroot -q -b mkhtml.C\\\(0,1\\\)
6a1caa6b 244 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
245
144f39dd 246# Include Vc, which provides the static libVc and the relevant CMake macros
247include(Vc/Vc.cmake)
248add_subdirectory(Vc)
6a1caa6b 249
250# Add Modules
6db31708 251# ------------------------------
252foreach(MODULE ${MODDIRS})
45526b5e 253 set(${MODULE}ALIBS)
e017f840 254#RS configure_file(${PROJECT_SOURCE_DIR}/cmake/Module.tmp ${PROJECT_SOURCE_DIR}/${MODULE}/CMakeLists.txt @ONLY)
6db31708 255 add_custom_target(${MODULE}-all ALL)
3a8dbb31 256 add_custom_target(${MODULE}-par-all)
257 add_custom_target(test-${MODULE}-par-all)
529f129e 258 add_custom_target(${MODULE}-all-static)
6db31708 259 add_dependencies(alilibs-static "${MODULE}-static")
260 add_subdirectory(${MODULE})
6a1caa6b 261
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}")
6db31708 270endforeach(MODULE)
271
6a1caa6b 272#NY foreach(cfile ${CFILES_LIST})
273#NY add_custom_command(TARGET htmldoc
274#NY PRE_BUILD
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)
279
5713c03f 280if(DATE_FOUND)
c3b22277 281 include (CMakeDA)
5713c03f 282endif(DATE_FOUND)
c3b22277 283
f09b91ba 284if(RULECHECKER_FOUND)
e93f6949 285 add_custom_target(factfile DEPENDS ${FACTFILE})
62e74968 286 add_custom_command( OUTPUT ${FACTFILE}
e93f6949 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}
62e74968 290 WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
f09b91ba 291endif(RULECHECKER_FOUND)
62e74968 292
6db31708 293#--------------------------------------------------------------------------------#
294# Additional Targets #
295#--------------------------------------------------------------------------------#
296
7531a2ac 297# AliMdc RPM
298# ------------------------------
299
f17f29d0 300execute_process(
301COMMAND root-config --libdir
302OUTPUT_VARIABLE ROOTALIBDIR)
303string(REPLACE "\n" "" ROOTALIBDIR ${ROOTALIBDIR})
304
305execute_process(
306COMMAND root-config --arch
307OUTPUT_VARIABLE ARCHITECTURE)
308
309
310set(AEXT a)
311set(LIBPATH ${CMAKE_BINARY_DIR}/lib/tgt_${ALICE_TARGET})
312set(BINPATH ${CMAKE_BINARY_DIR}/bin/tgt_${ALICE_TARGET})
313set(EXPORTDIR ${ALICE_ROOT}/include)
314set(BINLIBDIRS -L${ALICE_ROOT}/${LIBPATH})
315set(RAWDIRO ${CMAKE_BINARY_DIR}/RAW)
316set(ALIMDCSPECFILE ${RAWDIRO}/alimdc.spec)
317set(RAWDatabaseALIB ${LIBPATH}/libRAWDatabase.${AEXT})
318set(ESDALIB ${LIBPATH}/libESD.${AEXT})
319set(STEERBaseALIB ${LIBPATH}/libSTEERBase.${AEXT})
320set(MDCALIB ${LIBPATH}/libMDC.${AEXT})
321set(MODDIRO RAW/tgt_${ALICE_TARGET})
322
323
324if( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
325set(ALIMDCARCHDIR x86_64)
326elseif( ${ARCHITECTURE} MATCHES "linux" )
327set(ALIMDCARCHDIR i386)
328elseif( ${ARCHITECTURE} MATCHES "linuxia64gcc" )
329set(ALIMDCARCHDIR ia64)
330elseif(NOT DEFINED ${ARCHITECTURE})
d9fbc3ca 331message("alimdc-rpm: Unknown architecture" )
f17f29d0 332else( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
d9fbc3ca 333message("alimdc-rpm: Unknown architecture" )
f17f29d0 334endif( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
335
336
018253d2 337# Module version will be written in the generated header
338configure_file ("RAW/alimdc.spec.in" "${CMAKE_CURRENT_BINARY_DIR}/RAW/alimdc.spec" @ONLY)
339
f17f29d0 340add_custom_target( alimdc-rpm
018253d2 341DEPENDS alimdc-static
f17f29d0 342)
343
344add_custom_command(
345TARGET alimdc-rpm
346POST_BUILD
018253d2 347COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root
348COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
349COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/include
350COMMAND cp ${ALICE_ROOT}/RAW/mdc.h ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/include
351COMMAND cp ${LIBPATH}/libAliMDC.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
352COMMAND cp ${ROOTALIBDIR}/libRoot.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
353COMMAND cp ${ROOTALIBDIR}/liblzma.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
354COMMAND cp ${ROOTALIBDIR}/libpcre.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
355COMMAND cp ${ROOTALIBDIR}/libfreetype.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
356COMMAND cp ${ROOTALIBDIR}/libpcre.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
357COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/RPMS
358COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/RPMS/${ALIMDCARCHDIR}/
359COMMAND rpmbuild --verbose --define "_topdir ${CMAKE_CURRENT_BINARY_DIR}" --define "%buildroot ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root" -bb ${ALIMDCSPECFILE}
360COMMAND cp -p ${CMAKE_CURRENT_BINARY_DIR}/RPMS/${ALIMDCARCHDIR}/alimdc-*.rpm .
361COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root
362COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/RPMS
f17f29d0 363COMMAND echo "***** alimdc RPM created and put in ${CMAKE_BINARY_DIR} folder *****"
364)
365
366add_custom_command(
367TARGET ${RAWDIRO}
368COMMAND mkdir-p ${RAWDIRO}
369)
370
371
f17f29d0 372add_custom_target( alimdc-static
373DEPENDS ${LIBPATH} ${BINPATH} RAW-all-static STEER-all-static )
374
375add_custom_command(
376TARGET alimdc-static
377POST_BUILD
378COMMAND ar r ${LIBPATH}/alimdccxxo.a ${CMAKE_BINARY_DIR}/RAW/CMakeFiles/alimdc.dir/alimdc_main.cxx.o
379COMMAND rm -rf ${LIBPATH}/libAliMDC.a
380COMMAND ar x ${RAWDatabaseALIB}
381COMMAND ar x ${MDCALIB}
382COMMAND ar x ${ESDALIB}
383COMMAND ar x ${STEERBaseALIB}
384COMMAND ar r ${LIBPATH}/libAliMDC.a *.o
385COMMAND ar t ${RAWDatabaseALIB} | xargs rm
386COMMAND ar t ${MDCALIB} | xargs rm
387COMMAND ar t ${ESDALIB} | xargs rm
388COMMAND ar t ${STEERBaseALIB} | xargs rm
d06540f4 389COMMAND ${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
f17f29d0 390COMMAND @echo "Target alimdc-static made"
391)
392
393add_custom_command(
394TARGET ${LIBPATH}
395COMMAND mkdir -p ${LIBPATH}
396)
397
398
399#include (MakefileDA)
6db31708 400include (InstallRequiredSystemLibraries)
401include (CPack)
e969a926 402
d2884be9 403# Install data
404# ------------------------------
405install ( DIRECTORY data
406 DESTINATION . )
71d5ee50 407install ( DIRECTORY OCDB
408 DESTINATION .
409 PATTERN ".svn" EXCLUDE)
410install ( DIRECTORY QAref
411 DESTINATION .
412 PATTERN ".svn" EXCLUDE)
c2aad3ae 413install ( DIRECTORY GRP
414 DESTINATION .
415 PATTERN ".svn" EXCLUDE)
d2884be9 416
417#
418# EOF
419#
420