]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - CMakeLists.txt
increased classdef
[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 PWG0 PWG1 PWG2 PWG3 PWG4 TRIGGER PYTHIA8 TAmpt OADB )
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)
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)
200
201#--------------------------------------------------------------------------------#
202# Build Modules #
203#--------------------------------------------------------------------------------#
204
205# Module Variables
206# ------------------------------
207set(ALLLIBS)
208set(ALLEXECS)
209set(INCLUDEFILES)
210set(BINLIBS)
211set(EXPORTFILES)
212
213# Top Level Build Targets
214# ------------------------------
215
216add_custom_target(alilibs-static)
217add_custom_target(include-headers ALL)
218add_custom_target(DA-all)
219add_custom_target(check-all)
220add_custom_target(check-hxml)
221add_custom_target(smell-all)
222add_custom_target(htmldoc)
223add_custom_target(par-all)
224add_custom_target(test-par-all)
225
226#NY file(GLOB CFILES_LIST ${CMAKE_SOURCE_DIR}/macros/*.C)
227
228add_custom_command(TARGET htmldoc
229 PRE_BUILD
230 COMMAND mkdir -p html
231 COMMAND rm -rf html/roothtml
232 COMMAND rm -f html/picts
233 COMMAND cd html &&
234 aliroot -q -b \"mkhtml.C(0,1)\"
235 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
236
237
238# Add Modules
239# ------------------------------
240foreach(MODULE ${MODDIRS})
241 set(${MODULE}ALIBS)
242 configure_file(${PROJECT_SOURCE_DIR}/cmake/Module.tmp ${PROJECT_SOURCE_DIR}/${MODULE}/CMakeLists.txt @ONLY)
243 add_custom_target(${MODULE}-all ALL)
244 add_custom_target(${MODULE}-par-all)
245 add_custom_target(test-${MODULE}-par-all)
246 add_custom_target(${MODULE}-all-static)
247 add_dependencies(alilibs-static "${MODULE}-static")
248 add_subdirectory(${MODULE})
249
250#NY set(dir "${CMAKE_SOURCE_DIR}/${MODULE}")
251#NY if (EXISTS "${dir}")
252#NY file(GLOB CFILES_MOD ${dir}/*.C)
253#NY list(LENGTH CFILES_MOD len)
254#NY if (${len} GREATER 0)
255#NY list(APPEND CFILES_LIST "${CFILES_MOD}")
256#NY endif (${len} GREATER 0)
257#NY endif(EXISTS "${dir}")
258endforeach(MODULE)
259
260#NY foreach(cfile ${CFILES_LIST})
261#NY add_custom_command(TARGET htmldoc
262#NY PRE_BUILD
263#NY COMMAND cd html &&
264#NY aliroot -b -q \"mkhtml.C(\"${cfile}\")\" > /dev/null
265#NY WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
266#NY endforeach(cfile)
267
268if(DATE_FOUND AND AMORE_FOUND)
269 include (CMakeDA)
270endif(DATE_FOUND AND AMORE_FOUND)
271
272if(RULECHECKER_FOUND)
273 add_custom_target(factfile DEPENDS ${FACTFILE})
274 add_custom_command( OUTPUT ${FACTFILE}
275 COMMAND ${CMAKE_COMMAND} -E echo "Re-generating factfile"
276 COMMAND ${JAVA_RUNTIME} -Xmx1024M -jar ${FACTEXTRACTOR_JAR} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}
277 DEPENDS check-hxml ${CMAKE_BINARY_DIR}/check-hxml-touchfile ${_factfile_deps}
278 WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
279endif(RULECHECKER_FOUND)
280
281#--------------------------------------------------------------------------------#
282# Additional Targets #
283#--------------------------------------------------------------------------------#
284
285# AliMdc RPM
286# ------------------------------
287
288execute_process(
289COMMAND root-config --libdir
290OUTPUT_VARIABLE ROOTALIBDIR)
291string(REPLACE "\n" "" ROOTALIBDIR ${ROOTALIBDIR})
292
293execute_process(
294COMMAND root-config --arch
295OUTPUT_VARIABLE ARCHITECTURE)
296
297
298set(AEXT a)
299set(LIBPATH ${CMAKE_BINARY_DIR}/lib/tgt_${ALICE_TARGET})
300set(BINPATH ${CMAKE_BINARY_DIR}/bin/tgt_${ALICE_TARGET})
301set(EXPORTDIR ${ALICE_ROOT}/include)
302set(BINLIBDIRS -L${ALICE_ROOT}/${LIBPATH})
303set(RAWDIRO ${CMAKE_BINARY_DIR}/RAW)
304set(ALIMDCSPECFILE ${RAWDIRO}/alimdc.spec)
305set(RAWDatabaseALIB ${LIBPATH}/libRAWDatabase.${AEXT})
306set(ESDALIB ${LIBPATH}/libESD.${AEXT})
307set(STEERBaseALIB ${LIBPATH}/libSTEERBase.${AEXT})
308set(MDCALIB ${LIBPATH}/libMDC.${AEXT})
309set(MODDIRO RAW/tgt_${ALICE_TARGET})
310
311
312if( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
313set(ALIMDCARCHDIR x86_64)
314elseif( ${ARCHITECTURE} MATCHES "linux" )
315set(ALIMDCARCHDIR i386)
316elseif( ${ARCHITECTURE} MATCHES "linuxia64gcc" )
317set(ALIMDCARCHDIR ia64)
318elseif(NOT DEFINED ${ARCHITECTURE})
319message("alimdc-rpm: Unknown architecture" )
320else( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
321message("alimdc-rpm: Unknown architecture" )
322endif( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
323
324
325add_custom_target( alimdc-rpm
326DEPENDS alimdc-static alimdc-specfile
327)
328
329add_custom_command(
330TARGET alimdc-rpm
331POST_BUILD
332COMMAND rm -rf ${ALICE_ROOT}/alimdc-root
333COMMAND mkdir -p ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
334COMMAND mkdir -p ${ALICE_ROOT}/alimdc-root/opt/alimdc/include
335COMMAND cp ${ALICE_ROOT}/RAW/mdc.h ${ALICE_ROOT}/alimdc-root/opt/alimdc/include
336COMMAND cp ${LIBPATH}/libAliMDC.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
337COMMAND cp ${ROOTALIBDIR}/libRoot.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
338COMMAND cp ${ROOTALIBDIR}/libfreetype.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
339COMMAND cp ${ROOTALIBDIR}/libpcre.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
340COMMAND rm -rf ${ALICE_ROOT}/RPMS
341COMMAND mkdir -p ${ALICE_ROOT}/RPMS/${ALIMDCARCHDIR}/
342COMMAND rpmbuild --verbose --define "_topdir ${ALICE_ROOT}" --define "_tmppath ${ALICE_ROOT}" -bb ${ALIMDCSPECFILE}
343COMMAND cp -p ${ALICE_ROOT}/RPMS/${ALIMDCARCHDIR}/alimdc-*.rpm .
344COMMAND rm -rf ${ALICE_ROOT}/alimdc-root
345COMMAND rm -rf ${ALICE_ROOT}/RPMS
346COMMAND echo "***** alimdc RPM created and put in ${CMAKE_BINARY_DIR} folder *****"
347)
348
349add_custom_command(
350TARGET ${RAWDIRO}
351COMMAND mkdir-p ${RAWDIRO}
352)
353
354
355add_custom_target( alimdc-specfile
356DEPENDS ${RAWDIRO}
357)
358
359add_custom_command(
360TARGET alimdc-specfile
361POST_BUILD
362COMMAND rm -rf ${ALIMDCSPECFILE}
363COMMAND @echo "***** Making alimdc RPM spec-file ${ALIMDCSPECFILE} *****"
364COMMAND @echo '\# RPM specfile for alimdc static libs' >> ${ALIMDCSPECFILE}
365COMMAND @echo '\# Package contains both ROOT and AliRoot' >> ${ALIMDCSPECFILE}
366COMMAND @echo '\# static libs needed by mStreamRecorder' >> ${ALIMDCSPECFILE}
367COMMAND @echo '\# in order to ROOT-ify the incoming raw' >> ${ALIMDCSPECFILE}
368COMMAND @echo '\# data' >> ${ALIMDCSPECFILE}
369COMMAND @echo '\# Example how-to build alimdc RPM:' >> ${ALIMDCSPECFILE}
370COMMAND @echo '\# cd ${ALICE_ROOT}' >> ${ALIMDCSPECFILE}
371COMMAND @echo '\# make alimdc-rpm' >> ${ALIMDCSPECFILE}
372COMMAND @echo "" >> ${ALIMDCSPECFILE}
373COMMAND @echo "Summary: AliMDC static libraries" >> ${ALIMDCSPECFILE}
374COMMAND @echo "Name: alimdc" >> ${ALIMDCSPECFILE}
375COMMAND @echo "Version: ${ALIROOT_SVN_BRANCH}" >> ${ALIMDCSPECFILE}
376COMMAND @echo "Release: ${ALIROOT_SVN_REVISION}" >> ${ALIMDCSPECFILE}
377COMMAND @echo '\# Copyright: CERN Alice Off-line' >> ${ALIMDCSPECFILE}
378COMMAND @echo "License: CERN Alice Off-line" >> ${ALIMDCSPECFILE}
379COMMAND @echo "Vendor: ALICE Core Off-line Group" >> ${ALIMDCSPECFILE}
380COMMAND @echo "URL: http://aliceinfo.cern.ch" >> ${ALIMDCSPECFILE}
381COMMAND @echo "Group: Applications/Alice" >> ${ALIMDCSPECFILE}
382COMMAND @echo "Prefix: /opt/%{name}" >> ${ALIMDCSPECFILE}
383COMMAND @echo "BuildRoot: %{_tmppath}/%{name}-root" >> ${ALIMDCSPECFILE}
384COMMAND @echo "" >> ${ALIMDCSPECFILE}
385COMMAND @echo '\# automatic dependencies' >> ${ALIMDCSPECFILE}
386COMMAND @echo "AutoReqProv: yes" >> ${ALIMDCSPECFILE}
387COMMAND @echo "" >> ${ALIMDCSPECFILE}
388COMMAND @echo '\# list here required RPM packages for runtime' >> ${ALIMDCSPECFILE}
389COMMAND @echo "Requires: glibc" >> ${ALIMDCSPECFILE}
390COMMAND @echo "" >> ${ALIMDCSPECFILE}
391COMMAND @echo "Provides: alimdc" >> ${ALIMDCSPECFILE}
392COMMAND @echo "" >> ${ALIMDCSPECFILE}
393COMMAND @echo '\# description of the package' >> ${ALIMDCSPECFILE}
394COMMAND @echo "%description" >> ${ALIMDCSPECFILE}
395COMMAND @echo "Package contains both ROOT and AliRoot" >> ${ALIMDCSPECFILE}
396COMMAND @echo "static libs needed by mStreamRecorder" >> ${ALIMDCSPECFILE}
397COMMAND @echo "in order to ROOT-ify the incoming raw" >> ${ALIMDCSPECFILE}
398COMMAND @echo "data. The package version correspond to" >> ${ALIMDCSPECFILE}
399COMMAND @echo "the AliRoot one." >> ${ALIMDCSPECFILE}
400COMMAND @echo "" >> ${ALIMDCSPECFILE}
401COMMAND @echo '\# list of files to be installed' >> ${ALIMDCSPECFILE}
402COMMAND @echo "%files" >> ${ALIMDCSPECFILE}
403COMMAND @echo '%defattr (-,root,root)' >> ${ALIMDCSPECFILE}
404COMMAND @echo "%{prefix}/lib/libAliMDC.a" >> ${ALIMDCSPECFILE}
405COMMAND @echo "%{prefix}/lib/libRoot.a" >> ${ALIMDCSPECFILE}
406COMMAND @echo "%{prefix}/lib/libpcre.a" >> ${ALIMDCSPECFILE}
407COMMAND @echo "%{prefix}/lib/libfreetype.a" >> ${ALIMDCSPECFILE}
408COMMAND @echo "%{prefix}/include/mdc.h" >> ${ALIMDCSPECFILE}
409)
410
411
412add_custom_target( alimdc-static
413DEPENDS ${LIBPATH} ${BINPATH} RAW-all-static STEER-all-static )
414
415add_custom_command(
416TARGET alimdc-static
417POST_BUILD
418COMMAND ar r ${LIBPATH}/alimdccxxo.a ${CMAKE_BINARY_DIR}/RAW/CMakeFiles/alimdc.dir/alimdc_main.cxx.o
419COMMAND rm -rf ${LIBPATH}/libAliMDC.a
420COMMAND ar x ${RAWDatabaseALIB}
421COMMAND ar x ${MDCALIB}
422COMMAND ar x ${ESDALIB}
423COMMAND ar x ${STEERBaseALIB}
424COMMAND ar r ${LIBPATH}/libAliMDC.a *.o
425COMMAND ar t ${RAWDatabaseALIB} | xargs rm
426COMMAND ar t ${MDCALIB} | xargs rm
427COMMAND ar t ${ESDALIB} | xargs rm
428COMMAND ar t ${STEERBaseALIB} | xargs rm
429COMMAND ${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
430COMMAND @echo "Target alimdc-static made"
431)
432
433add_custom_command(
434TARGET ${LIBPATH}
435COMMAND mkdir -p ${LIBPATH}
436)
437
438
439#include (MakefileDA)
440include (InstallRequiredSystemLibraries)
441include (CPack)
442
443# Install data
444# ------------------------------
445install ( DIRECTORY data
446 DESTINATION . )
447
448
449#
450# EOF
451#
452