Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[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
337# Module version will be written in the generated header
338configure_file ("RAW/alimdc.spec.in" "${CMAKE_CURRENT_BINARY_DIR}/RAW/alimdc.spec" @ONLY)
339
340add_custom_target( alimdc-rpm
341DEPENDS alimdc-static
342)
343
344add_custom_command(
345TARGET alimdc-rpm
346POST_BUILD
347COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root
348COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
349COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/include
350COMMAND cp ${ALICE_ROOT}/RAW/mdc.h ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/include
351COMMAND cp ${LIBPATH}/libAliMDC.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
352COMMAND cp ${ROOTALIBDIR}/libRoot.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
353COMMAND cp ${ROOTALIBDIR}/liblzma.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
354COMMAND cp ${ROOTALIBDIR}/libpcre.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
355COMMAND cp ${ROOTALIBDIR}/libfreetype.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
356COMMAND cp ${ROOTALIBDIR}/libpcre.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
357COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/RPMS
358COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/RPMS/${ALIMDCARCHDIR}/
359COMMAND rpmbuild --verbose --define "_topdir ${CMAKE_CURRENT_BINARY_DIR}" --define "%buildroot ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root" -bb ${ALIMDCSPECFILE}
360COMMAND cp -p ${CMAKE_CURRENT_BINARY_DIR}/RPMS/${ALIMDCARCHDIR}/alimdc-*.rpm .
361COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root
362COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/RPMS
363COMMAND echo "***** alimdc RPM created and put in ${CMAKE_BINARY_DIR} folder *****"
364)
365
366add_custom_command(
367TARGET ${RAWDIRO}
368COMMAND mkdir-p ${RAWDIRO}
369)
370
371
372add_custom_target( alimdc-static
373DEPENDS ${LIBPATH} ${BINPATH} RAW-all-static STEER-all-static )
374
375add_custom_command(
376TARGET alimdc-static
377POST_BUILD
378COMMAND ar r ${LIBPATH}/alimdccxxo.a ${CMAKE_BINARY_DIR}/RAW/CMakeFiles/alimdc.dir/alimdc_main.cxx.o
379COMMAND rm -rf ${LIBPATH}/libAliMDC.a
380COMMAND ar x ${RAWDatabaseALIB}
381COMMAND ar x ${MDCALIB}
382COMMAND ar x ${ESDALIB}
383COMMAND ar x ${STEERBaseALIB}
384COMMAND ar r ${LIBPATH}/libAliMDC.a *.o
385COMMAND ar t ${RAWDatabaseALIB} | xargs rm
386COMMAND ar t ${MDCALIB} | xargs rm
387COMMAND ar t ${ESDALIB} | xargs rm
388COMMAND ar t ${STEERBaseALIB} | xargs rm
389COMMAND ${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
390COMMAND @echo "Target alimdc-static made"
391)
392
393add_custom_command(
394TARGET ${LIBPATH}
395COMMAND mkdir -p ${LIBPATH}
396)
397
398
399#include (MakefileDA)
400include (InstallRequiredSystemLibraries)
401include (CPack)
402
403# Install data
404# ------------------------------
405install ( DIRECTORY data
406 DESTINATION . )
407install ( DIRECTORY OCDB
408 DESTINATION .
409 PATTERN ".svn" EXCLUDE)
410install ( DIRECTORY QAref
411 DESTINATION .
412 PATTERN ".svn" EXCLUDE)
413install ( DIRECTORY GRP
414 DESTINATION .
415 PATTERN ".svn" EXCLUDE)
416
417#
418# EOF
419#
420