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(DIMDIT CACHE STRING "dim installation folder")
115 set(ODIR CACHE STRING "dim plaform, usually \"linux\"")
124 message(FATAL_ERROR "DATE enabled but no DIMDIR and ODIR set. Please set DIMDIR and ODIR")
128 # Setting variables in cache to be accesible by ccmake
129 set(daqDA CACHE STRING "daqDA library folder installation")
135 # Setting variables in cache to be accesible by ccmake
136 set(AMORE_CONFIG CACHE STRING "amore-config script location")
141 message(FATAL_ERROR "AMORE enabled but no ROOTSYS defined")
145 # id DARPM we enable DA if it is not set
146 # Setting variables in cache to be accesible by ccmake
147 set(DARPM CACHE STRING "Enable DARPM: ON")
148 set(DA CACHE STRING "Enable DA: ON")
156 # Setting variables in cache to be accesible by ccmake
157 set(ALIROOT_STATIC CACHE STRING "ENABLE static building of AliRoot: ON")
161 message(FATAL_ERROR "DAs enabled but no DIMDIR and ODIR set. Please set DIMDIR to DIM installation and ODIR to platform (default linux)")
166 message(FATAL_ERROR "DAs enabled but no DATE support found. Please point to your date installation using \"DATE_CONFIG\" variable")
171 message(FATAL_ERROR "DAs enabled but no daqDA support found. Please point to your daqDA installation using \"daqDA\" variable")
176 message(FATAL_ERROR "DAs enabled but no AMORE support found. Please point to your AMORE installation using \"AMORE_CONFIG\" variable")
179 # Enable static libraries
180 set(ALIROOT_STATIC TRUE)
181 message(STATUS "DAs enabled")
184 # MDC rpm creation enables the static build
185 # Setting variables in cache to be accesible by ccmake
186 set(MDCRPM CACHE STRING "Enable mdc rpm build")
188 set(ALIROOT_STATIC TRUE)
189 message(STATUS "AliMDC RPM enabled. AliRoot static build enabled")
192 # ROOT configuration mandatory
193 # FindRoot has to be after the enabling of DA due to libRootExtra
194 # Do not put it above DA
195 # Setting variables in cache to be accesible by ccmake
196 set(ROOTSYS CACHE STRING "ROOT installation folder")
198 find_package(ROOT REQUIRED)
200 # ROOT must be build with XML2 support
202 message(FATAL_ERROR "ROOT was not build with xml2 support. Please reinstall or rebuild ROOT with xml2 support")
203 endif(NOT ROOT_HASXML)
205 message(FATAL_ERROR "ROOT installation not found!\nPlease point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR")
208 # ROOT dictionaries and maps
211 # If no Fortran, i.e on Windows
212 # We need to specify ROOT fortran
213 # (f95 comes before gfortran in default module)
214 include(CheckLanguage)
217 message(STATUS "Using the Fortran compiler defined by ROOT configuration: ${ROOT_FORTRAN}")
218 set(CMAKE_Fortran_COMPILER ${ROOT_FORTRAN})
220 message(STATUS "Using default system Fortran compiler")
223 check_language(Fortran)
224 if(CMAKE_Fortran_COMPILER)
225 enable_language(Fortran OPTIONAL)
227 message(STATUS "No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN, etc.")
231 find_package(FASTJET)
236 # Generating the AliRoot-config.cmake file
237 configure_file(${PROJECT_SOURCE_DIR}/cmake/AliRoot-config.cmake.in ${CMAKE_BINARY_DIR}/version/AliRoot-config.cmake @ONLY)
238 install(FILES ${PROJECT_BINARY_DIR}/version/AliRoot-config.cmake DESTINATION etc)
240 # General flags -> Should be moved into a configuration file
241 set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
242 set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE)
244 # List of modules for which PARfiles are enabled -- use the cache as global scope and clean it
245 set(ALIPARFILES "" CACHE INTERNAL "ALIPARFILES" FORCE)
247 # AliRoot base modules
248 add_subdirectory(STEER)
249 add_subdirectory(RAW)
250 add_subdirectory(ANALYSIS)
252 # Include Vc own cmake
256 # AliRoot common macros
257 add_subdirectory(macros)
260 add_subdirectory(ACORDE)
262 add_subdirectory(BCM)
263 add_subdirectory(EMCAL)
264 add_subdirectory(EPOS)
265 add_subdirectory(EVE)
266 add_subdirectory(EVGEN)
267 add_subdirectory(FASTSIM)
268 add_subdirectory(FIT)
269 add_subdirectory(FMD)
270 add_subdirectory(HLT)
271 add_subdirectory(HMPID)
272 add_subdirectory(ITS)
273 add_subdirectory(MFT)
274 add_subdirectory(MONITOR)
275 add_subdirectory(MUON)
276 add_subdirectory(PHOS)
277 add_subdirectory(PMD)
278 add_subdirectory(PYTHIA8)
279 add_subdirectory(STARLIGHT)
280 add_subdirectory(STAT)
281 add_subdirectory(STRUCT)
283 add_subdirectory(TDPMjet)
284 add_subdirectory(TEvtGen)
285 add_subdirectory(THerwig)
286 add_subdirectory(TOF)
287 add_subdirectory(TPC)
288 add_subdirectory(TRD)
289 add_subdirectory(TRIGGER)
290 add_subdirectory(TTherminator)
291 add_subdirectory(VZERO)
292 add_subdirectory(ZDC)
295 if(CMAKE_Fortran_COMPILER)
296 add_subdirectory(DIME)
297 add_subdirectory(DPMJET)
298 add_subdirectory(HERWIG)
299 add_subdirectory(HIJING)
300 add_subdirectory(LHAPDF)
301 add_subdirectory(MICROCERN)
302 add_subdirectory(PYTHIA6)
303 add_subdirectory(TEPEMGEN)
304 add_subdirectory(THbtp)
305 add_subdirectory(THijing)
306 add_subdirectory(THydjet)
307 add_subdirectory(TPHIC)
308 add_subdirectory(TUHKMgen)
309 add_subdirectory(TAmpt)
310 endif(CMAKE_Fortran_COMPILER)
312 add_subdirectory(data)
313 add_subdirectory(GRP)
314 add_subdirectory(OCDB)
315 add_subdirectory(QAref)
317 # Enable SHUTTLE compilation
318 # Check if DIMDIR and ODIR are set
319 # # Setting variables in cache to be accesible by ccmake
320 set(SHUTTLE CACHE STRING "Enable SHUTTLE build : ON")
322 if(ROOT_HASALIEN STREQUAL "no")
323 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")
326 if(DIM_FOUND AND ALIEN)
327 add_subdirectory(SHUTTLE)
329 message(FATAL_ERROR "SHUTTLE enabled! Please specify DIMDIR, ODIR and ALIEN")
333 add_subdirectory(ALIROOT)
335 # List modules with PARfiles
336 string(REPLACE ";" " " ALIPARFILES_FLAT "${ALIPARFILES}")
337 message(STATUS "PARfile target enabled for the following modules: ${ALIPARFILES_FLAT}")
339 # Install Find macros for common packages to be further used by AliPhysics
341 cmake/CMakeALICE.cmake
343 cmake/FindFASTJET.cmake
344 cmake/FindZeroMQ.cmake
345 cmake/GetGitRevisionDescription.cmake
346 cmake/GetGitRevisionDescription.cmake.in
349 endif(DEFINED DOXYGEN_ONLY AND DOXYGEN_ONLY)