]> git.uio.no Git - u/mrichter/AliRoot.git/blob - CMakeLists.txt
f5e96826ace90c909861a2f2945e1c3101e10a0b
[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 # You can change the build type using 
30 # cmake -DCMAKE_BUILD_TYPE=DEBUG | RELEASE | RELWITHDEBINFO | MINSIZEREL ...
31 if (NOT CMAKE_BUILD_TYPE)
32   set(CMAKE_BUILD_TYPE RELWITHDEBINFO)
33 endif(NOT CMAKE_BUILD_TYPE)
34 message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
35
36
37 if(CMAKE_INSTALL_PREFIX STREQUAL "${AliRoot_SOURCE_DIR}")
38     message(FATAL_ERROR "Please choose a different installation point than the source tree!")
39 endif()
40
41 # Path to additonal modules
42 set(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
52 include(CheckGitVersion)
53
54 #       - CLANG_MAJOR.CLANG_MINOR or
55 #       - GCC_MAJOR.GCC_MINOR.GCC_PATCH
56 include(CheckCompiler)
57
58 # Shared library suffix
59 if (NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
60   set(CMAKE_SHARED_LIBRARY_SUFFIX .so)
61 endif (NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
62
63 # ROOT configuration mandatory
64 if(ROOTSYS)
65     find_package(ROOT REQUIRED)
66
67     # ROOT must be build with XML2 support
68     if(NOT ROOT_HASXML)
69         message(FATAL_ERROR "ROOT was not build with xml2 support. Please reinstall or rebuild ROOT with xml2 support")
70     endif(NOT ROOT_HASXML)
71 else()
72     message(FATAL_ERROR "ROOT installation not found!\nPlease point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR")
73 endif(ROOTSYS)
74
75 # ROOT dictionaries and maps
76 include(CMakeALICE)
77
78 # Checking first for DIM, DATE, AMORE and daqDA 
79 # in case ROOT Extra static library needs to be enabled
80
81 # DATE
82 # date-config needs DIMDIR and ODIR set
83 if(DATE_CONFIG)
84     if(DIMDIR AND ODIR)
85         find_package(DATE)
86     else()
87         message(FATAL_ERROR "DATE enabled but no DIMDIR and ODIR set. Please set DIMDIR and ODIR")
88     endif()
89 endif()
90
91 # daqDA
92 if(daqDA)
93     find_package(daqDA)
94 endif(daqDA)
95
96 # AMORE
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 if(DARPM)
107     if(NOT DA)
108         set(DA ON)
109     endif(NOT DA)
110 endif(DARPM)
111
112 # DA is enabled
113 if(DA)
114     if(NOT DIMDIR AND NOT ODIR)
115         set(DA FALSE)
116         message(FATAL_ERROR "Das enabled but no DIMDIR and ODIR set. Please set DIMDIR to DIM installation and ODIR to platform (default linux)")
117     endif()
118
119     if(NOT DATE_FOUND)
120         set(DA FALSE)
121         message(FATAL_ERROR "DAs enabled but no DATE support found. Please point to your date installation using \"DATE_CONFIG\" variable")
122     endif()
123
124     if(NOT daqDA_FOUND)
125         set(DA FALSE)
126         message(FATAL_ERROR "DAs enabled but no daqDA support found. Please point to your daqDA installation using \"daqDA\" variable")
127     endif()
128
129     if(NOT AMORE_FOUND)
130         set(DA FALSE)
131         message(FATAL_ERROR "DAs enabled but no AMORE support found. Please point to your AMORE installation using \"AMORE_CONFIG\" variable")
132     endif()
133     
134     # Enable static libraries
135     set(ALIROOT_STATIC TRUE)
136     message(STATUS "DAs enabled")
137 endif(DA)
138
139 # MDC rpm creation enables the static build
140 if(MDCRPM)
141     set(ALIROOT_STATIC TRUE)
142     message(STATUS "AliMDC RPM enabled. AliRoot static build enabled")
143 endif(MDCRPM)
144
145 # If no Fortran, i.e on Windows
146 # We need to specify ROOT fortran
147 # (f95 comes before gfortran in default module)
148 include(CheckLanguage)
149
150 if(ROOT_FORTRAN)
151     message(STATUS "Using the Fortran compiler defined by ROOT configuration: ${ROOT_FORTRAN}")
152     set(CMAKE_Fortran_COMPILER ${ROOT_FORTRAN})
153 else()
154     message(STATUS "Using default system Fortran compiler")
155 endif(ROOT_FORTRAN)
156
157 check_language(Fortran)
158 if(CMAKE_Fortran_COMPILER)
159     enable_language(Fortran OPTIONAL)
160 else()
161     message(STATUS "No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN, etc.")
162 endif()
163
164 # Optional: Doxygen for reference doc generation
165 find_package(Doxygen)
166 if(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
167     message(STATUS "Doxygen ${DOXYGEN_VERSION} and Graphviz found: ${DOXYGEN_EXECUTABLE}, ${DOXYGEN_DOT_EXECUTABLE}")
168     set(CAN_GENERATE_DOC TRUE)
169 else()
170     message(STATUS "Doxygen and Graphviz not found. Disabling support for documentation generation")
171 endif(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
172
173 # DATE
174 if(DATE_CONFIG)
175     find_package(DATE)
176 endif(DATE_CONFIG)
177
178 # daqDA
179 if(daqDA)
180     find_package(daqDA)
181 endif(daqDA)
182
183 # DA is enabled
184 if(DA)
185     if(NOT DATE_FOUND)
186         set(DA FALSE)
187         message(FATAL_ERROR "DAs enabled but no DATE support found. Please point to your date installation using \"DATE_CONFIG\"")
188     endif()
189     
190     if(NOT daqDA_FOUND)
191         set(DA FALSE)
192         message(FATAL_ERROR "DAs enabled but no daqDA support found. Please point to your daqDA installation using \"daqDA\" variable")
193     endif()
194     
195     # Enable static libraries
196     set(ALIROOT_STATIC TRUE)
197     message(STATUS "DAs enabled")
198 endif(DA)
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 # AliRoot base modules
215 add_subdirectory(STEER)
216 add_subdirectory(RAW)
217 add_subdirectory(ANALYSIS)
218
219 # Include Vc own cmake
220 include(Vc/Vc.cmake)
221 add_subdirectory(Vc)
222
223 # AliRoot common macros
224 add_subdirectory(macros)
225
226 # AliRoot modules
227 add_subdirectory(ACORDE)
228 add_subdirectory(AD)
229 add_subdirectory(BCM)
230 add_subdirectory(CORRFW)
231 add_subdirectory(EMCAL)
232 add_subdirectory(EPOS)
233 add_subdirectory(EVE)
234 add_subdirectory(EVENTMIX)
235 add_subdirectory(EVGEN)
236 add_subdirectory(FASTSIM)
237 add_subdirectory(FIT)
238 add_subdirectory(FMD)
239 add_subdirectory(HLT)
240 add_subdirectory(HMPID)
241 add_subdirectory(ITS)
242 add_subdirectory(JETAN)
243 add_subdirectory(MFT)
244 add_subdirectory(MONITOR)
245 add_subdirectory(MUON)
246 add_subdirectory(OADB)
247 add_subdirectory(PHOS)
248 add_subdirectory(PMD)
249 add_subdirectory(PYTHIA8)
250 add_subdirectory(STARLIGHT)
251 add_subdirectory(STAT)
252 add_subdirectory(STRUCT)
253 add_subdirectory(T0)
254 add_subdirectory(TDPMjet)
255 add_subdirectory(TENDER)
256 add_subdirectory(TEvtGen)
257 add_subdirectory(THerwig)
258 add_subdirectory(TOF)
259 add_subdirectory(TPC)
260 add_subdirectory(TRD)
261 add_subdirectory(TRIGGER)
262 add_subdirectory(TTherminator)
263 add_subdirectory(VZERO)
264 add_subdirectory(ZDC)
265 add_subdirectory(doxygen)
266
267 # Fortran modules
268 if(CMAKE_Fortran_COMPILER)
269   add_subdirectory(DIME)
270   add_subdirectory(DPMJET)
271   add_subdirectory(HERWIG)
272   add_subdirectory(HIJING)
273   add_subdirectory(LHAPDF)
274   add_subdirectory(MICROCERN)
275   add_subdirectory(PYTHIA6)
276   add_subdirectory(TEPEMGEN)
277   add_subdirectory(THbtp)
278   add_subdirectory(THijing)
279   add_subdirectory(THydjet)
280   add_subdirectory(TPHIC)
281   add_subdirectory(TUHKMgen)
282   add_subdirectory(TAmpt)
283 endif(CMAKE_Fortran_COMPILER)
284
285 # PWG libraries
286 add_subdirectory(PWG)
287 add_subdirectory(PWGCF)
288 # Depends on PWGCF - To fix dependencies
289 add_subdirectory(PWGGA)
290 # Depends on CF  - To fix the dependencies
291 add_subdirectory(PWGDQ)
292 add_subdirectory(PWGHF)
293 # Depends on CF
294 add_subdirectory(PWGJE)
295 add_subdirectory(PWGLF)
296 add_subdirectory(PWGPP)
297 add_subdirectory(PWGUD)
298 add_subdirectory(data)
299 add_subdirectory(GRP)
300 add_subdirectory(OCDB)
301 add_subdirectory(QAref)
302
303 # Enable SHUTTLE compilation
304 # Check if DIMDIR and ODIR are set
305 if(SHUTTLE)
306     if(ROOT_HASALIEN STREQUAL "no")
307         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")
308     endif()
309     
310     if(DIMDIR AND ODIR AND ALIEN)
311         add_subdirectory(SHUTTLE)
312     else()
313         message(FATAL_ERROR "SHUTTLE enabled! Please specify DIMDIR, ODIR and ALIEN")
314     endif()
315 endif(SHUTTLE)
316
317 add_subdirectory(ALIROOT)