]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - CMakeLists.txt
doxy: multiple ClassImp/Def() supported
[u/mrichter/AliRoot.git] / CMakeLists.txt
... / ...
CommitLineData
1# **************************************************************************
2# * Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. *
3# * *
4# * Author: The ALICE Off-line Project. *
5# * Contributors are mentioned in the code where appropriate. *
6# * *
7# * Permission to use, copy, modify and distribute this software and its *
8# * documentation strictly for non-commercial purposes is hereby granted *
9# * without fee, provided that the above copyright notice appears in all *
10# * copies and that both the copyright notice and this permission notice *
11# * appear in the supporting documentation. The authors make no claims *
12# * about the suitability of this software for any purpose. It is *
13# * provided "as is" without express or implied warranty. *
14# **************************************************************************
15
16#--------------------------------------------------------------------------#
17# Set Basic CMake Configuration #
18#--------------------------------------------------------------------------#
19
20cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR)
21
22### CMP0025 Compiler id for Apple Clang is now AppleClang.
23### CMP0042 MACOSX_RPATH is enabled by default.
24
25foreach(p
26 CMP0025 # CMake 3.0
27 CMP0042 # CMake 3.0
28 )
29 if(POLICY ${p})
30 cmake_policy(SET ${p} NEW)
31 endif()
32endforeach()
33
34project(AliRoot CXX C)
35
36message(STATUS "CMake platform: ${CMAKE_SYSTEM}")
37message(STATUS "Build folder: ${AliRoot_BINARY_DIR}")
38message(STATUS "Source folder: ${AliRoot_SOURCE_DIR}")
39message(STATUS "Installation folder: ${CMAKE_INSTALL_PREFIX}")
40
41# CMake supports different build types by default. We want the DEBUG build type
42# to have "-g -O0" flags: by default it only has "-g"
43set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
44set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
45
46# You can change the build type using
47# cmake -DCMAKE_BUILD_TYPE=DEBUG | RELEASE | RELWITHDEBINFO | MINSIZEREL ...
48if (NOT CMAKE_BUILD_TYPE)
49 set(CMAKE_BUILD_TYPE RELWITHDEBINFO)
50endif(NOT CMAKE_BUILD_TYPE)
51message(STATUS "Build type: ${CMAKE_BUILD_TYPE} (${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}})")
52
53if(CMAKE_INSTALL_PREFIX STREQUAL "${AliRoot_SOURCE_DIR}")
54 message(FATAL_ERROR "Please choose a different installation point than the source tree!")
55endif()
56
57# Path to additonal modules
58set(CMAKE_MODULE_PATH "${AliRoot_SOURCE_DIR}/cmake")
59
60# AliRoot version extracted from Git repository
61# Sets 4 git variables
62# - GIT_REFSPEC - complete name of the current reference
63# - ALIROOT_BRANCH - name of the branch or tag extracted from the current reference
64# - GIT_SHA1 - current hash in the long format
65# - GIT_SHORT_SHA1 - current hash in the short format
66# - ALIROOT_VERSION = ALIROOT_BRANCH
67# - ALIROOT_REVISION = GIT_SHORT_SHA1
68include(CheckGitVersion)
69
70# - CLANG_MAJOR.CLANG_MINOR or
71# - GCC_MAJOR.GCC_MINOR.GCC_PATCH
72include(CheckCompiler)
73
74# Utility to generate PARfiles
75include(cmake/GenParFile.cmake)
76
77# Shared library suffix
78if (NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
79 set(CMAKE_SHARED_LIBRARY_SUFFIX .so)
80endif (NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
81
82# Optional: Doxygen for reference doc generation
83find_package(Doxygen)
84if(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
85 message(STATUS "Doxygen ${DOXYGEN_VERSION} and Graphviz found: ${DOXYGEN_EXECUTABLE}, ${DOXYGEN_DOT_EXECUTABLE}")
86 set(CAN_GENERATE_DOC TRUE)
87elseif(DOXYGEN_ONLY)
88 message(FATAL_ERROR "Doxygen and Graphviz not found. Cannot generate documentation")
89else()
90 message(STATUS "Doxygen and Graphviz not found. Disabling support for documentation generation")
91endif()
92
93# Doxygen documentation is always included
94add_subdirectory(doxygen)
95
96if(DEFINED DOXYGEN_ONLY AND DOXYGEN_ONLY)
97 # In this case we do not prepare targets for the rest, but for Doxygen only.
98 # This is useful because no checks are performed, and it means that Doxygen
99 # documentation can be generated on a relatively "dumb" server that has as
100 # requirements only cmake, doxygen and graphviz.
101 message(WARNING "Preparing build for Doxygen documentation only as requested. AliRoot will not be built!")
102else()
103
104 # Standard CMake inclusions and checks if we are actually building AliRoot,
105 # i.e. not only the documentation
106
107 # Checking first for DIM, DATE, AMORE and daqDA
108 # in case ROOT Extra static library needs to be enabled
109
110 # DATE
111 # date-config needs DIMDIR and ODIR set
112 # Setting variables in cache to be accesible by ccmake
113 set(DATE_CONFIG CACHE STRING "date-config script location")
114 set(DIMDIT CACHE STRING "dim installation folder")
115 set(ODIR CACHE STRING "dim plaform, usually \"linux\"")
116 if(DATE_CONFIG)
117 if(DIMDIR AND ODIR)
118 find_package(DATE)
119 else()
120 message(FATAL_ERROR "DATE enabled but no DIMDIR and ODIR set. Please set DIMDIR and ODIR")
121 endif()
122 endif()
123
124 # daqDA
125 # Setting variables in cache to be accesible by ccmake
126 set(daqDA CACHE STRING "daqDA library folder installation")
127 if(daqDA)
128 find_package(daqDA)
129 endif(daqDA)
130
131 # AMORE
132 # Setting variables in cache to be accesible by ccmake
133 set(AMORE_CONFIG CACHE STRING "amore-config script location")
134 if(AMORE_CONFIG)
135 if(ROOTSYS)
136 find_package(AMORE)
137 else()
138 message(FATAL_ERROR "AMORE enabled but no ROOTSYS defined")
139 endif()
140 endif(AMORE_CONFIG)
141
142 # id DARPM we enable DA if it is not set
143 # Setting variables in cache to be accesible by ccmake
144 set(DARPM CACHE STRING "Enable DARPM: ON")
145 set(DA CACHE STRING "Enable DA: ON")
146 if(DARPM)
147 if(NOT DA)
148 set(DA ON)
149 endif(NOT DA)
150 endif(DARPM)
151
152 # DA is enabled
153 # Setting variables in cache to be accesible by ccmake
154 set(ALIROOT_STATIC CACHE STRING "ENABLE static building of AliRoot: ON")
155 if(DA)
156 if(NOT DIMDIR AND NOT ODIR)
157 set(DA FALSE)
158 message(FATAL_ERROR "DAs enabled but no DIMDIR and ODIR set. Please set DIMDIR to DIM installation and ODIR to platform (default linux)")
159 endif()
160
161 if(NOT DATE_FOUND)
162 set(DA FALSE)
163 message(FATAL_ERROR "DAs enabled but no DATE support found. Please point to your date installation using \"DATE_CONFIG\" variable")
164 endif()
165
166 if(NOT daqDA_FOUND)
167 set(DA FALSE)
168 message(FATAL_ERROR "DAs enabled but no daqDA support found. Please point to your daqDA installation using \"daqDA\" variable")
169 endif()
170
171 if(NOT AMORE_FOUND)
172 set(DA FALSE)
173 message(FATAL_ERROR "DAs enabled but no AMORE support found. Please point to your AMORE installation using \"AMORE_CONFIG\" variable")
174 endif()
175
176 # Enable static libraries
177 set(ALIROOT_STATIC TRUE)
178 message(STATUS "DAs enabled")
179 endif(DA)
180
181 # MDC rpm creation enables the static build
182 # Setting variables in cache to be accesible by ccmake
183 set(MDCRPM CACHE STRING "Enable mdc rpm build")
184 if(MDCRPM)
185 set(ALIROOT_STATIC TRUE)
186 message(STATUS "AliMDC RPM enabled. AliRoot static build enabled")
187 endif(MDCRPM)
188
189 # ROOT configuration mandatory
190 # FindRoot has to be after the enabling of DA due to libRootExtra
191 # Do not put it above DA
192 # Setting variables in cache to be accesible by ccmake
193 set(ROOTSYS CACHE STRING "ROOT installation folder")
194 if(ROOTSYS)
195 find_package(ROOT REQUIRED)
196
197 # ROOT must be build with XML2 support
198 if(NOT ROOT_HASXML)
199 message(FATAL_ERROR "ROOT was not build with xml2 support. Please reinstall or rebuild ROOT with xml2 support")
200 endif(NOT ROOT_HASXML)
201 else()
202 message(FATAL_ERROR "ROOT installation not found!\nPlease point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR")
203 endif(ROOTSYS)
204
205 # ROOT dictionaries and maps
206 include(CMakeALICE)
207
208 # If no Fortran, i.e on Windows
209 # We need to specify ROOT fortran
210 # (f95 comes before gfortran in default module)
211 include(CheckLanguage)
212
213 if(ROOT_FORTRAN)
214 message(STATUS "Using the Fortran compiler defined by ROOT configuration: ${ROOT_FORTRAN}")
215 set(CMAKE_Fortran_COMPILER ${ROOT_FORTRAN})
216 else()
217 message(STATUS "Using default system Fortran compiler")
218 endif(ROOT_FORTRAN)
219
220 check_language(Fortran)
221 if(CMAKE_Fortran_COMPILER)
222 enable_language(Fortran OPTIONAL)
223 else()
224 message(STATUS "No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN, etc.")
225 endif()
226
227 # FastJet
228 find_package(FASTJET)
229
230 # ZEROMQ
231 find_package(ZeroMQ)
232
233 # Generating the AliRoot-config.cmake file
234 configure_file(${PROJECT_SOURCE_DIR}/cmake/AliRoot-config.cmake.in ${CMAKE_BINARY_DIR}/version/AliRoot-config.cmake @ONLY)
235 install(FILES ${PROJECT_BINARY_DIR}/version/AliRoot-config.cmake DESTINATION etc)
236
237 # General flags -> Should be moved into a configuration file
238 set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
239 set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE)
240
241 # List of modules for which PARfiles are enabled -- use the cache as global scope and clean it
242 set(ALIPARFILES "" CACHE INTERNAL "ALIPARFILES" FORCE)
243
244 # AliRoot base modules
245 add_subdirectory(STEER)
246 add_subdirectory(RAW)
247 add_subdirectory(ANALYSIS)
248
249 # Include Vc own cmake
250 include(Vc/Vc.cmake)
251 add_subdirectory(Vc)
252
253 # AliRoot common macros
254 add_subdirectory(macros)
255
256 # AliRoot modules
257 add_subdirectory(ACORDE)
258 add_subdirectory(AD)
259 add_subdirectory(BCM)
260 add_subdirectory(EMCAL)
261 add_subdirectory(EPOS)
262 add_subdirectory(EVE)
263 add_subdirectory(EVGEN)
264 add_subdirectory(FASTSIM)
265 add_subdirectory(FIT)
266 add_subdirectory(FMD)
267 add_subdirectory(HLT)
268 add_subdirectory(HMPID)
269 add_subdirectory(ITS)
270 add_subdirectory(MFT)
271 add_subdirectory(MONITOR)
272 add_subdirectory(MUON)
273 add_subdirectory(PHOS)
274 add_subdirectory(PMD)
275 add_subdirectory(PYTHIA8)
276 add_subdirectory(STARLIGHT)
277 add_subdirectory(STAT)
278 add_subdirectory(STRUCT)
279 add_subdirectory(T0)
280 add_subdirectory(TDPMjet)
281 add_subdirectory(TEvtGen)
282 add_subdirectory(THerwig)
283 add_subdirectory(TOF)
284 add_subdirectory(TPC)
285 add_subdirectory(TRD)
286 add_subdirectory(TRIGGER)
287 add_subdirectory(TTherminator)
288 add_subdirectory(VZERO)
289 add_subdirectory(ZDC)
290
291 # Fortran modules
292 if(CMAKE_Fortran_COMPILER)
293 add_subdirectory(DIME)
294 add_subdirectory(DPMJET)
295 add_subdirectory(HERWIG)
296 add_subdirectory(HIJING)
297 add_subdirectory(LHAPDF)
298 add_subdirectory(MICROCERN)
299 add_subdirectory(PYTHIA6)
300 add_subdirectory(TEPEMGEN)
301 add_subdirectory(THbtp)
302 add_subdirectory(THijing)
303 add_subdirectory(THydjet)
304 add_subdirectory(TPHIC)
305 add_subdirectory(TUHKMgen)
306 add_subdirectory(TAmpt)
307 endif(CMAKE_Fortran_COMPILER)
308
309 add_subdirectory(data)
310 add_subdirectory(GRP)
311 add_subdirectory(OCDB)
312 add_subdirectory(QAref)
313
314 # Enable SHUTTLE compilation
315 # Check if DIMDIR and ODIR are set
316 # # Setting variables in cache to be accesible by ccmake
317 set(SHUTTLE CACHE STRING "Enable SHUTTLE build : ON")
318 if(SHUTTLE)
319 if(ROOT_HASALIEN STREQUAL "no")
320 message(FATAL_ERROR "Shuttle needs ROOT build with AliEn support. Please build ROOT with AliEn support. Do not forget to set ALIEN to your AliEn installation")
321 endif()
322
323 if(DIMDIR AND ODIR AND ALIEN)
324 add_subdirectory(SHUTTLE)
325 else()
326 message(FATAL_ERROR "SHUTTLE enabled! Please specify DIMDIR, ODIR and ALIEN")
327 endif()
328 endif(SHUTTLE)
329
330 add_subdirectory(ALIROOT)
331
332 # List modules with PARfiles
333 string(REPLACE ";" " " ALIPARFILES_FLAT "${ALIPARFILES}")
334 message(STATUS "PARfile target enabled for the following modules: ${ALIPARFILES_FLAT}")
335
336 # Install Find macros for common packages to be further used by AliPhysics
337 install(FILES
338 cmake/CMakeALICE.cmake
339 cmake/FindROOT.cmake
340 cmake/FindFASTJET.cmake
341 cmake/FindZeroMQ.cmake
342 cmake/GetGitRevisionDescription.cmake
343 cmake/GetGitRevisionDescription.cmake.in
344 DESTINATION cmake)
345
346endif(DEFINED DOXYGEN_ONLY AND DOXYGEN_ONLY)