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