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 project(AliRoot CXX C)
24 message(STATUS "CMake platform: ${CMAKE_SYSTEM}")
25 message(STATUS "Build folder: ${AliRoot_BINARY_DIR}")
26 message(STATUS "Source folder: ${AliRoot_SOURCE_DIR}")
27 message(STATUS "Installation folder: ${CMAKE_INSTALL_PREFIX}")
29 # CMake supports different build types by default. We want the DEBUG build type
30 # to have "-g -O0" flags: by default it only has "-g"
31 set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
32 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
34 # You can change the build type using
35 # cmake -DCMAKE_BUILD_TYPE=DEBUG | RELEASE | RELWITHDEBINFO | MINSIZEREL ...
36 if (NOT CMAKE_BUILD_TYPE)
37 set(CMAKE_BUILD_TYPE RELWITHDEBINFO)
38 endif(NOT CMAKE_BUILD_TYPE)
39 message(STATUS "Build type: ${CMAKE_BUILD_TYPE} (${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}})")
41 if(CMAKE_INSTALL_PREFIX STREQUAL "${AliRoot_SOURCE_DIR}")
42 message(FATAL_ERROR "Please choose a different installation point than the source tree!")
45 # Path to additonal modules
46 set(CMAKE_MODULE_PATH "${AliRoot_SOURCE_DIR}/cmake")
48 # AliRoot version extracted from Git repository
49 # Sets 4 git variables
50 # - GIT_REFSPEC - complete name of the current reference
51 # - ALIROOT_BRANCH - name of the branch or tag extracted from the current reference
52 # - GIT_SHA1 - current hash in the long format
53 # - GIT_SHORT_SHA1 - current hash in the short format
54 # - ALIROOT_VERSION = ALIROOT_BRANCH
55 # - ALIROOT_REVISION = GIT_SHORT_SHA1
56 include(CheckGitVersion)
58 # - CLANG_MAJOR.CLANG_MINOR or
59 # - GCC_MAJOR.GCC_MINOR.GCC_PATCH
60 include(CheckCompiler)
62 # Utility to generate PARfiles
63 include(cmake/GenParFile.cmake)
65 # Shared library suffix
66 if (NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
67 set(CMAKE_SHARED_LIBRARY_SUFFIX .so)
68 endif (NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
70 # Checking first for DIM, DATE, AMORE and daqDA
71 # in case ROOT Extra static library needs to be enabled
74 # date-config needs DIMDIR and ODIR set
75 # Setting variables in cache to be accesible by ccmake
76 set(DATE_CONFIG CACHE STRING "date-config script location")
77 set(DIMDIT CACHE STRING "dim installation folder")
78 set(ODIR CACHE STRING "dim plaform, usually \"linux\"")
83 message(FATAL_ERROR "DATE enabled but no DIMDIR and ODIR set. Please set DIMDIR and ODIR")
88 # Setting variables in cache to be accesible by ccmake
89 set(daqDA CACHE STRING "daqDA library folder installation")
95 # Setting variables in cache to be accesible by ccmake
96 set(AMORE_CONFIG CACHE STRING "amore-config script location")
101 message(FATAL_ERROR "AMORE enabled but no ROOTSYS defined")
105 # id DARPM we enable DA if it is not set
106 # Setting variables in cache to be accesible by ccmake
107 set(DARPM CACHE STRING "Enable DARPM: ON")
108 set(DA CACHE STRING "Enable DA: ON")
116 # Setting variables in cache to be accesible by ccmake
117 set(ALIROOT_STATIC CACHE STRING "ENABLE static building of AliRoot: ON")
119 if(NOT DIMDIR AND NOT ODIR)
121 message(FATAL_ERROR "DAs enabled but no DIMDIR and ODIR set. Please set DIMDIR to DIM installation and ODIR to platform (default linux)")
126 message(FATAL_ERROR "DAs enabled but no DATE support found. Please point to your date installation using \"DATE_CONFIG\" variable")
131 message(FATAL_ERROR "DAs enabled but no daqDA support found. Please point to your daqDA installation using \"daqDA\" variable")
136 message(FATAL_ERROR "DAs enabled but no AMORE support found. Please point to your AMORE installation using \"AMORE_CONFIG\" variable")
139 # Enable static libraries
140 set(ALIROOT_STATIC TRUE)
141 message(STATUS "DAs enabled")
144 # MDC rpm creation enables the static build
145 # Setting variables in cache to be accesible by ccmake
146 set(MDCRPM CACHE STRING "Enable mdc rpm build")
148 set(ALIROOT_STATIC TRUE)
149 message(STATUS "AliMDC RPM enabled. AliRoot static build enabled")
152 # ROOT configuration mandatory
153 # FindRoot has to be after the enabling of DA due to libRootExtra
154 # Do not put it above DA
155 # Setting variables in cache to be accesible by ccmake
156 set(ROOTSYS CACHE STRING "ROOT installation folder")
158 find_package(ROOT REQUIRED)
160 # ROOT must be build with XML2 support
162 message(FATAL_ERROR "ROOT was not build with xml2 support. Please reinstall or rebuild ROOT with xml2 support")
163 endif(NOT ROOT_HASXML)
165 message(FATAL_ERROR "ROOT installation not found!\nPlease point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR")
168 # ROOT dictionaries and maps
172 # If no Fortran, i.e on Windows
173 # We need to specify ROOT fortran
174 # (f95 comes before gfortran in default module)
175 include(CheckLanguage)
178 message(STATUS "Using the Fortran compiler defined by ROOT configuration: ${ROOT_FORTRAN}")
179 set(CMAKE_Fortran_COMPILER ${ROOT_FORTRAN})
181 message(STATUS "Using default system Fortran compiler")
184 check_language(Fortran)
185 if(CMAKE_Fortran_COMPILER)
186 enable_language(Fortran OPTIONAL)
188 message(STATUS "No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN, etc.")
191 # Optional: Doxygen for reference doc generation
192 find_package(Doxygen)
193 if(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
194 message(STATUS "Doxygen ${DOXYGEN_VERSION} and Graphviz found: ${DOXYGEN_EXECUTABLE}, ${DOXYGEN_DOT_EXECUTABLE}")
195 set(CAN_GENERATE_DOC TRUE)
197 message(STATUS "Doxygen and Graphviz not found. Disabling support for documentation generation")
198 endif(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
201 find_package(FASTJET)
206 # Generating the AliRoot-config.cmake file
207 configure_file(${PROJECT_SOURCE_DIR}/cmake/AliRoot-config.cmake.in ${CMAKE_BINARY_DIR}/version/AliRoot-config.cmake @ONLY)
208 install(FILES ${PROJECT_BINARY_DIR}/version/AliRoot-config.cmake DESTINATION etc)
210 # General flags -> Should be moved into a configuration file
211 set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
212 set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE)
214 # List of modules for which PARfiles are enabled -- use the cache as global scope and clean it
215 set(ALIPARFILES "" CACHE INTERNAL "ALIPARFILES" FORCE)
217 # AliRoot base modules
218 add_subdirectory(STEER)
219 add_subdirectory(RAW)
220 add_subdirectory(ANALYSIS)
222 # Include Vc own cmake
226 # AliRoot common macros
227 add_subdirectory(macros)
230 add_subdirectory(ACORDE)
232 add_subdirectory(BCM)
233 add_subdirectory(EMCAL)
234 add_subdirectory(EPOS)
235 add_subdirectory(EVE)
236 add_subdirectory(EVGEN)
237 add_subdirectory(FASTSIM)
238 add_subdirectory(FIT)
239 add_subdirectory(FMD)
240 add_subdirectory(HLT)
241 add_subdirectory(HMPID)
242 add_subdirectory(ITS)
243 add_subdirectory(MFT)
244 add_subdirectory(MONITOR)
245 add_subdirectory(MUON)
246 add_subdirectory(PHOS)
247 add_subdirectory(PMD)
248 add_subdirectory(PYTHIA8)
249 add_subdirectory(STARLIGHT)
250 add_subdirectory(STAT)
251 add_subdirectory(STRUCT)
253 add_subdirectory(TDPMjet)
254 add_subdirectory(TEvtGen)
255 add_subdirectory(THerwig)
256 add_subdirectory(TOF)
257 add_subdirectory(TPC)
258 add_subdirectory(TRD)
259 add_subdirectory(TRIGGER)
260 add_subdirectory(TTherminator)
261 add_subdirectory(VZERO)
262 add_subdirectory(ZDC)
263 add_subdirectory(doxygen)
266 if(CMAKE_Fortran_COMPILER)
267 add_subdirectory(DIME)
268 add_subdirectory(DPMJET)
269 add_subdirectory(HERWIG)
270 add_subdirectory(HIJING)
271 add_subdirectory(LHAPDF)
272 add_subdirectory(MICROCERN)
273 add_subdirectory(PYTHIA6)
274 add_subdirectory(TEPEMGEN)
275 add_subdirectory(THbtp)
276 add_subdirectory(THijing)
277 add_subdirectory(THydjet)
278 add_subdirectory(TPHIC)
279 add_subdirectory(TUHKMgen)
280 add_subdirectory(TAmpt)
281 endif(CMAKE_Fortran_COMPILER)
283 add_subdirectory(data)
284 add_subdirectory(GRP)
285 add_subdirectory(OCDB)
286 add_subdirectory(QAref)
288 # Enable SHUTTLE compilation
289 # Check if DIMDIR and ODIR are set
290 # # Setting variables in cache to be accesible by ccmake
291 set(SHUTTLE CACHE STRING "Enable SHUTTLE build : ON")
293 if(ROOT_HASALIEN STREQUAL "no")
294 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")
297 if(DIMDIR AND ODIR AND ALIEN)
298 add_subdirectory(SHUTTLE)
300 message(FATAL_ERROR "SHUTTLE enabled! Please specify DIMDIR, ODIR and ALIEN")
304 add_subdirectory(ALIROOT)
306 # List modules with PARfiles
307 string(REPLACE ";" " " ALIPARFILES_FLAT "${ALIPARFILES}")
308 message(STATUS "PARfile target enabled for the following modules: ${ALIPARFILES_FLAT}")
310 # Install Find macros for common packages to be further used by AliPhysics
312 cmake/CMakeALICE.cmake
314 cmake/FindFASTJET.cmake
315 cmake/FindZeroMQ.cmake
316 cmake/GetGitRevisionDescription.cmake
317 cmake/GetGitRevisionDescription.cmake.in