Update master to aliroot
[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(DIMDIR CACHE STRING "dim installation folder")
115 set(ODIR CACHE STRING "dim plaform, usually \"linux\"")
116
117 if(DIMDIR AND ODIR)
118 find_package(DIM)
119 endif()
120
121 if(DATE_CONFIG)
122 if(DIM_FOUND)
123 find_package(DATE)
124 else()
125 message(FATAL_ERROR "DATE enabled but no DIMDIR and ODIR set. Please set DIMDIR and ODIR")
126 endif()
127 endif()
128
129 # daqDA
130 # Setting variables in cache to be accesible by ccmake
131 set(daqDA CACHE STRING "daqDA library folder installation")
132 if(daqDA)
133 find_package(daqDA)
134 endif(daqDA)
135
136 # AMORE -> requires ROOT to be installed
137 # Setting variables in cache to be accesible by ccmake
138 set(AMORE_CONFIG CACHE STRING "amore-config script location")
139 if(AMORE_CONFIG)
140 if(ROOTSYS)
141 find_package(AMORE)
142 else()
143 message(FATAL_ERROR "AMORE enabled but no ROOTSYS defined")
144 endif()
145 endif(AMORE_CONFIG)
146
147 # id DARPM we enable DA if it is not set
148 # Setting variables in cache to be accesible by ccmake
149 set(DARPM CACHE STRING "Enable DARPM: ON")
150 set(DA CACHE STRING "Enable DA: ON")
151 if(DARPM)
152 if(NOT DA)
153 set(DA ON)
154 endif(NOT DA)
155 endif(DARPM)
156
157 # DA is enabled
158 # Setting variables in cache to be accesible by ccmake
159 set(ALIROOT_STATIC CACHE STRING "ENABLE static building of AliRoot: ON")
160 if(DA)
161 if(NOT DIM_FOUND)
162 set(DA FALSE)
163 message(FATAL_ERROR "DAs enabled but no DIMDIR and ODIR set. Please set DIMDIR to DIM installation and ODIR to platform (default linux)")
164 endif()
165
166 if(NOT DATE_FOUND)
167 set(DA FALSE)
168 message(FATAL_ERROR "DAs enabled but no DATE support found. Please point to your date installation using \"DATE_CONFIG\" variable")
169 endif()
170
171 if(NOT daqDA_FOUND)
172 set(DA FALSE)
173 message(FATAL_ERROR "DAs enabled but no daqDA support found. Please point to your daqDA installation using \"daqDA\" variable")
174 endif()
175
176 if(NOT AMORE_FOUND)
177 set(DA FALSE)
178 message(FATAL_ERROR "DAs enabled but no AMORE support found. Please point to your AMORE installation using \"AMORE_CONFIG\" variable")
179 endif()
180
181 # Enable static libraries
182 set(ALIROOT_STATIC TRUE)
183 message(STATUS "DAs enabled")
184 endif(DA)
185
186 # MDC rpm creation enables the static build
187 # Setting variables in cache to be accesible by ccmake
188 set(MDCRPM CACHE STRING "Enable mdc rpm build")
189 if(MDCRPM)
190 set(ALIROOT_STATIC TRUE)
191 message(STATUS "AliMDC RPM enabled. AliRoot static build enabled")
192 endif(MDCRPM)
193
194 # ROOT configuration mandatory
195 # FindRoot has to be after the enabling of DA due to libRootExtra
196 # Do not put it above DA
197 # Setting variables in cache to be accesible by ccmake
198 set(ROOTSYS CACHE STRING "ROOT installation folder")
199 if(ROOTSYS)
200 find_package(ROOT REQUIRED)
201
202 # ROOT must be build with XML2 support
203 if(NOT ROOT_HASXML)
204 message(FATAL_ERROR "ROOT was not build with xml2 support. Please reinstall or rebuild ROOT with xml2 support")
205 endif(NOT ROOT_HASXML)
206 else()
207 message(FATAL_ERROR "ROOT installation not found!\nPlease point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR")
208 endif(ROOTSYS)
209
210 # ROOT dictionaries and maps
211 include(CMakeALICE)
212
213 # If no Fortran, i.e on Windows
214 # We need to specify ROOT fortran
215 # (f95 comes before gfortran in default module)
216 include(CheckLanguage)
217
218 if(ROOT_FORTRAN)
219 message(STATUS "Using the Fortran compiler defined by ROOT configuration: ${ROOT_FORTRAN}")
220 set(CMAKE_Fortran_COMPILER ${ROOT_FORTRAN})
221 else()
222 message(STATUS "Using default system Fortran compiler")
223 endif(ROOT_FORTRAN)
224
225 check_language(Fortran)
226 if(CMAKE_Fortran_COMPILER)
227 enable_language(Fortran OPTIONAL)
228 else()
229 message(STATUS "No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN, etc.")
230 endif()
231
232 # FastJet
233 find_package(FASTJET)
234
235 # ZEROMQ
236 find_package(ZeroMQ)
237
238 # Generating the AliRoot-config.cmake file
239 configure_file(${PROJECT_SOURCE_DIR}/cmake/AliRoot-config.cmake.in ${CMAKE_BINARY_DIR}/version/AliRoot-config.cmake @ONLY)
240 install(FILES ${PROJECT_BINARY_DIR}/version/AliRoot-config.cmake DESTINATION etc)
241
242 # General flags -> Should be moved into a configuration file
243 set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
244 set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE)
245
246 # List of modules for which PARfiles are enabled -- use the cache as global scope and clean it
247 set(ALIPARFILES "" CACHE INTERNAL "ALIPARFILES" FORCE)
248
249 # AliRoot base modules
250 add_subdirectory(STEER)
251 add_subdirectory(RAW)
252 add_subdirectory(ANALYSIS)
253
254 # Include Vc own cmake
255 include(Vc/Vc.cmake)
256 add_subdirectory(Vc)
257
258 # AliRoot common macros
259 add_subdirectory(macros)
260
261 # AliRoot modules
262 add_subdirectory(ACORDE)
263 add_subdirectory(AD)
264 add_subdirectory(BCM)
265 add_subdirectory(EMCAL)
266 add_subdirectory(EPOS)
267 add_subdirectory(EVE)
268 add_subdirectory(EVGEN)
269 add_subdirectory(FASTSIM)
270 add_subdirectory(FIT)
271 add_subdirectory(FMD)
272 add_subdirectory(HLT)
273 add_subdirectory(HMPID)
274 add_subdirectory(ITS)
275 add_subdirectory(MFT)
276 add_subdirectory(MONITOR)
277 add_subdirectory(MUON)
278 add_subdirectory(PHOS)
279 add_subdirectory(PMD)
280 add_subdirectory(PYTHIA8)
281 add_subdirectory(STARLIGHT)
282 add_subdirectory(STAT)
283 add_subdirectory(STRUCT)
284 add_subdirectory(T0)
285 add_subdirectory(TDPMjet)
286 add_subdirectory(TEvtGen)
287 add_subdirectory(THerwig)
288 add_subdirectory(TOF)
289 add_subdirectory(TPC)
290 add_subdirectory(TRD)
291 add_subdirectory(TRIGGER)
292 add_subdirectory(TTherminator)
293 add_subdirectory(VZERO)
294 add_subdirectory(ZDC)
295
296 # Fortran modules
297 if(CMAKE_Fortran_COMPILER)
298 add_subdirectory(DIME)
299 add_subdirectory(DPMJET)
300 add_subdirectory(HERWIG)
301 add_subdirectory(HIJING)
302 add_subdirectory(LHAPDF)
303 add_subdirectory(MICROCERN)
304 add_subdirectory(PYTHIA6)
305 add_subdirectory(TEPEMGEN)
306 add_subdirectory(THbtp)
307 add_subdirectory(THijing)
308 add_subdirectory(THydjet)
309 add_subdirectory(TPHIC)
310 add_subdirectory(TUHKMgen)
311 add_subdirectory(TAmpt)
312 endif(CMAKE_Fortran_COMPILER)
313
314 add_subdirectory(data)
315 add_subdirectory(GRP)
316 add_subdirectory(OCDB)
317 add_subdirectory(QAref)
318
319 # Enable SHUTTLE compilation
320 # Check if DIMDIR and ODIR are set
321 # # Setting variables in cache to be accesible by ccmake
322 set(SHUTTLE CACHE STRING "Enable SHUTTLE build : ON")
323 if(SHUTTLE)
324 if(NOT ROOT_HASMONALISA)
325 message(FATAL_ERROR "ROOT was not build with MonAlisa support")
326 endif()
327
328 find_package(ApMon)
329
330 if(ROOT_HASALIEN STREQUAL "no")
331 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")
332 endif()
333
334 if(DIM_FOUND AND ALIEN)
335 add_subdirectory(SHUTTLE)
336 else()
337 message(FATAL_ERROR "SHUTTLE enabled! Please specify DIMDIR, ODIR and ALIEN")
338 endif()
339 endif(SHUTTLE)
340
341 add_subdirectory(ALIROOT)
342
343 # List modules with PARfiles
344 string(REPLACE ";" " " ALIPARFILES_FLAT "${ALIPARFILES}")
345 message(STATUS "PARfile target enabled for the following modules: ${ALIPARFILES_FLAT}")
346
347 # Install Find macros for common packages to be further used by AliPhysics
348 install(FILES
349 cmake/CMakeALICE.cmake
350 cmake/FindROOT.cmake
351 cmake/FindFASTJET.cmake
352 cmake/FindZeroMQ.cmake
353 cmake/GetGitRevisionDescription.cmake
354 cmake/GetGitRevisionDescription.cmake.in
355 DESTINATION cmake)
356
357endif(DEFINED DOXYGEN_ONLY AND DOXYGEN_ONLY)