1 # **************************************************************************
2 # * Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. *
4 # * Author: The ALICE Off-line Project. *
5 # * Contributors are mentioned in the code where appropriate. *
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 # **************************************************************************
16 #--------------------------------------------------------------------------#
17 # Set Basic CMake Configuration #
18 #--------------------------------------------------------------------------#
20 cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR)
22 ### CMP0025 Compiler id for Apple Clang is now AppleClang.
23 ### CMP0042 MACOSX_RPATH is enabled by default.
30 cmake_policy(SET ${p} NEW)
34 project(AliRoot CXX C)
36 message(STATUS "CMake platform: ${CMAKE_SYSTEM}")
37 message(STATUS "Build folder: ${AliRoot_BINARY_DIR}")
38 message(STATUS "Source folder: ${AliRoot_SOURCE_DIR}")
39 message(STATUS "Installation folder: ${CMAKE_INSTALL_PREFIX}")
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"
43 set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
44 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
46 # You can change the build type using
47 # cmake -DCMAKE_BUILD_TYPE=DEBUG | RELEASE | RELWITHDEBINFO | MINSIZEREL ...
48 if (NOT CMAKE_BUILD_TYPE)
49 set(CMAKE_BUILD_TYPE RELWITHDEBINFO)
50 endif(NOT CMAKE_BUILD_TYPE)
51 message(STATUS "Build type: ${CMAKE_BUILD_TYPE} (${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}})")
53 if(CMAKE_INSTALL_PREFIX STREQUAL "${AliRoot_SOURCE_DIR}")
54 message(FATAL_ERROR "Please choose a different installation point than the source tree!")
57 # Path to additonal modules
58 set(CMAKE_MODULE_PATH "${AliRoot_SOURCE_DIR}/cmake")
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
68 include(CheckGitVersion)
70 # - CLANG_MAJOR.CLANG_MINOR or
71 # - GCC_MAJOR.GCC_MINOR.GCC_PATCH
72 include(CheckCompiler)
74 # Utility to generate PARfiles
75 include(cmake/GenParFile.cmake)
77 # Shared library suffix
78 if (NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
79 set(CMAKE_SHARED_LIBRARY_SUFFIX .so)
80 endif (NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
82 # Optional: Doxygen for reference doc generation
84 if(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)
88 message(FATAL_ERROR "Doxygen and Graphviz not found. Cannot generate documentation")
90 message(STATUS "Doxygen and Graphviz not found. Disabling support for documentation generation")
93 # Doxygen documentation is always included
94 add_subdirectory(doxygen)
96 if(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!")
104 # Standard CMake inclusions and checks if we are actually building AliRoot,
105 # i.e. not only the documentation
107 # Checking first for DIM, DATE, AMORE and daqDA
108 # in case ROOT Extra static library needs to be enabled
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\"")
125 message(FATAL_ERROR "DATE enabled but no DIMDIR and ODIR set. Please set DIMDIR and ODIR")
130 # Setting variables in cache to be accesible by ccmake
131 set(daqDA CACHE STRING "daqDA library folder installation")
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")
143 message(FATAL_ERROR "AMORE enabled but no ROOTSYS defined")
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")
158 # Setting variables in cache to be accesible by ccmake
159 set(ALIROOT_STATIC CACHE STRING "ENABLE static building of AliRoot: ON")
163 message(FATAL_ERROR "DAs enabled but no DIMDIR and ODIR set. Please set DIMDIR to DIM installation and ODIR to platform (default linux)")
168 message(FATAL_ERROR "DAs enabled but no DATE support found. Please point to your date installation using \"DATE_CONFIG\" variable")
173 message(FATAL_ERROR "DAs enabled but no daqDA support found. Please point to your daqDA installation using \"daqDA\" variable")
178 message(FATAL_ERROR "DAs enabled but no AMORE support found. Please point to your AMORE installation using \"AMORE_CONFIG\" variable")
181 # Enable static libraries
182 set(ALIROOT_STATIC TRUE)
183 message(STATUS "DAs enabled")
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")
190 set(ALIROOT_STATIC TRUE)
191 message(STATUS "AliMDC RPM enabled. AliRoot static build enabled")
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")
200 find_package(ROOT REQUIRED)
202 # ROOT must be build with XML2 support
204 message(FATAL_ERROR "ROOT was not build with xml2 support. Please reinstall or rebuild ROOT with xml2 support")
205 endif(NOT ROOT_HASXML)
207 message(FATAL_ERROR "ROOT installation not found!\nPlease point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR")
210 # ROOT dictionaries and maps
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)
219 message(STATUS "Using the Fortran compiler defined by ROOT configuration: ${ROOT_FORTRAN}")
220 set(CMAKE_Fortran_COMPILER ${ROOT_FORTRAN})
222 message(STATUS "Using default system Fortran compiler")
225 check_language(Fortran)
226 if(CMAKE_Fortran_COMPILER)
227 enable_language(Fortran OPTIONAL)
229 message(STATUS "No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN, etc.")
233 find_package(FASTJET)
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)
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)
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)
249 # AliRoot base modules
250 add_subdirectory(STEER)
251 add_subdirectory(RAW)
252 add_subdirectory(ANALYSIS)
254 # Include Vc own cmake
258 # AliRoot common macros
259 add_subdirectory(macros)
262 add_subdirectory(ACORDE)
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)
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)
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)
314 add_subdirectory(data)
315 add_subdirectory(GRP)
316 add_subdirectory(OCDB)
317 add_subdirectory(QAref)
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")
324 if(NOT ROOT_HASMONALISA)
325 message(FATAL_ERROR "ROOT was not build with MonAlisa support")
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")
334 if(DIM_FOUND AND ALIEN)
335 add_subdirectory(SHUTTLE)
337 message(FATAL_ERROR "SHUTTLE enabled! Please specify DIMDIR, ODIR and ALIEN")
341 add_subdirectory(ALIROOT)
343 # List modules with PARfiles
344 string(REPLACE ";" " " ALIPARFILES_FLAT "${ALIPARFILES}")
345 message(STATUS "PARfile target enabled for the following modules: ${ALIPARFILES_FLAT}")
347 # Install Find macros for common packages to be further used by AliPhysics
349 cmake/CMakeALICE.cmake
351 cmake/FindFASTJET.cmake
352 cmake/FindZeroMQ.cmake
353 cmake/GetGitRevisionDescription.cmake
354 cmake/GetGitRevisionDescription.cmake.in
357 endif(DEFINED DOXYGEN_ONLY AND DOXYGEN_ONLY)