Merge branch 'feature-doxygen'
[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 ### CMP0025   Compiler id for Apple Clang is now AppleClang.
23 ### CMP0042   MACOSX_RPATH is enabled by default.
24
25 foreach(p
26   CMP0025 # CMake 3.0
27   CMP0042 # CMake 3.0
28   )
29   if(POLICY ${p})
30   cmake_policy(SET ${p} NEW)
31   endif()
32 endforeach()
33
34 project(AliRoot CXX C)
35
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}")
40
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}")
45
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}})")
52
53 if(CMAKE_INSTALL_PREFIX STREQUAL "${AliRoot_SOURCE_DIR}")
54   message(FATAL_ERROR "Please choose a different installation point than the source tree!")
55 endif()
56
57 # Path to additonal modules
58 set(CMAKE_MODULE_PATH "${AliRoot_SOURCE_DIR}/cmake")
59
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)
69
70 # - CLANG_MAJOR.CLANG_MINOR or
71 # - GCC_MAJOR.GCC_MINOR.GCC_PATCH
72 include(CheckCompiler)
73
74 # Utility to generate PARfiles
75 include(cmake/GenParFile.cmake)
76
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)
81
82 # Optional: Doxygen for reference doc generation
83 find_package(Doxygen)
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)
87 elseif(DOXYGEN_ONLY)
88   message(FATAL_ERROR "Doxygen and Graphviz not found. Cannot generate documentation")
89 else()
90   message(STATUS "Doxygen and Graphviz not found. Disabling support for documentation generation")
91 endif()
92
93 # Doxygen documentation is always included
94 add_subdirectory(doxygen)
95
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!")
102 else()
103
104   # Standard CMake inclusions and checks if we are actually building AliRoot,
105   # i.e. not only the documentation
106
107   # Checking first for DIM, DATE, AMORE and daqDA 
108   # in case ROOT Extra static library needs to be enabled
109
110   # DATE
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\"")
116   if(DATE_CONFIG)
117     if(DIMDIR AND ODIR)
118       find_package(DATE)
119     else()
120       message(FATAL_ERROR "DATE enabled but no DIMDIR and ODIR set. Please set DIMDIR and ODIR")
121     endif()
122   endif()
123
124   # daqDA
125   # Setting variables in cache to be accesible by ccmake
126   set(daqDA CACHE STRING "daqDA library folder installation")
127   if(daqDA)
128     find_package(daqDA)
129   endif(daqDA)
130
131   # AMORE
132   # Setting variables in cache to be accesible by ccmake
133   set(AMORE_CONFIG CACHE STRING "amore-config script location")
134   if(AMORE_CONFIG)
135     if(ROOTSYS)
136       find_package(AMORE)
137     else()
138       message(FATAL_ERROR "AMORE enabled but no ROOTSYS defined")
139     endif()
140   endif(AMORE_CONFIG)
141
142   # id DARPM we enable DA if it is not set
143   # Setting variables in cache to be accesible by ccmake
144   set(DARPM CACHE STRING "Enable DARPM: ON")
145   set(DA CACHE STRING "Enable DA: ON")
146   if(DARPM)
147     if(NOT DA)
148       set(DA ON)
149     endif(NOT DA)
150   endif(DARPM)
151
152   # DA is enabled
153   # Setting variables in cache to be accesible by ccmake
154   set(ALIROOT_STATIC CACHE STRING "ENABLE static building of AliRoot: ON")
155   if(DA)
156     if(NOT DIMDIR AND NOT ODIR)
157       set(DA FALSE)
158       message(FATAL_ERROR "DAs enabled but no DIMDIR and ODIR set. Please set DIMDIR to DIM installation and ODIR to platform (default linux)")
159     endif()
160
161     if(NOT DATE_FOUND)
162       set(DA FALSE)
163       message(FATAL_ERROR "DAs enabled but no DATE support found. Please point to your date installation using \"DATE_CONFIG\" variable")
164     endif()
165
166     if(NOT daqDA_FOUND)
167       set(DA FALSE)
168       message(FATAL_ERROR "DAs enabled but no daqDA support found. Please point to your daqDA installation using \"daqDA\" variable")
169     endif()
170
171     if(NOT AMORE_FOUND)
172       set(DA FALSE)
173       message(FATAL_ERROR "DAs enabled but no AMORE support found. Please point to your AMORE installation using \"AMORE_CONFIG\" variable")
174     endif()
175       
176     # Enable static libraries
177     set(ALIROOT_STATIC TRUE)
178     message(STATUS "DAs enabled")
179   endif(DA)
180
181   # MDC rpm creation enables the static build
182   # Setting variables in cache to be accesible by ccmake
183   set(MDCRPM CACHE STRING "Enable mdc rpm build")
184   if(MDCRPM)
185     set(ALIROOT_STATIC TRUE)
186     message(STATUS "AliMDC RPM enabled. AliRoot static build enabled")
187   endif(MDCRPM)
188
189   # ROOT configuration mandatory
190   # FindRoot has to be after the enabling of DA due to libRootExtra
191   # Do not put it above DA
192   # Setting variables in cache to be accesible by ccmake
193   set(ROOTSYS CACHE STRING "ROOT installation folder")
194   if(ROOTSYS)
195     find_package(ROOT REQUIRED)
196
197     # ROOT must be build with XML2 support
198     if(NOT ROOT_HASXML)
199       message(FATAL_ERROR "ROOT was not build with xml2 support. Please reinstall or rebuild ROOT with xml2 support")
200     endif(NOT ROOT_HASXML)
201   else()
202     message(FATAL_ERROR "ROOT installation not found!\nPlease point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR")
203   endif(ROOTSYS)
204
205   # ROOT dictionaries and maps
206   include(CMakeALICE)
207
208   # If no Fortran, i.e on Windows
209   # We need to specify ROOT fortran
210   # (f95 comes before gfortran in default module)
211   include(CheckLanguage)
212
213   if(ROOT_FORTRAN)
214     message(STATUS "Using the Fortran compiler defined by ROOT configuration: ${ROOT_FORTRAN}")
215     set(CMAKE_Fortran_COMPILER ${ROOT_FORTRAN})
216   else()
217     message(STATUS "Using default system Fortran compiler")
218   endif(ROOT_FORTRAN)
219
220   check_language(Fortran)
221   if(CMAKE_Fortran_COMPILER)
222     enable_language(Fortran OPTIONAL)
223   else()
224     message(STATUS "No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN, etc.")
225   endif()
226
227   # FastJet
228   find_package(FASTJET)
229
230   # ZEROMQ
231   find_package(ZeroMQ)
232
233   # Generating the AliRoot-config.cmake file
234   configure_file(${PROJECT_SOURCE_DIR}/cmake/AliRoot-config.cmake.in ${CMAKE_BINARY_DIR}/version/AliRoot-config.cmake @ONLY)
235   install(FILES ${PROJECT_BINARY_DIR}/version/AliRoot-config.cmake DESTINATION etc)
236
237   # General flags -> Should be moved into a configuration file
238   set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
239   set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE)
240
241   # List of modules for which PARfiles are enabled -- use the cache as global scope and clean it
242   set(ALIPARFILES "" CACHE INTERNAL "ALIPARFILES" FORCE)
243
244   # AliRoot base modules
245   add_subdirectory(STEER)
246   add_subdirectory(RAW)
247   add_subdirectory(ANALYSIS)
248
249   # Include Vc own cmake
250   include(Vc/Vc.cmake)
251   add_subdirectory(Vc)
252
253   # AliRoot common macros
254   add_subdirectory(macros)
255
256   # AliRoot modules
257   add_subdirectory(ACORDE)
258   add_subdirectory(AD)
259   add_subdirectory(BCM)
260   add_subdirectory(EMCAL)
261   add_subdirectory(EPOS)
262   add_subdirectory(EVE)
263   add_subdirectory(EVGEN)
264   add_subdirectory(FASTSIM)
265   add_subdirectory(FIT)
266   add_subdirectory(FMD)
267   add_subdirectory(HLT)
268   add_subdirectory(HMPID)
269   add_subdirectory(ITS)
270   add_subdirectory(MFT)
271   add_subdirectory(MONITOR)
272   add_subdirectory(MUON)
273   add_subdirectory(PHOS)
274   add_subdirectory(PMD)
275   add_subdirectory(PYTHIA8)
276   add_subdirectory(STARLIGHT)
277   add_subdirectory(STAT)
278   add_subdirectory(STRUCT)
279   add_subdirectory(T0)
280   add_subdirectory(TDPMjet)
281   add_subdirectory(TEvtGen)
282   add_subdirectory(THerwig)
283   add_subdirectory(TOF)
284   add_subdirectory(TPC)
285   add_subdirectory(TRD)
286   add_subdirectory(TRIGGER)
287   add_subdirectory(TTherminator)
288   add_subdirectory(VZERO)
289   add_subdirectory(ZDC)
290
291   # Fortran modules
292   if(CMAKE_Fortran_COMPILER)
293     add_subdirectory(DIME)
294     add_subdirectory(DPMJET)
295     add_subdirectory(HERWIG)
296     add_subdirectory(HIJING)
297     add_subdirectory(LHAPDF)
298     add_subdirectory(MICROCERN)
299     add_subdirectory(PYTHIA6)
300     add_subdirectory(TEPEMGEN)
301     add_subdirectory(THbtp)
302     add_subdirectory(THijing)
303     add_subdirectory(THydjet)
304     add_subdirectory(TPHIC)
305     add_subdirectory(TUHKMgen)
306     add_subdirectory(TAmpt)
307   endif(CMAKE_Fortran_COMPILER)
308
309   add_subdirectory(data)
310   add_subdirectory(GRP)
311   add_subdirectory(OCDB)
312   add_subdirectory(QAref)
313
314   # Enable SHUTTLE compilation
315   # Check if DIMDIR and ODIR are set
316   # # Setting variables in cache to be accesible by ccmake
317   set(SHUTTLE CACHE STRING "Enable SHUTTLE build : ON")
318   if(SHUTTLE)
319     if(ROOT_HASALIEN STREQUAL "no")
320       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")
321     endif()
322       
323     if(DIMDIR AND ODIR AND ALIEN)
324       add_subdirectory(SHUTTLE)
325     else()
326       message(FATAL_ERROR "SHUTTLE enabled! Please specify DIMDIR, ODIR and ALIEN")
327     endif()
328   endif(SHUTTLE)
329
330   add_subdirectory(ALIROOT)
331
332   # List modules with PARfiles
333   string(REPLACE ";" " " ALIPARFILES_FLAT "${ALIPARFILES}")
334   message(STATUS "PARfile target enabled for the following modules: ${ALIPARFILES_FLAT}")
335
336   # Install Find macros for common packages to be further used by AliPhysics
337   install(FILES
338     cmake/CMakeALICE.cmake
339     cmake/FindROOT.cmake
340     cmake/FindFASTJET.cmake
341     cmake/FindZeroMQ.cmake
342     cmake/GetGitRevisionDescription.cmake
343     cmake/GetGitRevisionDescription.cmake.in
344     DESTINATION cmake)
345
346 endif(DEFINED DOXYGEN_ONLY AND DOXYGEN_ONLY)