]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - CMakeLists.txt
change in AddTaskBalancePsi for running in analysis train
[u/mrichter/AliRoot.git] / CMakeLists.txt
... / ...
CommitLineData
1# -*- mode: cmake -*-
2
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
7
8
9cmake_minimum_required(VERSION 2.8.4 FATAL_ERROR)
10
11#--------------------------------------------------------------------------------#
12# Set Basic CMake Configuration #
13#--------------------------------------------------------------------------------#
14
15project(AliRoot CXX C Fortran)
16
17# Environment variables
18set(ALICE_ROOT $ENV{ALICE_ROOT})
19set(ALICE $ENV{ALICE})
20set(ALICE_INSTALL $ENV{ALICE_INSTALL})
21if(${ALICE_INSTALL} MATCHES ${CMAKE_BINARY_DIR})
22 message(FATAL_ERROR "Install dir should be different from build dir")
23endif(${ALICE_INSTALL} MATCHES ${CMAKE_BINARY_DIR})
24# Environment for SHUTTLE
25set(DIMDIR $ENV{DIMDIR})
26set(ODIR $ENV{ODIR})
27
28if(NOT ALICE)
29 message(WARNING "Environment variable ALICE is not set")
30endif(NOT ALICE)
31
32if(NOT ALICE_ROOT)
33 message(FATAL_ERROR "Please set ALICE_ROOT to the AliRoot source directory")
34endif(NOT ALICE_ROOT)
35
36# Set AliRoot Installation directory
37if(NOT ALICE_INSTALL)
38 message(STATUS "AliRoot files will be installed in ${ALICE_ROOT}. You can specify a different location by setting ALICE_INSTALL environment variable")
39 set(ALICE_INSTALL ${ALICE_ROOT})
40else()
41 message(STATUS "AliRoot files will be installed in ${ALICE_INSTALL}")
42endif(NOT ALICE_INSTALL)
43set(CMAKE_INSTALL_PREFIX ${ALICE_INSTALL})
44
45get_filename_component(PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}" REALPATH)
46set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
47set(CPACK_COMPONENTS_ALL MDC)
48
49include(ALICE_CMake)
50
51#--------------------------------------------------------------------------------#
52# Find Packages #
53#--------------------------------------------------------------------------------#
54
55# Subversion
56# ------------------------------
57
58find_package(Subversion REQUIRED)
59
60# ROOT
61# ------------------------------
62
63find_package(ROOT REQUIRED)
64
65# IRST Rule Checker
66# ------------------------------
67
68find_package(RuleChecker)
69
70# DATE
71# ------------------------------
72
73find_package(DATE)
74
75# GEANT3
76# ------------------------------
77
78find_package(GEANT3)
79
80# AMORE
81# ------------------------------
82
83find_package(AMORE)
84
85# AliRoot CPack configuration
86#-------------------------------
87
88find_package(CPack)
89
90
91#--------------------------------------------------------------------------------#
92# Environment/Compiler Configuration #
93#--------------------------------------------------------------------------------#
94
95ALICE_CheckOutOfSourceBuild()
96ALICE_RootConfig(CMAKE_CXX_COMPILER --cxx)
97ALICE_RootConfig(CMAKE_C_COMPILER --cc)
98ALICE_RootConfig(CMAKE_Fortran_COMPILER --f77)
99ALICE_ConfigurePlatform()
100ALICE_ConfigureCompiler()
101
102
103#--------------------------------------------------------------------------------#
104# AliRoot Path Settings #
105#--------------------------------------------------------------------------------#
106
107ALICE_DevFlagsOutput()
108set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin/tgt_${ALICE_TARGET}")
109set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib/tgt_${ALICE_TARGET}")
110set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib/tgt_${ALICE_TARGET}")
111set(CMAKE_INCLUDE_EXPORT_DIRECTORY "${PROJECT_BINARY_DIR}/include")
112file(MAKE_DIRECTORY ${CMAKE_INCLUDE_EXPORT_DIRECTORY})
113set(EXPORTDIRS "${ALICE_INSTALL}/include")
114set(BINLIBDIRS "-L${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
115
116
117#--------------------------------------------------------------------------------#
118# AliRoot Modules #
119#--------------------------------------------------------------------------------#
120
121# Exclude Module from all target
122# ------------------------------
123
124#set(EXCLUDEMODULES THydjet SHUTTLE)
125
126
127# Standard Modules
128# ------------------------------
129set(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 PWGPP PWG PWGCF PWGGA PWGHF PWGDQ PWGJE PWGLF PWGUD TRIGGER PYTHIA8 TAmpt OADB MFT)
130
131if(THydjet)
132 list(APPEND ALIROOTMODULES THydjet)
133endif(THydjet)
134
135if(SHUTTLE)
136 list(APPEND ALIROOTMODULES SHUTTLE)
137endif(SHUTTLE)
138
139# Additional Modules
140# ------------------------------
141list(APPEND ALIROOTMODULES TUHKMgen EPOS)
142
143# EVE
144# ------------------------------
145ALICE_RootConfig(EVE --has-opengl)
146if(NOT EVE STREQUAL "no")
147 list(APPEND ALIROOTMODULES EVE)
148endif(NOT EVE STREQUAL "no")
149
150# CERN Modules
151# ------------------------------
152set(CERNMODULES LHAPDF HIJING MICROCERN HERWIG)
153
154# Check for Pythia 6
155if(EXISTS ${ROOTINCDIR}/TPythia6.h)
156 set(PYTHIA6 TRUE)
157 list(APPEND CERNMODULES PYTHIA6 EVGEN)
158elseif(NOT NOPYTHIA)
159 message(FATAL_ERROR "ROOT must have Pythia6 enabled !")
160endif(EXISTS ${ROOTINCDIR}/TPythia6.h)
161
162# Set Final list of modules
163set(MODULES ${ALIROOTMODULES} ${CERNMODULES} ALIROOT)
164
165# Set Module directories
166set(MODDIRS ${MODULES})
167
168# Libraries for Linking
169# ------------------------------
170set(ALILIBS MUON TPC PMD TRD FMD TOF ITS PHOS ACORDE HMPID VZERO ZDC STRUCT T0 EVGEN STEER TRIGGER MFT)
171set(LIBS ${ROOTCLIBS} ${ROOTPLIBS} ${SYSLIBS})
172
173# Configure ARVerion.h
174# ------------------------------
175if(Subversion_FOUND)
176 if(EXISTS ${PROJECT_SOURCE_DIR}/.svn/ )
177 Subversion_WC_INFO(${PROJECT_SOURCE_DIR} PROJECT)
178 set(ALIROOT_SVN_REVISION ${PROJECT_WC_REVISION})
179 set(ALIROOT_SVN_BRANCH ${PROJECT_WC_URL})
180 string(REGEX MATCH "[^/]+$" ALIROOT_SVN_BRANCH ${ALIROOT_SVN_BRANCH})
181
182 elseif(EXISTS ${PROJECT_SOURCE_DIR}/.git/ )
183 execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND git svn info OUTPUT_VARIABLE OUTPUTVAR)
184 string(REPLACE "\n" ";" OUTPUTVAR ${OUTPUTVAR})
185 foreach(f ${OUTPUTVAR})
186 if(${f} MATCHES URL)
187 string(REGEX MATCH "[^/]+$" ALIROOT_SVN_BRANCH ${f})
188 elseif(${f} MATCHES Revision)
189 string(REGEX MATCH "[^: ]+$" ALIROOT_SVN_REVISION ${f})
190 endif(${f} MATCHES URL)
191 endforeach()
192 endif(EXISTS ${PROJECT_SOURCE_DIR}/.svn/ )
193
194 message(STATUS "Aliroot Revision - ${ALIROOT_SVN_REVISION} Branch - ${ALIROOT_SVN_BRANCH}")
195 if(EXISTS ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h)
196 file(REMOVE ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h)
197 endif(EXISTS ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h)
198 configure_file(${PROJECT_SOURCE_DIR}/cmake/ARVersion.h.tmp ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h @ONLY)
199endif(Subversion_FOUND)
200string (REPLACE "-" "." ALIROOT_SVN_BRANCH_SPEC "${ALIROOT_SVN_BRANCH}")
201
202#--------------------------------------------------------------------------------#
203# Build Modules #
204#--------------------------------------------------------------------------------#
205
206# Module Variables
207# ------------------------------
208set(ALLLIBS)
209set(ALLEXECS)
210set(INCLUDEFILES)
211set(BINLIBS)
212set(EXPORTFILES)
213
214# Top Level Build Targets
215# ------------------------------
216
217add_custom_target(alilibs-static)
218add_custom_target(include-headers ALL)
219add_custom_target(DA-all)
220add_custom_target(check-all)
221add_custom_target(check-hxml)
222add_custom_target(smell-all)
223add_custom_target(htmldoc)
224add_custom_target(par-all)
225add_custom_target(test-par-all)
226
227#NY file(GLOB CFILES_LIST ${CMAKE_SOURCE_DIR}/macros/*.C)
228
229add_custom_command(TARGET htmldoc
230 PRE_BUILD
231 COMMAND mkdir -p html
232 COMMAND rm -rf html/roothtml
233 COMMAND rm -f html/picts
234 COMMAND cd html &&
235 aliroot -q -b \"mkhtml.C(0,1)\"
236 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
237
238
239# Add Modules
240# ------------------------------
241foreach(MODULE ${MODDIRS})
242 set(${MODULE}ALIBS)
243 configure_file(${PROJECT_SOURCE_DIR}/cmake/Module.tmp ${PROJECT_SOURCE_DIR}/${MODULE}/CMakeLists.txt @ONLY)
244 add_custom_target(${MODULE}-all ALL)
245 add_custom_target(${MODULE}-par-all)
246 add_custom_target(test-${MODULE}-par-all)
247 add_custom_target(${MODULE}-all-static)
248 add_dependencies(alilibs-static "${MODULE}-static")
249 add_subdirectory(${MODULE})
250
251#NY set(dir "${CMAKE_SOURCE_DIR}/${MODULE}")
252#NY if (EXISTS "${dir}")
253#NY file(GLOB CFILES_MOD ${dir}/*.C)
254#NY list(LENGTH CFILES_MOD len)
255#NY if (${len} GREATER 0)
256#NY list(APPEND CFILES_LIST "${CFILES_MOD}")
257#NY endif (${len} GREATER 0)
258#NY endif(EXISTS "${dir}")
259endforeach(MODULE)
260
261#NY foreach(cfile ${CFILES_LIST})
262#NY add_custom_command(TARGET htmldoc
263#NY PRE_BUILD
264#NY COMMAND cd html &&
265#NY aliroot -b -q \"mkhtml.C(\"${cfile}\")\" > /dev/null
266#NY WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
267#NY endforeach(cfile)
268
269if(DATE_FOUND)
270 include (CMakeDA)
271endif(DATE_FOUND)
272
273if(RULECHECKER_FOUND)
274 add_custom_target(factfile DEPENDS ${FACTFILE})
275 add_custom_command( OUTPUT ${FACTFILE}
276 COMMAND ${CMAKE_COMMAND} -E echo "Re-generating factfile"
277 COMMAND ${JAVA_RUNTIME} -Xmx1024M -jar ${FACTEXTRACTOR_JAR} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}
278 DEPENDS check-hxml ${CMAKE_BINARY_DIR}/check-hxml-touchfile ${_factfile_deps}
279 WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
280endif(RULECHECKER_FOUND)
281
282#--------------------------------------------------------------------------------#
283# Additional Targets #
284#--------------------------------------------------------------------------------#
285
286# AliMdc RPM
287# ------------------------------
288
289execute_process(
290COMMAND root-config --libdir
291OUTPUT_VARIABLE ROOTALIBDIR)
292string(REPLACE "\n" "" ROOTALIBDIR ${ROOTALIBDIR})
293
294execute_process(
295COMMAND root-config --arch
296OUTPUT_VARIABLE ARCHITECTURE)
297
298
299set(AEXT a)
300set(LIBPATH ${CMAKE_BINARY_DIR}/lib/tgt_${ALICE_TARGET})
301set(BINPATH ${CMAKE_BINARY_DIR}/bin/tgt_${ALICE_TARGET})
302set(EXPORTDIR ${ALICE_ROOT}/include)
303set(BINLIBDIRS -L${ALICE_ROOT}/${LIBPATH})
304set(RAWDIRO ${CMAKE_BINARY_DIR}/RAW)
305set(ALIMDCSPECFILE ${RAWDIRO}/alimdc.spec)
306set(RAWDatabaseALIB ${LIBPATH}/libRAWDatabase.${AEXT})
307set(ESDALIB ${LIBPATH}/libESD.${AEXT})
308set(STEERBaseALIB ${LIBPATH}/libSTEERBase.${AEXT})
309set(MDCALIB ${LIBPATH}/libMDC.${AEXT})
310set(MODDIRO RAW/tgt_${ALICE_TARGET})
311
312
313if( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
314set(ALIMDCARCHDIR x86_64)
315elseif( ${ARCHITECTURE} MATCHES "linux" )
316set(ALIMDCARCHDIR i386)
317elseif( ${ARCHITECTURE} MATCHES "linuxia64gcc" )
318set(ALIMDCARCHDIR ia64)
319elseif(NOT DEFINED ${ARCHITECTURE})
320message("alimdc-rpm: Unknown architecture" )
321else( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
322message("alimdc-rpm: Unknown architecture" )
323endif( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
324
325
326add_custom_target( alimdc-rpm
327DEPENDS alimdc-static alimdc-specfile
328)
329
330add_custom_command(
331TARGET alimdc-rpm
332POST_BUILD
333COMMAND rm -rf ${ALICE_ROOT}/alimdc-root
334COMMAND mkdir -p ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
335COMMAND mkdir -p ${ALICE_ROOT}/alimdc-root/opt/alimdc/include
336COMMAND cp ${ALICE_ROOT}/RAW/mdc.h ${ALICE_ROOT}/alimdc-root/opt/alimdc/include
337COMMAND cp ${LIBPATH}/libAliMDC.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
338COMMAND cp ${ROOTALIBDIR}/libRoot.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
339COMMAND cp ${ROOTALIBDIR}/liblzma.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
340COMMAND cp ${ROOTALIBDIR}/libpcre.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
341COMMAND cp ${ROOTALIBDIR}/libfreetype.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
342COMMAND cp ${ROOTALIBDIR}/libpcre.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
343COMMAND rm -rf ${ALICE_ROOT}/RPMS
344COMMAND mkdir -p ${ALICE_ROOT}/RPMS/${ALIMDCARCHDIR}/
345COMMAND rpmbuild --verbose --define "_topdir ${ALICE_ROOT}" --define "_tmppath ${ALICE_ROOT}" -bb ${ALIMDCSPECFILE}
346COMMAND cp -p ${ALICE_ROOT}/RPMS/${ALIMDCARCHDIR}/alimdc-*.rpm .
347COMMAND rm -rf ${ALICE_ROOT}/alimdc-root
348COMMAND rm -rf ${ALICE_ROOT}/RPMS
349COMMAND echo "***** alimdc RPM created and put in ${CMAKE_BINARY_DIR} folder *****"
350)
351
352add_custom_command(
353TARGET ${RAWDIRO}
354COMMAND mkdir-p ${RAWDIRO}
355)
356
357
358add_custom_target( alimdc-specfile
359DEPENDS ${RAWDIRO}
360)
361
362add_custom_command(
363TARGET alimdc-specfile
364POST_BUILD
365COMMAND rm -rf ${ALIMDCSPECFILE}
366COMMAND @echo "***** Making alimdc RPM spec-file ${ALIMDCSPECFILE} *****"
367COMMAND @echo '\# RPM specfile for alimdc static libs' >> ${ALIMDCSPECFILE}
368COMMAND @echo '\# Package contains both ROOT and AliRoot' >> ${ALIMDCSPECFILE}
369COMMAND @echo '\# static libs needed by mStreamRecorder' >> ${ALIMDCSPECFILE}
370COMMAND @echo '\# in order to ROOT-ify the incoming raw' >> ${ALIMDCSPECFILE}
371COMMAND @echo '\# data' >> ${ALIMDCSPECFILE}
372COMMAND @echo '\# Example how-to build alimdc RPM:' >> ${ALIMDCSPECFILE}
373COMMAND @echo '\# cd ${ALICE_ROOT}' >> ${ALIMDCSPECFILE}
374COMMAND @echo '\# make alimdc-rpm' >> ${ALIMDCSPECFILE}
375COMMAND @echo "" >> ${ALIMDCSPECFILE}
376COMMAND @echo "Summary: AliMDC static libraries" >> ${ALIMDCSPECFILE}
377COMMAND @echo "Name: alimdc" >> ${ALIMDCSPECFILE}
378COMMAND @echo "Version: ${ALIROOT_SVN_BRANCH_SPEC}" >> ${ALIMDCSPECFILE}
379COMMAND @echo "Release: ${ALIROOT_SVN_REVISION}" >> ${ALIMDCSPECFILE}
380COMMAND @echo '\# Copyright: CERN Alice Off-line' >> ${ALIMDCSPECFILE}
381COMMAND @echo "License: CERN Alice Off-line" >> ${ALIMDCSPECFILE}
382COMMAND @echo "Vendor: ALICE Core Off-line Group" >> ${ALIMDCSPECFILE}
383COMMAND @echo "URL: http://aliceinfo.cern.ch" >> ${ALIMDCSPECFILE}
384COMMAND @echo "Group: Applications/Alice" >> ${ALIMDCSPECFILE}
385COMMAND @echo "Prefix: /opt/%{name}" >> ${ALIMDCSPECFILE}
386COMMAND @echo "BuildRoot: %{_tmppath}/%{name}-root" >> ${ALIMDCSPECFILE}
387COMMAND @echo "" >> ${ALIMDCSPECFILE}
388COMMAND @echo '\# automatic dependencies' >> ${ALIMDCSPECFILE}
389COMMAND @echo "AutoReqProv: yes" >> ${ALIMDCSPECFILE}
390COMMAND @echo "" >> ${ALIMDCSPECFILE}
391COMMAND @echo '\# list here required RPM packages for runtime' >> ${ALIMDCSPECFILE}
392COMMAND @echo "Requires: glibc" >> ${ALIMDCSPECFILE}
393COMMAND @echo "" >> ${ALIMDCSPECFILE}
394COMMAND @echo "Provides: alimdc" >> ${ALIMDCSPECFILE}
395COMMAND @echo "" >> ${ALIMDCSPECFILE}
396COMMAND @echo '\# description of the package' >> ${ALIMDCSPECFILE}
397COMMAND @echo "%description" >> ${ALIMDCSPECFILE}
398COMMAND @echo "Package contains both ROOT and AliRoot" >> ${ALIMDCSPECFILE}
399COMMAND @echo "static libs needed by mStreamRecorder" >> ${ALIMDCSPECFILE}
400COMMAND @echo "in order to ROOT-ify the incoming raw" >> ${ALIMDCSPECFILE}
401COMMAND @echo "data. The package version correspond to" >> ${ALIMDCSPECFILE}
402COMMAND @echo "the AliRoot one." >> ${ALIMDCSPECFILE}
403COMMAND @echo "" >> ${ALIMDCSPECFILE}
404COMMAND @echo '\# list of files to be installed' >> ${ALIMDCSPECFILE}
405COMMAND @echo "%files" >> ${ALIMDCSPECFILE}
406COMMAND @echo '%defattr (-,root,root)' >> ${ALIMDCSPECFILE}
407COMMAND @echo "%{prefix}/lib/libAliMDC.a" >> ${ALIMDCSPECFILE}
408COMMAND @echo "%{prefix}/lib/libRoot.a" >> ${ALIMDCSPECFILE}
409COMMAND @echo "%{prefix}/lib/libpcre.a" >> ${ALIMDCSPECFILE}
410COMMAND @echo "%{prefix}/lib/liblzma.a" >> ${ALIMDCSPECFILE}
411COMMAND @echo "%{prefix}/lib/libfreetype.a" >> ${ALIMDCSPECFILE}
412COMMAND @echo "%{prefix}/include/mdc.h" >> ${ALIMDCSPECFILE}
413)
414
415
416add_custom_target( alimdc-static
417DEPENDS ${LIBPATH} ${BINPATH} RAW-all-static STEER-all-static )
418
419add_custom_command(
420TARGET alimdc-static
421POST_BUILD
422COMMAND ar r ${LIBPATH}/alimdccxxo.a ${CMAKE_BINARY_DIR}/RAW/CMakeFiles/alimdc.dir/alimdc_main.cxx.o
423COMMAND rm -rf ${LIBPATH}/libAliMDC.a
424COMMAND ar x ${RAWDatabaseALIB}
425COMMAND ar x ${MDCALIB}
426COMMAND ar x ${ESDALIB}
427COMMAND ar x ${STEERBaseALIB}
428COMMAND ar r ${LIBPATH}/libAliMDC.a *.o
429COMMAND ar t ${RAWDatabaseALIB} | xargs rm
430COMMAND ar t ${MDCALIB} | xargs rm
431COMMAND ar t ${ESDALIB} | xargs rm
432COMMAND ar t ${STEERBaseALIB} | xargs rm
433COMMAND ${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
434COMMAND @echo "Target alimdc-static made"
435)
436
437add_custom_command(
438TARGET ${LIBPATH}
439COMMAND mkdir -p ${LIBPATH}
440)
441
442
443#include (MakefileDA)
444include (InstallRequiredSystemLibraries)
445include (CPack)
446
447# Install data
448# ------------------------------
449install ( DIRECTORY data
450 DESTINATION . )
451install ( DIRECTORY OCDB
452 DESTINATION .
453 PATTERN ".svn" EXCLUDE)
454install ( DIRECTORY QAref
455 DESTINATION .
456 PATTERN ".svn" EXCLUDE)
457
458#
459# EOF
460#
461