]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - CMakeLists.txt
Update in Lc task (ChiaraZ)
[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()
39
40# If CMAKE_INSTALL_PREFIX was not set than we set it to ALICE_INSTALL.
41# If ALICE_INSTALL was not defined than it will default to source directory
42if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
43 set(CMAKE_INSTALL_PREFIX ${ALICE_INSTALL})
44endif()
45
46# Environment for SHUTTLE
47set(DIMDIR $ENV{DIMDIR})
48set(ODIR $ENV{ODIR})
49
50get_filename_component(PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}" REALPATH)
51set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
52set(CPACK_COMPONENTS_ALL MDC)
53
54include(ALICE_CMake)
55
56#--------------------------------------------------------------------------------#
57# Find Packages #
58#--------------------------------------------------------------------------------#
59
60# Subversion
61# ------------------------------
62
63find_package(Subversion REQUIRED)
64
65# ROOT
66# ------------------------------
67
68find_package(ROOT REQUIRED)
69
70# IRST Rule Checker
71# ------------------------------
72
73find_package(RuleChecker)
74
75# DATE
76# ------------------------------
77
78find_package(DATE)
79
80# GEANT3
81# ------------------------------
82
83find_package(GEANT3)
84
85# AMORE
86# ------------------------------
87
88find_package(AMORE)
89
90# AliRoot CPack configuration
91#-------------------------------
92
93find_package(CPack)
94
95# ZeroMQ
96# ------------------------------
97find_package(ZeroMQ)
98
99#--------------------------------------------------------------------------------#
100# Environment/Compiler Configuration #
101#--------------------------------------------------------------------------------#
102
103ALICE_CheckOutOfSourceBuild()
104ALICE_RootConfig(CMAKE_CXX_COMPILER --cxx)
105ALICE_RootConfig(CMAKE_C_COMPILER --cc)
106ALICE_RootConfig(CMAKE_Fortran_COMPILER --f77)
107ALICE_ConfigurePlatform()
108ALICE_ConfigureCompiler()
109
110
111#--------------------------------------------------------------------------------#
112# AliRoot Path Settings #
113#--------------------------------------------------------------------------------#
114
115ALICE_DevFlagsOutput()
116set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin/tgt_${ALICE_TARGET}")
117set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib/tgt_${ALICE_TARGET}")
118set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib/tgt_${ALICE_TARGET}")
119set(CMAKE_INCLUDE_EXPORT_DIRECTORY "${PROJECT_BINARY_DIR}/include")
120file(MAKE_DIRECTORY ${CMAKE_INCLUDE_EXPORT_DIRECTORY})
121set(EXPORTDIRS "${ALICE_INSTALL}/include")
122set(BINLIBDIRS "-L${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
123
124
125#--------------------------------------------------------------------------------#
126# AliRoot Modules #
127#--------------------------------------------------------------------------------#
128
129# Exclude Module from all target
130# ------------------------------
131
132#set(EXCLUDEMODULES THydjet SHUTTLE)
133
134
135# Standard Modules
136# ------------------------------
137set(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 FIT)
138
139if(THydjet)
140 list(APPEND ALIROOTMODULES THydjet)
141endif(THydjet)
142
143if(SHUTTLE)
144 list(APPEND ALIROOTMODULES SHUTTLE)
145endif(SHUTTLE)
146
147# Additional Modules
148# ------------------------------
149list(APPEND ALIROOTMODULES TUHKMgen EPOS)
150
151# EVE
152# ------------------------------
153ALICE_RootConfig(EVE --has-opengl)
154if(NOT EVE STREQUAL "no")
155 list(APPEND ALIROOTMODULES EVE)
156endif(NOT EVE STREQUAL "no")
157
158# CERN Modules
159# ------------------------------
160set(CERNMODULES LHAPDF HIJING MICROCERN HERWIG)
161
162# Check for Pythia 6
163if(EXISTS ${ROOTINCDIR}/TPythia6.h)
164 set(PYTHIA6 TRUE)
165 list(APPEND CERNMODULES PYTHIA6 EVGEN)
166elseif(NOT NOPYTHIA)
167 message(FATAL_ERROR "ROOT must have Pythia6 enabled !")
168endif(EXISTS ${ROOTINCDIR}/TPythia6.h)
169
170# Set Final list of modules
171set(MODULES ${ALIROOTMODULES} ${CERNMODULES} ALIROOT)
172
173# Set Module directories
174set(MODDIRS ${MODULES})
175
176# Libraries for Linking
177# ------------------------------
178set(ALILIBS MUON TPC PMD TRD FMD TOF ITS PHOS AD ACORDE HMPID VZERO ZDC STRUCT T0 EVGEN STEER TRIGGER MFT)
179set(LIBS ${ROOTCLIBS} ${ROOTPLIBS} ${SYSLIBS})
180
181# Configure ARVerion.h
182# ------------------------------
183#If the sources were taken from Git
184if(EXISTS ${PROJECT_SOURCE_DIR}/.git/)
185 include(GetGitRevisionDescription)
186
187 find_package(Git)
188
189 if(GIT_FOUND)
190 get_git_head_revision(GIT_REFSPEC GIT_SHA1)
191 message(STATUS "Aliroot branch - ${GIT_REFSPEC} Revision - ${GIT_SHA1} ")
192
193 STRING(REGEX REPLACE "^(.+/)(.+)/(.*)$" "\\2" BRANCH_TYPE "${GIT_REFSPEC}" )
194
195 if(BRANCH_TYPE STREQUAL "heads")
196 set(ALIROOT_REVISION "ThisIsaBranchNoRevisionProvided")
197 else()
198 set(ALIROOT_REVISION ${GIT_SHA1})
199 endif()
200
201 STRING(REGEX REPLACE "^(.+/)(.+/)(.*)$" "\\3" SHORT_BRANCH "${GIT_REFSPEC}" )
202
203 set(ALIROOT_BRANCH ${SHORT_BRANCH})
204
205 else()
206 message("Git not installed. I can't tell you which revision you are using!")
207 endif(GIT_FOUND)
208else()
209 message("AliRoot sources not downloaded from a Version Control System. I can't tell which revision you are using!")
210endif(EXISTS ${PROJECT_SOURCE_DIR}/.git/)
211
212configure_file(${PROJECT_SOURCE_DIR}/cmake/ARVersion.h.tmp ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h @ONLY)
213
214string (REPLACE "-" "." ALIROOT_BRANCH_SPEC "${ALIROOT_BRANCH}")
215
216#--------------------------------------------------------------------------------#
217# Build Modules #
218#--------------------------------------------------------------------------------#
219
220# Module Variables
221# ------------------------------
222set(ALLLIBS)
223set(ALLEXECS)
224set(INCLUDEFILES)
225set(BINLIBS)
226set(EXPORTFILES)
227
228# Top Level Build Targets
229# ------------------------------
230
231add_custom_target(alilibs-static)
232add_custom_target(include-headers ALL)
233add_custom_target(DA-all)
234add_custom_target(check-all)
235add_custom_target(check-hxml)
236add_custom_target(smell-all)
237add_custom_target(htmldoc)
238add_custom_target(par-all)
239add_custom_target(test-par-all)
240
241#NY file(GLOB CFILES_LIST ${CMAKE_SOURCE_DIR}/macros/*.C)
242
243add_custom_command(TARGET htmldoc
244 PRE_BUILD
245 COMMAND mkdir -p html
246 COMMAND rm -rf html/roothtml
247 COMMAND rm -f html/picts
248 COMMAND cd html && aliroot -q -b mkhtml.C\\\(0,1\\\)
249 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
250
251# Include Vc, which provides the static libVc and the relevant CMake macros
252include(Vc/Vc.cmake)
253add_subdirectory(Vc)
254
255# Add Modules
256# ------------------------------
257foreach(MODULE ${MODDIRS})
258 set(${MODULE}ALIBS)
259#RS configure_file(${PROJECT_SOURCE_DIR}/cmake/Module.tmp ${PROJECT_SOURCE_DIR}/${MODULE}/CMakeLists.txt @ONLY)
260 add_custom_target(${MODULE}-all ALL)
261 add_custom_target(${MODULE}-par-all)
262 add_custom_target(test-${MODULE}-par-all)
263 add_custom_target(${MODULE}-all-static)
264 add_dependencies(alilibs-static "${MODULE}-static")
265 add_subdirectory(${MODULE})
266
267#NY set(dir "${CMAKE_SOURCE_DIR}/${MODULE}")
268#NY if (EXISTS "${dir}")
269#NY file(GLOB CFILES_MOD ${dir}/*.C)
270#NY list(LENGTH CFILES_MOD len)
271#NY if (${len} GREATER 0)
272#NY list(APPEND CFILES_LIST "${CFILES_MOD}")
273#NY endif (${len} GREATER 0)
274#NY endif(EXISTS "${dir}")
275endforeach(MODULE)
276
277#NY foreach(cfile ${CFILES_LIST})
278#NY add_custom_command(TARGET htmldoc
279#NY PRE_BUILD
280#NY COMMAND cd html &&
281#NY aliroot -b -q \"mkhtml.C(\"${cfile}\")\" > /dev/null
282#NY WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
283#NY endforeach(cfile)
284
285if(DATE_FOUND)
286 include (CMakeDA)
287endif(DATE_FOUND)
288
289if(RULECHECKER_FOUND)
290 add_custom_target(factfile DEPENDS ${FACTFILE})
291 add_custom_command( OUTPUT ${FACTFILE}
292 COMMAND ${CMAKE_COMMAND} -E echo "Re-generating factfile"
293 COMMAND ${JAVA_RUNTIME} -Xmx1024M -jar ${FACTEXTRACTOR_JAR} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}
294 DEPENDS check-hxml ${CMAKE_BINARY_DIR}/check-hxml-touchfile ${_factfile_deps}
295 WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
296endif(RULECHECKER_FOUND)
297
298#--------------------------------------------------------------------------------#
299# Additional Targets #
300#--------------------------------------------------------------------------------#
301
302# AliMdc RPM
303# ------------------------------
304
305execute_process(
306COMMAND root-config --libdir
307OUTPUT_VARIABLE ROOTALIBDIR)
308string(REPLACE "\n" "" ROOTALIBDIR ${ROOTALIBDIR})
309
310execute_process(
311COMMAND root-config --arch
312OUTPUT_VARIABLE ARCHITECTURE)
313
314
315set(AEXT a)
316set(LIBPATH ${CMAKE_BINARY_DIR}/lib/tgt_${ALICE_TARGET})
317set(BINPATH ${CMAKE_BINARY_DIR}/bin/tgt_${ALICE_TARGET})
318set(EXPORTDIR ${ALICE_ROOT}/include)
319set(BINLIBDIRS -L${ALICE_ROOT}/${LIBPATH})
320set(RAWDIRO ${CMAKE_BINARY_DIR}/RAW)
321set(ALIMDCSPECFILE ${RAWDIRO}/alimdc.spec)
322set(RAWDatabaseALIB ${LIBPATH}/libRAWDatabase.${AEXT})
323set(ESDALIB ${LIBPATH}/libESD.${AEXT})
324set(STEERBaseALIB ${LIBPATH}/libSTEERBase.${AEXT})
325set(MDCALIB ${LIBPATH}/libMDC.${AEXT})
326set(MODDIRO RAW/tgt_${ALICE_TARGET})
327
328
329if( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
330set(ALIMDCARCHDIR x86_64)
331elseif( ${ARCHITECTURE} MATCHES "linux" )
332set(ALIMDCARCHDIR i386)
333elseif( ${ARCHITECTURE} MATCHES "linuxia64gcc" )
334set(ALIMDCARCHDIR ia64)
335elseif(NOT DEFINED ${ARCHITECTURE})
336message("alimdc-rpm: Unknown architecture" )
337else( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
338message("alimdc-rpm: Unknown architecture" )
339endif( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
340
341
342# Module version will be written in the generated header
343configure_file ("RAW/alimdc.spec.in" "${CMAKE_CURRENT_BINARY_DIR}/RAW/alimdc.spec" @ONLY)
344
345add_custom_target( alimdc-rpm
346DEPENDS alimdc-static
347)
348
349add_custom_command(
350TARGET alimdc-rpm
351POST_BUILD
352COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root
353COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
354COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/include
355COMMAND cp ${ALICE_ROOT}/RAW/mdc.h ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/include
356COMMAND cp ${LIBPATH}/libAliMDC.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
357COMMAND cp ${ROOTALIBDIR}/libRoot.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
358COMMAND cp ${ROOTALIBDIR}/liblzma.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
359COMMAND cp ${ROOTALIBDIR}/libpcre.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
360COMMAND cp ${ROOTALIBDIR}/libfreetype.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
361COMMAND cp ${ROOTALIBDIR}/libpcre.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
362COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/RPMS
363COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/RPMS/${ALIMDCARCHDIR}/
364COMMAND rpmbuild --verbose --define "_topdir ${CMAKE_CURRENT_BINARY_DIR}" --define "%buildroot ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root" -bb ${ALIMDCSPECFILE}
365COMMAND cp -p ${CMAKE_CURRENT_BINARY_DIR}/RPMS/${ALIMDCARCHDIR}/alimdc-*.rpm .
366COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root
367COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/RPMS
368COMMAND echo "***** alimdc RPM created and put in ${CMAKE_BINARY_DIR} folder *****"
369)
370
371add_custom_command(
372TARGET ${RAWDIRO}
373COMMAND mkdir-p ${RAWDIRO}
374)
375
376
377add_custom_target( alimdc-static
378DEPENDS ${LIBPATH} ${BINPATH} RAW-all-static STEER-all-static )
379
380add_custom_command(
381TARGET alimdc-static
382POST_BUILD
383COMMAND ar r ${LIBPATH}/alimdccxxo.a ${CMAKE_BINARY_DIR}/RAW/CMakeFiles/alimdc.dir/alimdc_main.cxx.o
384COMMAND rm -rf ${LIBPATH}/libAliMDC.a
385COMMAND ar x ${RAWDatabaseALIB}
386COMMAND ar x ${MDCALIB}
387COMMAND ar x ${ESDALIB}
388COMMAND ar x ${STEERBaseALIB}
389COMMAND ar r ${LIBPATH}/libAliMDC.a *.o
390COMMAND ar t ${RAWDatabaseALIB} | xargs rm
391COMMAND ar t ${MDCALIB} | xargs rm
392COMMAND ar t ${ESDALIB} | xargs rm
393COMMAND ar t ${STEERBaseALIB} | xargs rm
394COMMAND ${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 -lssl -ldl -lz
395COMMAND @echo "Target alimdc-static made"
396)
397
398add_custom_command(
399TARGET ${LIBPATH}
400COMMAND mkdir -p ${LIBPATH}
401)
402
403
404#include (MakefileDA)
405include (InstallRequiredSystemLibraries)
406include (CPack)
407
408# Install data
409# ------------------------------
410install ( DIRECTORY data
411 DESTINATION . )
412install ( DIRECTORY OCDB
413 DESTINATION .
414 PATTERN ".svn" EXCLUDE)
415install ( DIRECTORY QAref
416 DESTINATION .
417 PATTERN ".svn" EXCLUDE)
418install ( DIRECTORY GRP
419 DESTINATION .
420 PATTERN ".svn" EXCLUDE)
421
422#
423# EOF
424#
425