Updates for Identified High Pt macros
[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 $ENV{ALICE})
19if(NOT ALICE)
20 message(WARNING "Environment variable ALICE is not set")
21endif(NOT ALICE)
22
23set(ALICE_ROOT $ENV{ALICE_ROOT})
24if(NOT ALICE_ROOT)
25 message(FATAL_ERROR "Please set ALICE_ROOT to the AliRoot source directory")
26endif(NOT ALICE_ROOT)
27
28set(ALICE_INSTALL $ENV{ALICE_INSTALL})
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)
36if(${ALICE_INSTALL} STREQUAL ${CMAKE_BINARY_DIR})
37 message(FATAL_ERROR "Install dir should be different from build dir")
38endif()
39set(CMAKE_INSTALL_PREFIX ${ALICE_INSTALL})
40
41# Environment for SHUTTLE
42set(DIMDIR $ENV{DIMDIR})
43set(ODIR $ENV{ODIR})
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# ZeroMQ
91# ------------------------------
92find_package(ZeroMQ)
93
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
119
120#--------------------------------------------------------------------------------#
121# AliRoot Modules #
122#--------------------------------------------------------------------------------#
123
124# Exclude Module from all target
125# ------------------------------
126
127#set(EXCLUDEMODULES THydjet SHUTTLE)
128
129
130# Standard Modules
131# ------------------------------
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)
133
134if(THydjet)
135 list(APPEND ALIROOTMODULES THydjet)
136endif(THydjet)
137
138if(SHUTTLE)
139 list(APPEND ALIROOTMODULES SHUTTLE)
140endif(SHUTTLE)
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)
160 list(APPEND CERNMODULES PYTHIA6 EVGEN)
161elseif(NOT NOPYTHIA)
162 message(FATAL_ERROR "ROOT must have Pythia6 enabled !")
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# ------------------------------
173set(ALILIBS MUON TPC PMD TRD FMD TOF ITS PHOS AD ACORDE HMPID VZERO ZDC STRUCT T0 EVGEN STEER TRIGGER MFT)
174set(LIBS ${ROOTCLIBS} ${ROOTPLIBS} ${SYSLIBS})
175
176# Configure ARVerion.h
177# ------------------------------
178#If the sources were taken from Git
179if(EXISTS ${PROJECT_SOURCE_DIR}/.git/)
180 include(GetGitRevisionDescription)
181
182 find_package(Git)
183
184 if(GIT_FOUND)
185 get_git_head_revision(GIT_REFSPEC GIT_SHA1)
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()
195
196 STRING(REGEX REPLACE "^(.+/)(.+/)(.*)$" "\\3" SHORT_BRANCH "${GIT_REFSPEC}" )
197
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}")
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)
227add_custom_target(include-headers ALL)
228add_custom_target(DA-all)
229add_custom_target(check-all)
230add_custom_target(check-hxml)
231add_custom_target(smell-all)
232add_custom_target(htmldoc)
233add_custom_target(par-all)
234add_custom_target(test-par-all)
235
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
243 COMMAND cd html && aliroot -q -b mkhtml.C\\\(0,1\\\)
244 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
245
246# Include Vc, which provides the static libVc and the relevant CMake macros
247include(Vc/Vc.cmake)
248add_subdirectory(Vc)
249
250# Add Modules
251# ------------------------------
252foreach(MODULE ${MODDIRS})
253 set(${MODULE}ALIBS)
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})
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}")
270endforeach(MODULE)
271
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
280if(DATE_FOUND)
281 include (CMakeDA)
282endif(DATE_FOUND)
283
284if(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})
291endif(RULECHECKER_FOUND)
292
293#--------------------------------------------------------------------------------#
294# Additional Targets #
295#--------------------------------------------------------------------------------#
296
297# AliMdc RPM
298# ------------------------------
299
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})
331message("alimdc-rpm: Unknown architecture" )
332else( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
333message("alimdc-rpm: Unknown architecture" )
334endif( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
335
336
337add_custom_target( alimdc-rpm
338DEPENDS alimdc-static alimdc-specfile
339)
340
341add_custom_command(
342TARGET alimdc-rpm
343POST_BUILD
344COMMAND rm -rf ${ALICE_ROOT}/alimdc-root
345COMMAND mkdir -p ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
346COMMAND mkdir -p ${ALICE_ROOT}/alimdc-root/opt/alimdc/include
347COMMAND cp ${ALICE_ROOT}/RAW/mdc.h ${ALICE_ROOT}/alimdc-root/opt/alimdc/include
348COMMAND cp ${LIBPATH}/libAliMDC.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
349COMMAND cp ${ROOTALIBDIR}/libRoot.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
350COMMAND cp ${ROOTALIBDIR}/liblzma.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
351COMMAND cp ${ROOTALIBDIR}/libpcre.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
352COMMAND cp ${ROOTALIBDIR}/libfreetype.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
353COMMAND cp ${ROOTALIBDIR}/libpcre.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
354COMMAND rm -rf ${ALICE_ROOT}/RPMS
355COMMAND mkdir -p ${ALICE_ROOT}/RPMS/${ALIMDCARCHDIR}/
356COMMAND rpmbuild --verbose --define "_topdir ${ALICE_ROOT}" --define "_tmppath ${ALICE_ROOT}" -bb ${ALIMDCSPECFILE}
357COMMAND cp -p ${ALICE_ROOT}/RPMS/${ALIMDCARCHDIR}/alimdc-*.rpm .
358COMMAND rm -rf ${ALICE_ROOT}/alimdc-root
359COMMAND rm -rf ${ALICE_ROOT}/RPMS
360COMMAND echo "***** alimdc RPM created and put in ${CMAKE_BINARY_DIR} folder *****"
361)
362
363add_custom_command(
364TARGET ${RAWDIRO}
365COMMAND mkdir-p ${RAWDIRO}
366)
367
368
369add_custom_target( alimdc-specfile
370DEPENDS ${RAWDIRO}
371)
372
373add_custom_command(
374TARGET alimdc-specfile
375POST_BUILD
376COMMAND rm -rf ${ALIMDCSPECFILE}
377COMMAND @echo "***** Making alimdc RPM spec-file ${ALIMDCSPECFILE} *****"
378COMMAND @echo '\# RPM specfile for alimdc static libs' >> ${ALIMDCSPECFILE}
379COMMAND @echo '\# Package contains both ROOT and AliRoot' >> ${ALIMDCSPECFILE}
380COMMAND @echo '\# static libs needed by mStreamRecorder' >> ${ALIMDCSPECFILE}
381COMMAND @echo '\# in order to ROOT-ify the incoming raw' >> ${ALIMDCSPECFILE}
382COMMAND @echo '\# data' >> ${ALIMDCSPECFILE}
383COMMAND @echo '\# Example how-to build alimdc RPM:' >> ${ALIMDCSPECFILE}
384COMMAND @echo '\# cd ${ALICE_ROOT}' >> ${ALIMDCSPECFILE}
385COMMAND @echo '\# make alimdc-rpm' >> ${ALIMDCSPECFILE}
386COMMAND @echo "" >> ${ALIMDCSPECFILE}
387COMMAND @echo "Summary: AliMDC static libraries" >> ${ALIMDCSPECFILE}
388COMMAND @echo "Name: alimdc" >> ${ALIMDCSPECFILE}
389COMMAND @echo "Version: ${ALIROOT_BRANCH_SPEC}" >> ${ALIMDCSPECFILE}
390COMMAND @echo "Release: ${ALIROOT_REVISION}" >> ${ALIMDCSPECFILE}
391COMMAND @echo '\# Copyright: CERN Alice Off-line' >> ${ALIMDCSPECFILE}
392COMMAND @echo "License: CERN Alice Off-line" >> ${ALIMDCSPECFILE}
393COMMAND @echo "Vendor: ALICE Core Off-line Group" >> ${ALIMDCSPECFILE}
394COMMAND @echo "URL: http://aliceinfo.cern.ch" >> ${ALIMDCSPECFILE}
395COMMAND @echo "Group: Applications/Alice" >> ${ALIMDCSPECFILE}
396COMMAND @echo "Prefix: /opt/%{name}" >> ${ALIMDCSPECFILE}
397COMMAND @echo "BuildRoot: %{_tmppath}/%{name}-root" >> ${ALIMDCSPECFILE}
398COMMAND @echo "" >> ${ALIMDCSPECFILE}
399COMMAND @echo '\# automatic dependencies' >> ${ALIMDCSPECFILE}
400COMMAND @echo "AutoReqProv: yes" >> ${ALIMDCSPECFILE}
401COMMAND @echo "" >> ${ALIMDCSPECFILE}
402COMMAND @echo '\# list here required RPM packages for runtime' >> ${ALIMDCSPECFILE}
403COMMAND @echo "Requires: glibc" >> ${ALIMDCSPECFILE}
404COMMAND @echo "" >> ${ALIMDCSPECFILE}
405COMMAND @echo "Provides: alimdc" >> ${ALIMDCSPECFILE}
406COMMAND @echo "" >> ${ALIMDCSPECFILE}
407COMMAND @echo '\# description of the package' >> ${ALIMDCSPECFILE}
408COMMAND @echo "%description" >> ${ALIMDCSPECFILE}
409COMMAND @echo "Package contains both ROOT and AliRoot" >> ${ALIMDCSPECFILE}
410COMMAND @echo "static libs needed by mStreamRecorder" >> ${ALIMDCSPECFILE}
411COMMAND @echo "in order to ROOT-ify the incoming raw" >> ${ALIMDCSPECFILE}
412COMMAND @echo "data. The package version correspond to" >> ${ALIMDCSPECFILE}
413COMMAND @echo "the AliRoot one." >> ${ALIMDCSPECFILE}
414COMMAND @echo "" >> ${ALIMDCSPECFILE}
415COMMAND @echo '\# list of files to be installed' >> ${ALIMDCSPECFILE}
416COMMAND @echo "%files" >> ${ALIMDCSPECFILE}
417COMMAND @echo "%defattr (-,root,root)" >> ${ALIMDCSPECFILE}
418COMMAND @echo "%{prefix}/lib/libAliMDC.a" >> ${ALIMDCSPECFILE}
419COMMAND @echo "%{prefix}/lib/libRoot.a" >> ${ALIMDCSPECFILE}
420COMMAND @echo "%{prefix}/lib/libpcre.a" >> ${ALIMDCSPECFILE}
421COMMAND @echo "%{prefix}/lib/liblzma.a" >> ${ALIMDCSPECFILE}
422COMMAND @echo "%{prefix}/lib/libfreetype.a" >> ${ALIMDCSPECFILE}
423COMMAND @echo "%{prefix}/include/mdc.h" >> ${ALIMDCSPECFILE}
424)
425
426
427add_custom_target( alimdc-static
428DEPENDS ${LIBPATH} ${BINPATH} RAW-all-static STEER-all-static )
429
430add_custom_command(
431TARGET alimdc-static
432POST_BUILD
433COMMAND ar r ${LIBPATH}/alimdccxxo.a ${CMAKE_BINARY_DIR}/RAW/CMakeFiles/alimdc.dir/alimdc_main.cxx.o
434COMMAND rm -rf ${LIBPATH}/libAliMDC.a
435COMMAND ar x ${RAWDatabaseALIB}
436COMMAND ar x ${MDCALIB}
437COMMAND ar x ${ESDALIB}
438COMMAND ar x ${STEERBaseALIB}
439COMMAND ar r ${LIBPATH}/libAliMDC.a *.o
440COMMAND ar t ${RAWDatabaseALIB} | xargs rm
441COMMAND ar t ${MDCALIB} | xargs rm
442COMMAND ar t ${ESDALIB} | xargs rm
443COMMAND ar t ${STEERBaseALIB} | xargs rm
444COMMAND ${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
445COMMAND @echo "Target alimdc-static made"
446)
447
448add_custom_command(
449TARGET ${LIBPATH}
450COMMAND mkdir -p ${LIBPATH}
451)
452
453
454#include (MakefileDA)
455include (InstallRequiredSystemLibraries)
456include (CPack)
457
458# Install data
459# ------------------------------
460install ( DIRECTORY data
461 DESTINATION . )
462install ( DIRECTORY OCDB
463 DESTINATION .
464 PATTERN ".svn" EXCLUDE)
465install ( DIRECTORY QAref
466 DESTINATION .
467 PATTERN ".svn" EXCLUDE)
468install ( DIRECTORY GRP
469 DESTINATION .
470 PATTERN ".svn" EXCLUDE)
471
472#
473# EOF
474#
475