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