CMake: export ROOT's C++ flags, libc++ and C++11
[u/mrichter/AliRoot.git] / CMakeLists.txt
CommitLineData
d50827fc 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#--------------------------------------------------------------------------#
e969a926 19
139cbc46 20cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR)
e969a926 21
d50827fc 22project(AliRoot CXX C)
bf4c2121 23
04484146 24message(STATUS "CMake platform: ${CMAKE_SYSTEM}")
25message(STATUS "Build folder: ${AliRoot_BINARY_DIR}")
26message(STATUS "Source folder: ${AliRoot_SOURCE_DIR}")
27message(STATUS "Installation folder: ${CMAKE_INSTALL_PREFIX}")
34ab4e08 28
29# You can change the build type using
30# cmake -DCMAKE_BUILD_TYPE=DEBUG | RELEASE | RELWITHDEBINFO | MINSIZEREL ...
31if (NOT CMAKE_BUILD_TYPE)
32 set(CMAKE_BUILD_TYPE RELWITHDEBINFO)
33endif(NOT CMAKE_BUILD_TYPE)
34message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
35
04484146 36
37if(CMAKE_INSTALL_PREFIX STREQUAL "${AliRoot_SOURCE_DIR}")
38 message(FATAL_ERROR "Please choose a different installation point than the source tree!")
39endif()
40
d50827fc 41# Path to additonal modules
c2f9135f 42set(CMAKE_MODULE_PATH "${AliRoot_SOURCE_DIR}/cmake")
43
44# AliRoot version extracted from Git repository
45# Sets 4 git variables
46# - GIT_REFSPEC - complete name of the current reference
47# - ALIROOT_BRANCH - name of the branch or tag extracted from the current reference
48# - GIT_SHA1 - current hash in the long format
49# - GIT_SHORT_SHA1 - current hash in the short format
50# - ALIROOT_VERSION = ALIROOT_BRANCH
51# - ALIROOT_REVISION = GIT_SHORT_SHA1
52include(CheckGitVersion)
b22a7396 53
54# - CLANG_MAJOR.CLANG_MINOR or
55# - GCC_MAJOR.GCC_MINOR.GCC_PATCH
56include(CheckCompiler)
57
b24da1d3 58# Utility to generate PARfiles
59include(cmake/GenParFile.cmake)
60
34ab4e08 61# Shared library suffix
0e5d2ccd 62if (NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
34ab4e08 63 set(CMAKE_SHARED_LIBRARY_SUFFIX .so)
0e5d2ccd 64endif (NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
c4faffc2 65
f82bfa66 66# Checking first for DIM, DATE, AMORE and daqDA
67# in case ROOT Extra static library needs to be enabled
68
69# DATE
ec8c8ea6 70# date-config needs DIMDIR and ODIR set
9f4ff23c 71# Setting variables in cache to be accesible by ccmake
72set(DATE_CONFIG CACHE STRING "date-config script location")
73set(DIMDIT CACHE STRING "dim installation folder")
74set(ODIR CACHE STRING "dim plaform, usually \"linux\"")
f82bfa66 75if(DATE_CONFIG)
ec8c8ea6 76 if(DIMDIR AND ODIR)
77 find_package(DATE)
78 else()
79 message(FATAL_ERROR "DATE enabled but no DIMDIR and ODIR set. Please set DIMDIR and ODIR")
80 endif()
81endif()
f82bfa66 82
83# daqDA
9f4ff23c 84# Setting variables in cache to be accesible by ccmake
85set(daqDA CACHE STRING "daqDA library folder installation")
f82bfa66 86if(daqDA)
87 find_package(daqDA)
88endif(daqDA)
89
90# AMORE
9f4ff23c 91# Setting variables in cache to be accesible by ccmake
92set(AMORE_CONFIG CACHE STRING "amore-config script location")
f82bfa66 93if(AMORE_CONFIG)
ec8c8ea6 94 if(ROOTSYS)
95 find_package(AMORE)
96 else()
97 message(FATAL_ERROR "AMORE enabled but no ROOTSYS defined")
98 endif()
f82bfa66 99endif(AMORE_CONFIG)
100
168930f9 101# id DARPM we enable DA if it is not set
9f4ff23c 102# Setting variables in cache to be accesible by ccmake
103set(DARPM CACHE STRING "Enable DARPM: ON")
104set(DA CACHE STRING "Enable DA: ON")
168930f9 105if(DARPM)
106 if(NOT DA)
107 set(DA ON)
108 endif(NOT DA)
109endif(DARPM)
110
f82bfa66 111# DA is enabled
9f4ff23c 112# Setting variables in cache to be accesible by ccmake
113set(ALIROOT_STATIC CACHE STRING "ENABLE static building of AliRoot: ON")
f82bfa66 114if(DA)
115 if(NOT DIMDIR AND NOT ODIR)
116 set(DA FALSE)
117 message(FATAL_ERROR "Das enabled but no DIMDIR and ODIR set. Please set DIMDIR to DIM installation and ODIR to platform (default linux)")
118 endif()
119
120 if(NOT DATE_FOUND)
121 set(DA FALSE)
122 message(FATAL_ERROR "DAs enabled but no DATE support found. Please point to your date installation using \"DATE_CONFIG\" variable")
123 endif()
124
125 if(NOT daqDA_FOUND)
126 set(DA FALSE)
127 message(FATAL_ERROR "DAs enabled but no daqDA support found. Please point to your daqDA installation using \"daqDA\" variable")
128 endif()
129
130 if(NOT AMORE_FOUND)
131 set(DA FALSE)
132 message(FATAL_ERROR "DAs enabled but no AMORE support found. Please point to your AMORE installation using \"AMORE_CONFIG\" variable")
133 endif()
134
135 # Enable static libraries
136 set(ALIROOT_STATIC TRUE)
137 message(STATUS "DAs enabled")
138endif(DA)
139
fae85bcc 140# MDC rpm creation enables the static build
9f4ff23c 141# Setting variables in cache to be accesible by ccmake
142set(MDCRPM CACHE STRING "Enable mdc rpm build")
fae85bcc 143if(MDCRPM)
144 set(ALIROOT_STATIC TRUE)
145 message(STATUS "AliMDC RPM enabled. AliRoot static build enabled")
146endif(MDCRPM)
147
7c325e0b 148# ROOT configuration mandatory
149# FindRoot has to be after the enabling of DA due to libRootExtra
150# Do not put it above DA
9f4ff23c 151# Setting variables in cache to be accesible by ccmake
152set(ROOTSYS CACHE STRING "ROOT installation folder")
7c325e0b 153if(ROOTSYS)
154 find_package(ROOT REQUIRED)
155
156 # ROOT must be build with XML2 support
157 if(NOT ROOT_HASXML)
158 message(FATAL_ERROR "ROOT was not build with xml2 support. Please reinstall or rebuild ROOT with xml2 support")
159 endif(NOT ROOT_HASXML)
160else()
161 message(FATAL_ERROR "ROOT installation not found!\nPlease point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR")
162endif(ROOTSYS)
163
164# ROOT dictionaries and maps
165include(CMakeALICE)
166
167
1dbe1076 168# If no Fortran, i.e on Windows
169# We need to specify ROOT fortran
170# (f95 comes before gfortran in default module)
171include(CheckLanguage)
172
173if(ROOT_FORTRAN)
174 message(STATUS "Using the Fortran compiler defined by ROOT configuration: ${ROOT_FORTRAN}")
175 set(CMAKE_Fortran_COMPILER ${ROOT_FORTRAN})
176else()
177 message(STATUS "Using default system Fortran compiler")
178endif(ROOT_FORTRAN)
179
180check_language(Fortran)
181if(CMAKE_Fortran_COMPILER)
182 enable_language(Fortran OPTIONAL)
183else()
f82bfa66 184 message(STATUS "No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN, etc.")
1dbe1076 185endif()
186
a2a27b4c 187# Optional: Doxygen for reference doc generation
188find_package(Doxygen)
189if(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
190 message(STATUS "Doxygen ${DOXYGEN_VERSION} and Graphviz found: ${DOXYGEN_EXECUTABLE}, ${DOXYGEN_DOT_EXECUTABLE}")
191 set(CAN_GENERATE_DOC TRUE)
192else()
193 message(STATUS "Doxygen and Graphviz not found. Disabling support for documentation generation")
194endif(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
195
b5576c4e 196# FastJet
197find_package(FASTJET)
198
3c77e1ef 199# ZEROMQ
200find_package(ZeroMQ)
201
fb0ae393 202# Generating the AliRoot-config.cmake file
203configure_file(${PROJECT_SOURCE_DIR}/cmake/AliRoot-config.cmake.in ${CMAKE_BINARY_DIR}/version/AliRoot-config.cmake @ONLY)
7187fc7f 204install(FILES ${PROJECT_BINARY_DIR}/version/AliRoot-config.cmake DESTINATION etc)
fb0ae393 205
4d31eb1c 206# General flags -> Should be moved into a configuration file
207set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
139cbc46 208set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE)
d50827fc 209
9596d7e9 210# List of modules for which PARfiles are enabled -- use the cache as global scope and clean it
211set(ALIPARFILES "" CACHE INTERNAL "ALIPARFILES" FORCE)
212
63697604 213# AliRoot base modules
17f9c1f8 214add_subdirectory(STEER)
17f9c1f8 215add_subdirectory(RAW)
63697604 216add_subdirectory(ANALYSIS)
217
218# Include Vc own cmake
219include(Vc/Vc.cmake)
220add_subdirectory(Vc)
221
9815baac 222# AliRoot common macros
223add_subdirectory(macros)
224
63697604 225# AliRoot modules
226add_subdirectory(ACORDE)
227add_subdirectory(AD)
228add_subdirectory(BCM)
63697604 229add_subdirectory(EMCAL)
9d62600c 230add_subdirectory(EPOS)
63697604 231add_subdirectory(EVE)
232add_subdirectory(EVGEN)
233add_subdirectory(FASTSIM)
234add_subdirectory(FIT)
235add_subdirectory(FMD)
236add_subdirectory(HLT)
237add_subdirectory(HMPID)
17f9c1f8 238add_subdirectory(ITS)
80afaccc 239add_subdirectory(MFT)
63697604 240add_subdirectory(MONITOR)
241add_subdirectory(MUON)
63697604 242add_subdirectory(PHOS)
243add_subdirectory(PMD)
a31c2f7d 244add_subdirectory(PYTHIA8)
63697604 245add_subdirectory(STARLIGHT)
246add_subdirectory(STAT)
247add_subdirectory(STRUCT)
97e8d2a8 248add_subdirectory(T0)
72017ac8 249add_subdirectory(TDPMjet)
e706c082 250add_subdirectory(TEvtGen)
16765dcc 251add_subdirectory(THerwig)
97e8d2a8 252add_subdirectory(TOF)
63697604 253add_subdirectory(TPC)
97e8d2a8 254add_subdirectory(TRD)
25f88fb9 255add_subdirectory(TRIGGER)
63697604 256add_subdirectory(TTherminator)
257add_subdirectory(VZERO)
258add_subdirectory(ZDC)
a2a27b4c 259add_subdirectory(doxygen)
67018bf4 260
63697604 261# Fortran modules
1dbe1076 262if(CMAKE_Fortran_COMPILER)
c462af85 263 add_subdirectory(DIME)
264 add_subdirectory(DPMJET)
64609fcd 265 add_subdirectory(HERWIG)
63697604 266 add_subdirectory(HIJING)
116e4267 267 add_subdirectory(LHAPDF)
116e4267 268 add_subdirectory(MICROCERN)
63697604 269 add_subdirectory(PYTHIA6)
ba812042 270 add_subdirectory(TEPEMGEN)
27b08c46 271 add_subdirectory(THbtp)
a95d9137 272 add_subdirectory(THijing)
63697604 273 add_subdirectory(THydjet)
274 add_subdirectory(TPHIC)
275 add_subdirectory(TUHKMgen)
9b863d49 276 add_subdirectory(TAmpt)
1dbe1076 277endif(CMAKE_Fortran_COMPILER)
67018bf4 278
7c29eb0f 279add_subdirectory(data)
71f72706 280add_subdirectory(GRP)
807153f0 281add_subdirectory(OCDB)
282add_subdirectory(QAref)
808c7763 283
67018bf4 284# Enable SHUTTLE compilation
285# Check if DIMDIR and ODIR are set
9f4ff23c 286# # Setting variables in cache to be accesible by ccmake
287set(SHUTTLE CACHE STRING "Enable SHUTTLE build : ON")
67018bf4 288if(SHUTTLE)
101cc341 289 if(ROOT_HASALIEN STREQUAL "no")
290 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")
291 endif()
292
67018bf4 293 if(DIMDIR AND ODIR AND ALIEN)
294 add_subdirectory(SHUTTLE)
295 else()
296 message(FATAL_ERROR "SHUTTLE enabled! Please specify DIMDIR, ODIR and ALIEN")
297 endif()
298endif(SHUTTLE)
034aa4b3 299
34ab4e08 300add_subdirectory(ALIROOT)
9596d7e9 301
302# List modules with PARfiles
303string(REPLACE ";" " " ALIPARFILES_FLAT "${ALIPARFILES}")
304message(STATUS "PARfile target enabled for the following modules: ${ALIPARFILES_FLAT}")
9af5c6f6 305
306# Install Find macros for common packages to be further used by AliPhysics
307install(FILES
308 cmake/CMakeALICE.cmake
309 cmake/FindROOT.cmake
310 cmake/FindFASTJET.cmake
311 cmake/FindZeroMQ.cmake
312 cmake/GetGitRevisionDescription.cmake
313 cmake/GetGitRevisionDescription.cmake.in
314 DESTINATION cmake)