]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - CMakeLists.txt
Coverity 17695
[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}/libfreetype.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
340COMMAND cp ${ROOTALIBDIR}/libpcre.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
341COMMAND rm -rf ${ALICE_ROOT}/RPMS
342COMMAND mkdir -p ${ALICE_ROOT}/RPMS/${ALIMDCARCHDIR}/
343COMMAND rpmbuild --verbose --define "_topdir ${ALICE_ROOT}" --define "_tmppath ${ALICE_ROOT}" -bb ${ALIMDCSPECFILE}
344COMMAND cp -p ${ALICE_ROOT}/RPMS/${ALIMDCARCHDIR}/alimdc-*.rpm .
345COMMAND rm -rf ${ALICE_ROOT}/alimdc-root
346COMMAND rm -rf ${ALICE_ROOT}/RPMS
347COMMAND echo "***** alimdc RPM created and put in ${CMAKE_BINARY_DIR} folder *****"
348)
349
350add_custom_command(
351TARGET ${RAWDIRO}
352COMMAND mkdir-p ${RAWDIRO}
353)
354
355
356add_custom_target( alimdc-specfile
357DEPENDS ${RAWDIRO}
358)
359
360add_custom_command(
361TARGET alimdc-specfile
362POST_BUILD
363COMMAND rm -rf ${ALIMDCSPECFILE}
364COMMAND @echo "***** Making alimdc RPM spec-file ${ALIMDCSPECFILE} *****"
365COMMAND @echo '\# RPM specfile for alimdc static libs' >> ${ALIMDCSPECFILE}
366COMMAND @echo '\# Package contains both ROOT and AliRoot' >> ${ALIMDCSPECFILE}
367COMMAND @echo '\# static libs needed by mStreamRecorder' >> ${ALIMDCSPECFILE}
368COMMAND @echo '\# in order to ROOT-ify the incoming raw' >> ${ALIMDCSPECFILE}
369COMMAND @echo '\# data' >> ${ALIMDCSPECFILE}
370COMMAND @echo '\# Example how-to build alimdc RPM:' >> ${ALIMDCSPECFILE}
371COMMAND @echo '\# cd ${ALICE_ROOT}' >> ${ALIMDCSPECFILE}
372COMMAND @echo '\# make alimdc-rpm' >> ${ALIMDCSPECFILE}
373COMMAND @echo "" >> ${ALIMDCSPECFILE}
374COMMAND @echo "Summary: AliMDC static libraries" >> ${ALIMDCSPECFILE}
375COMMAND @echo "Name: alimdc" >> ${ALIMDCSPECFILE}
376COMMAND @echo "Version: ${ALIROOT_SVN_BRANCH_SPEC}" >> ${ALIMDCSPECFILE}
377COMMAND @echo "Release: ${ALIROOT_SVN_REVISION}" >> ${ALIMDCSPECFILE}
378COMMAND @echo '\# Copyright: CERN Alice Off-line' >> ${ALIMDCSPECFILE}
379COMMAND @echo "License: CERN Alice Off-line" >> ${ALIMDCSPECFILE}
380COMMAND @echo "Vendor: ALICE Core Off-line Group" >> ${ALIMDCSPECFILE}
381COMMAND @echo "URL: http://aliceinfo.cern.ch" >> ${ALIMDCSPECFILE}
382COMMAND @echo "Group: Applications/Alice" >> ${ALIMDCSPECFILE}
383COMMAND @echo "Prefix: /opt/%{name}" >> ${ALIMDCSPECFILE}
384COMMAND @echo "BuildRoot: %{_tmppath}/%{name}-root" >> ${ALIMDCSPECFILE}
385COMMAND @echo "" >> ${ALIMDCSPECFILE}
386COMMAND @echo '\# automatic dependencies' >> ${ALIMDCSPECFILE}
387COMMAND @echo "AutoReqProv: yes" >> ${ALIMDCSPECFILE}
388COMMAND @echo "" >> ${ALIMDCSPECFILE}
389COMMAND @echo '\# list here required RPM packages for runtime' >> ${ALIMDCSPECFILE}
390COMMAND @echo "Requires: glibc" >> ${ALIMDCSPECFILE}
391COMMAND @echo "" >> ${ALIMDCSPECFILE}
392COMMAND @echo "Provides: alimdc" >> ${ALIMDCSPECFILE}
393COMMAND @echo "" >> ${ALIMDCSPECFILE}
394COMMAND @echo '\# description of the package' >> ${ALIMDCSPECFILE}
395COMMAND @echo "%description" >> ${ALIMDCSPECFILE}
396COMMAND @echo "Package contains both ROOT and AliRoot" >> ${ALIMDCSPECFILE}
397COMMAND @echo "static libs needed by mStreamRecorder" >> ${ALIMDCSPECFILE}
398COMMAND @echo "in order to ROOT-ify the incoming raw" >> ${ALIMDCSPECFILE}
399COMMAND @echo "data. The package version correspond to" >> ${ALIMDCSPECFILE}
400COMMAND @echo "the AliRoot one." >> ${ALIMDCSPECFILE}
401COMMAND @echo "" >> ${ALIMDCSPECFILE}
402COMMAND @echo '\# list of files to be installed' >> ${ALIMDCSPECFILE}
403COMMAND @echo "%files" >> ${ALIMDCSPECFILE}
404COMMAND @echo '%defattr (-,root,root)' >> ${ALIMDCSPECFILE}
405COMMAND @echo "%{prefix}/lib/libAliMDC.a" >> ${ALIMDCSPECFILE}
406COMMAND @echo "%{prefix}/lib/libRoot.a" >> ${ALIMDCSPECFILE}
407COMMAND @echo "%{prefix}/lib/libpcre.a" >> ${ALIMDCSPECFILE}
408COMMAND @echo "%{prefix}/lib/libfreetype.a" >> ${ALIMDCSPECFILE}
409COMMAND @echo "%{prefix}/include/mdc.h" >> ${ALIMDCSPECFILE}
410)
411
412
413add_custom_target( alimdc-static
414DEPENDS ${LIBPATH} ${BINPATH} RAW-all-static STEER-all-static )
415
416add_custom_command(
417TARGET alimdc-static
418POST_BUILD
419COMMAND ar r ${LIBPATH}/alimdccxxo.a ${CMAKE_BINARY_DIR}/RAW/CMakeFiles/alimdc.dir/alimdc_main.cxx.o
420COMMAND rm -rf ${LIBPATH}/libAliMDC.a
421COMMAND ar x ${RAWDatabaseALIB}
422COMMAND ar x ${MDCALIB}
423COMMAND ar x ${ESDALIB}
424COMMAND ar x ${STEERBaseALIB}
425COMMAND ar r ${LIBPATH}/libAliMDC.a *.o
426COMMAND ar t ${RAWDatabaseALIB} | xargs rm
427COMMAND ar t ${MDCALIB} | xargs rm
428COMMAND ar t ${ESDALIB} | xargs rm
429COMMAND ar t ${STEERBaseALIB} | xargs rm
430COMMAND ${CMAKE_CXX_COMPILER} ${LDFLAGS} -o ${BINPATH}/alimdca ${LIBPATH}/alimdccxxo.a ${LIBPATH}/libAliMDC.a ${ROOTALIBDIR}/libRoot.a ${ROOTALIBDIR}/libfreetype.a ${ROOTALIBDIR}/libpcre.a -pthread -ldl -lz
431COMMAND @echo "Target alimdc-static made"
432)
433
434add_custom_command(
435TARGET ${LIBPATH}
436COMMAND mkdir -p ${LIBPATH}
437)
438
439
440#include (MakefileDA)
441include (InstallRequiredSystemLibraries)
442include (CPack)
443
444# Install data
445# ------------------------------
446install ( DIRECTORY data
447 DESTINATION . )
448
449
450#
451# EOF
452#
453