CMake: Changing DA detector name to DA0 to match DAQ settings
[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(DIMDIR CACHE STRING "dim installation folder")
115   set(ODIR CACHE STRING "dim plaform, usually \"linux\"")
116
117   if(DIMDIR AND ODIR)
118     find_package(DIM)
119   endif()
120
121   if(DATE_CONFIG)
122     if(DIM_FOUND)
123       find_package(DATE)
124     else()
125       message(FATAL_ERROR "DATE enabled but no DIMDIR and ODIR set. Please set DIMDIR and ODIR")
126     endif()
127   endif()
128
129   # daqDA
130   # Setting variables in cache to be accesible by ccmake
131   set(daqDA CACHE STRING "daqDA library folder installation")
132   if(daqDA)
133     find_package(daqDA)
134   endif(daqDA)
135
136   # AMORE -> requires ROOT to be installed
137   # Setting variables in cache to be accesible by ccmake
138   set(AMORE_CONFIG CACHE STRING "amore-config script location")
139   if(AMORE_CONFIG)
140     if(ROOTSYS)
141       find_package(AMORE)
142     else()
143       message(FATAL_ERROR "AMORE enabled but no ROOTSYS defined")
144     endif()
145   endif(AMORE_CONFIG)
146
147   # id DARPM we enable DA if it is not set
148   # Setting variables in cache to be accesible by ccmake
149   set(DARPM CACHE STRING "Enable DARPM: ON")
150   set(DA CACHE STRING "Enable DA: ON")
151   if(DARPM)
152     if(NOT DA)
153       set(DA ON)
154     endif(NOT DA)
155   endif(DARPM)
156
157   # DA is enabled
158   # Setting variables in cache to be accesible by ccmake
159   set(ALIROOT_STATIC CACHE STRING "ENABLE static building of AliRoot: ON")
160   if(DA)
161     if(NOT DIM_FOUND)
162       set(DA FALSE)
163       message(FATAL_ERROR "DAs enabled but no DIMDIR and ODIR set. Please set DIMDIR to DIM installation and ODIR to platform (default linux)")
164     endif()
165
166     if(NOT DATE_FOUND)
167       set(DA FALSE)
168       message(FATAL_ERROR "DAs enabled but no DATE support found. Please point to your date installation using \"DATE_CONFIG\" variable")
169     endif()
170
171     if(NOT daqDA_FOUND)
172       set(DA FALSE)
173       message(FATAL_ERROR "DAs enabled but no daqDA support found. Please point to your daqDA installation using \"daqDA\" variable")
174     endif()
175
176     if(NOT AMORE_FOUND)
177       set(DA FALSE)
178       message(FATAL_ERROR "DAs enabled but no AMORE support found. Please point to your AMORE installation using \"AMORE_CONFIG\" variable")
179     endif()
180       
181     # Enable static libraries
182     set(ALIROOT_STATIC TRUE)
183     message(STATUS "DAs enabled")
184   endif(DA)
185
186   # MDC rpm creation enables the static build
187   # Setting variables in cache to be accesible by ccmake
188   set(MDCRPM CACHE STRING "Enable mdc rpm build")
189   if(MDCRPM)
190     set(ALIROOT_STATIC TRUE)
191     message(STATUS "AliMDC RPM enabled. AliRoot static build enabled")
192   endif(MDCRPM)
193
194   # ROOT configuration mandatory
195   # FindRoot has to be after the enabling of DA due to libRootExtra
196   # Do not put it above DA
197   # Setting variables in cache to be accesible by ccmake
198   set(ROOTSYS CACHE STRING "ROOT installation folder")
199   if(ROOTSYS)
200     find_package(ROOT REQUIRED)
201
202     # ROOT must be build with XML2 support
203     if(NOT ROOT_HASXML)
204       message(FATAL_ERROR "ROOT was not build with xml2 support. Please reinstall or rebuild ROOT with xml2 support")
205     endif(NOT ROOT_HASXML)
206   else()
207     message(FATAL_ERROR "ROOT installation not found!\nPlease point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR")
208   endif(ROOTSYS)
209
210   # ROOT dictionaries and maps
211   include(CMakeALICE)
212
213   # If no Fortran, i.e on Windows
214   # We need to specify ROOT fortran
215   # (f95 comes before gfortran in default module)
216   include(CheckLanguage)
217
218   if(ROOT_FORTRAN)
219     message(STATUS "Using the Fortran compiler defined by ROOT configuration: ${ROOT_FORTRAN}")
220     set(CMAKE_Fortran_COMPILER ${ROOT_FORTRAN})
221   else()
222     message(STATUS "Using default system Fortran compiler")
223   endif(ROOT_FORTRAN)
224
225   check_language(Fortran)
226   if(CMAKE_Fortran_COMPILER)
227     enable_language(Fortran OPTIONAL)
228   else()
229     message(STATUS "No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN, etc.")
230   endif()
231
232   # FastJet
233   find_package(FASTJET)
234
235   # ZEROMQ
236   find_package(ZeroMQ)
237
238   # Generating the AliRoot-config.cmake file
239   configure_file(${PROJECT_SOURCE_DIR}/cmake/AliRoot-config.cmake.in ${CMAKE_BINARY_DIR}/version/AliRoot-config.cmake @ONLY)
240   install(FILES ${PROJECT_BINARY_DIR}/version/AliRoot-config.cmake DESTINATION etc)
241
242   # General flags -> Should be moved into a configuration file
243   set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
244   set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE)
245
246   # List of modules for which PARfiles are enabled -- use the cache as global scope and clean it
247   set(ALIPARFILES "" CACHE INTERNAL "ALIPARFILES" FORCE)
248
249   # AliRoot base modules
250   add_subdirectory(STEER)
251   add_subdirectory(RAW)
252   add_subdirectory(ANALYSIS)
253
254   # Include Vc own cmake
255   include(Vc/Vc.cmake)
256   add_subdirectory(Vc)
257
258   # AliRoot common macros
259   add_subdirectory(macros)
260
261   # AliRoot modules
262   add_subdirectory(ACORDE)
263   add_subdirectory(AD)
264   add_subdirectory(BCM)
265   add_subdirectory(EMCAL)
266   add_subdirectory(EPOS)
267   add_subdirectory(EVE)
268   add_subdirectory(EVGEN)
269   add_subdirectory(FASTSIM)
270   add_subdirectory(FIT)
271   add_subdirectory(FMD)
272   add_subdirectory(HLT)
273   add_subdirectory(HMPID)
274   add_subdirectory(ITS)
275   add_subdirectory(MFT)
276   add_subdirectory(MONITOR)
277   add_subdirectory(MUON)
278   add_subdirectory(PHOS)
279   add_subdirectory(PMD)
280   add_subdirectory(PYTHIA8)
281   add_subdirectory(STARLIGHT)
282   add_subdirectory(STAT)
283   add_subdirectory(STRUCT)
284   add_subdirectory(T0)
285   add_subdirectory(TDPMjet)
286   add_subdirectory(TEvtGen)
287   add_subdirectory(THerwig)
288   add_subdirectory(TOF)
289   add_subdirectory(TPC)
290   add_subdirectory(TRD)
291   add_subdirectory(TRIGGER)
292   add_subdirectory(TTherminator)
293   add_subdirectory(VZERO)
294   add_subdirectory(ZDC)
295
296   # Fortran modules
297   if(CMAKE_Fortran_COMPILER)
298     add_subdirectory(DIME)
299     add_subdirectory(DPMJET)
300     add_subdirectory(HERWIG)
301     add_subdirectory(HIJING)
302     add_subdirectory(LHAPDF)
303     add_subdirectory(MICROCERN)
304     add_subdirectory(PYTHIA6)
305     add_subdirectory(TEPEMGEN)
306     add_subdirectory(THbtp)
307     add_subdirectory(THijing)
308     add_subdirectory(THydjet)
309     add_subdirectory(TPHIC)
310     add_subdirectory(TUHKMgen)
311     add_subdirectory(TAmpt)
312   endif(CMAKE_Fortran_COMPILER)
313
314   add_subdirectory(data)
315   add_subdirectory(GRP)
316   add_subdirectory(OCDB)
317   add_subdirectory(QAref)
318
319   # Enable SHUTTLE compilation
320   # Check if DIMDIR and ODIR are set
321   # # Setting variables in cache to be accesible by ccmake
322   set(SHUTTLE CACHE STRING "Enable SHUTTLE build : ON")
323   if(SHUTTLE)
324     if(NOT ROOT_HASMONALISA)
325         message(FATAL_ERROR "ROOT was not build with MonAlisa support")
326     endif()
327
328     find_package(ApMon)
329
330     if(ROOT_HASALIEN STREQUAL "no")
331       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")
332     endif()
333
334     if(DIM_FOUND AND ALIEN)
335         add_subdirectory(SHUTTLE)
336     else()
337       message(FATAL_ERROR "SHUTTLE enabled! Please specify DIMDIR, ODIR and ALIEN")
338     endif()
339   endif(SHUTTLE)
340
341   add_subdirectory(ALIROOT)
342
343   # List modules with PARfiles
344   string(REPLACE ";" " " ALIPARFILES_FLAT "${ALIPARFILES}")
345   message(STATUS "PARfile target enabled for the following modules: ${ALIPARFILES_FLAT}")
346
347   # Install Find macros for common packages to be further used by AliPhysics
348   install(FILES
349     cmake/CMakeALICE.cmake
350     cmake/FindROOT.cmake
351     cmake/FindFASTJET.cmake
352     cmake/FindZeroMQ.cmake
353     cmake/GetGitRevisionDescription.cmake
354     cmake/GetGitRevisionDescription.cmake.in
355     DESTINATION cmake)
356
357 endif(DEFINED DOXYGEN_ONLY AND DOXYGEN_ONLY)