doxy: consider comments after last line
[u/mrichter/AliRoot.git] / CMakeLists.txt
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 #--------------------------------------------------------------------------#
19
20 cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR)
21
22 project(AliRoot CXX C)
23
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}")
28
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}")
33
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}})")
40
41 if(CMAKE_INSTALL_PREFIX STREQUAL "${AliRoot_SOURCE_DIR}")
42     message(FATAL_ERROR "Please choose a different installation point than the source tree!")
43 endif()
44
45 # Path to additonal modules
46 set(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
56 include(CheckGitVersion)
57
58 #       - CLANG_MAJOR.CLANG_MINOR or
59 #       - GCC_MAJOR.GCC_MINOR.GCC_PATCH
60 include(CheckCompiler)
61
62 # Utility to generate PARfiles
63 include(cmake/GenParFile.cmake)
64
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)
69
70 # Checking first for DIM, DATE, AMORE and daqDA 
71 # in case ROOT Extra static library needs to be enabled
72
73 # DATE
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\"")
79 if(DATE_CONFIG)
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()
85 endif()
86
87 # daqDA
88 # Setting variables in cache to be accesible by ccmake
89 set(daqDA CACHE STRING "daqDA library folder installation")
90 if(daqDA)
91     find_package(daqDA)
92 endif(daqDA)
93
94 # AMORE
95 # Setting variables in cache to be accesible by ccmake
96 set(AMORE_CONFIG CACHE STRING "amore-config script location")
97 if(AMORE_CONFIG)
98     if(ROOTSYS)
99         find_package(AMORE)
100     else()
101         message(FATAL_ERROR "AMORE enabled but no ROOTSYS defined")
102     endif()
103 endif(AMORE_CONFIG)
104
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")
109 if(DARPM)
110     if(NOT DA)
111         set(DA ON)
112     endif(NOT DA)
113 endif(DARPM)
114
115 # DA is enabled
116 # Setting variables in cache to be accesible by ccmake
117 set(ALIROOT_STATIC CACHE STRING "ENABLE static building of AliRoot: ON")
118 if(DA)
119     if(NOT DIMDIR AND NOT ODIR)
120         set(DA FALSE)
121         message(FATAL_ERROR "DAs enabled but no DIMDIR and ODIR set. Please set DIMDIR to DIM installation and ODIR to platform (default linux)")
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")
142 endif(DA)
143
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")
147 if(MDCRPM)
148     set(ALIROOT_STATIC TRUE)
149     message(STATUS "AliMDC RPM enabled. AliRoot static build enabled")
150 endif(MDCRPM)
151
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")
157 if(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)
164 else()
165     message(FATAL_ERROR "ROOT installation not found!\nPlease point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR")
166 endif(ROOTSYS)
167
168 # ROOT dictionaries and maps
169 include(CMakeALICE)
170
171
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)
176
177 if(ROOT_FORTRAN)
178     message(STATUS "Using the Fortran compiler defined by ROOT configuration: ${ROOT_FORTRAN}")
179     set(CMAKE_Fortran_COMPILER ${ROOT_FORTRAN})
180 else()
181     message(STATUS "Using default system Fortran compiler")
182 endif(ROOT_FORTRAN)
183
184 check_language(Fortran)
185 if(CMAKE_Fortran_COMPILER)
186     enable_language(Fortran OPTIONAL)
187 else()
188     message(STATUS "No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN, etc.")
189 endif()
190
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)
196 else()
197     message(STATUS "Doxygen and Graphviz not found. Disabling support for documentation generation")
198 endif(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
199
200 # FastJet
201 find_package(FASTJET)
202
203 # ZEROMQ
204 find_package(ZeroMQ)
205
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)
209
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)
213
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)
216
217 # AliRoot base modules
218 add_subdirectory(STEER)
219 add_subdirectory(RAW)
220 add_subdirectory(ANALYSIS)
221
222 # Include Vc own cmake
223 include(Vc/Vc.cmake)
224 add_subdirectory(Vc)
225
226 # AliRoot common macros
227 add_subdirectory(macros)
228
229 # AliRoot modules
230 add_subdirectory(ACORDE)
231 add_subdirectory(AD)
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)
252 add_subdirectory(T0)
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)
264
265 # Fortran modules
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)
282
283 add_subdirectory(data)
284 add_subdirectory(GRP)
285 add_subdirectory(OCDB)
286 add_subdirectory(QAref)
287
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")
292 if(SHUTTLE)
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     
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()
302 endif(SHUTTLE)
303
304 add_subdirectory(ALIROOT)
305
306 # List modules with PARfiles
307 string(REPLACE ";" " " ALIPARFILES_FLAT "${ALIPARFILES}")
308 message(STATUS "PARfile target enabled for the following modules: ${ALIPARFILES_FLAT}")
309
310 # Install Find macros for common packages to be further used by AliPhysics
311 install(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)