CMake: Define configuration variable as CACHE
[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 # Utility to generate PARfiles
59 include(cmake/GenParFile.cmake)
60
61 # Shared library suffix
62 if (NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
63   set(CMAKE_SHARED_LIBRARY_SUFFIX .so)
64 endif (NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
65
66 # Checking first for DIM, DATE, AMORE and daqDA 
67 # in case ROOT Extra static library needs to be enabled
68
69 # DATE
70 # date-config needs DIMDIR and ODIR set
71 # Setting variables in cache to be accesible by ccmake
72 set(DATE_CONFIG CACHE STRING "date-config script location")
73 set(DIMDIT CACHE STRING "dim installation folder")
74 set(ODIR CACHE STRING "dim plaform, usually \"linux\"")
75 if(DATE_CONFIG)
76     if(DIMDIR AND ODIR)
77         find_package(DATE)
78     else()
79         message(FATAL_ERROR "DATE enabled but no DIMDIR and ODIR set. Please set DIMDIR and ODIR")
80     endif()
81 endif()
82
83 # daqDA
84 # Setting variables in cache to be accesible by ccmake
85 set(daqDA CACHE STRING "daqDA library folder installation")
86 if(daqDA)
87     find_package(daqDA)
88 endif(daqDA)
89
90 # AMORE
91 # Setting variables in cache to be accesible by ccmake
92 set(AMORE_CONFIG CACHE STRING "amore-config script location")
93 if(AMORE_CONFIG)
94     if(ROOTSYS)
95         find_package(AMORE)
96     else()
97         message(FATAL_ERROR "AMORE enabled but no ROOTSYS defined")
98     endif()
99 endif(AMORE_CONFIG)
100
101 # id DARPM we enable DA if it is not set
102 # Setting variables in cache to be accesible by ccmake
103 set(DARPM CACHE STRING "Enable DARPM: ON")
104 set(DA CACHE STRING "Enable DA: ON")
105 if(DARPM)
106     if(NOT DA)
107         set(DA ON)
108     endif(NOT DA)
109 endif(DARPM)
110
111 # DA is enabled
112 # Setting variables in cache to be accesible by ccmake
113 set(ALIROOT_STATIC CACHE STRING "ENABLE static building of AliRoot: ON")
114 if(DA)
115     if(NOT DIMDIR AND NOT ODIR)
116         set(DA FALSE)
117         message(FATAL_ERROR "Das enabled but no DIMDIR and ODIR set. Please set DIMDIR to DIM installation and ODIR to platform (default linux)")
118     endif()
119
120     if(NOT DATE_FOUND)
121         set(DA FALSE)
122         message(FATAL_ERROR "DAs enabled but no DATE support found. Please point to your date installation using \"DATE_CONFIG\" variable")
123     endif()
124
125     if(NOT daqDA_FOUND)
126         set(DA FALSE)
127         message(FATAL_ERROR "DAs enabled but no daqDA support found. Please point to your daqDA installation using \"daqDA\" variable")
128     endif()
129
130     if(NOT AMORE_FOUND)
131         set(DA FALSE)
132         message(FATAL_ERROR "DAs enabled but no AMORE support found. Please point to your AMORE installation using \"AMORE_CONFIG\" variable")
133     endif()
134     
135     # Enable static libraries
136     set(ALIROOT_STATIC TRUE)
137     message(STATUS "DAs enabled")
138 endif(DA)
139
140 # MDC rpm creation enables the static build
141 # Setting variables in cache to be accesible by ccmake
142 set(MDCRPM CACHE STRING "Enable mdc rpm build")
143 if(MDCRPM)
144     set(ALIROOT_STATIC TRUE)
145     message(STATUS "AliMDC RPM enabled. AliRoot static build enabled")
146 endif(MDCRPM)
147
148 # ROOT configuration mandatory
149 # FindRoot has to be after the enabling of DA due to libRootExtra
150 # Do not put it above DA
151 # Setting variables in cache to be accesible by ccmake
152 set(ROOTSYS CACHE STRING "ROOT installation folder")
153 if(ROOTSYS)
154     find_package(ROOT REQUIRED)
155
156     # ROOT must be build with XML2 support
157     if(NOT ROOT_HASXML)
158         message(FATAL_ERROR "ROOT was not build with xml2 support. Please reinstall or rebuild ROOT with xml2 support")
159     endif(NOT ROOT_HASXML)
160 else()
161     message(FATAL_ERROR "ROOT installation not found!\nPlease point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR")
162 endif(ROOTSYS)
163
164 # ROOT dictionaries and maps
165 include(CMakeALICE)
166
167
168 # If no Fortran, i.e on Windows
169 # We need to specify ROOT fortran
170 # (f95 comes before gfortran in default module)
171 include(CheckLanguage)
172
173 if(ROOT_FORTRAN)
174     message(STATUS "Using the Fortran compiler defined by ROOT configuration: ${ROOT_FORTRAN}")
175     set(CMAKE_Fortran_COMPILER ${ROOT_FORTRAN})
176 else()
177     message(STATUS "Using default system Fortran compiler")
178 endif(ROOT_FORTRAN)
179
180 check_language(Fortran)
181 if(CMAKE_Fortran_COMPILER)
182     enable_language(Fortran OPTIONAL)
183 else()
184     message(STATUS "No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN, etc.")
185 endif()
186
187 # Optional: Doxygen for reference doc generation
188 find_package(Doxygen)
189 if(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
190     message(STATUS "Doxygen ${DOXYGEN_VERSION} and Graphviz found: ${DOXYGEN_EXECUTABLE}, ${DOXYGEN_DOT_EXECUTABLE}")
191     set(CAN_GENERATE_DOC TRUE)
192 else()
193     message(STATUS "Doxygen and Graphviz not found. Disabling support for documentation generation")
194 endif(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
195
196 # FastJet
197 find_package(FASTJET)
198
199 # ZEROMQ
200 find_package(ZeroMQ)
201
202 # Generating the AliRoot-config.cmake file
203 configure_file(${PROJECT_SOURCE_DIR}/cmake/AliRoot-config.cmake.in ${CMAKE_BINARY_DIR}/version/AliRoot-config.cmake @ONLY)
204 install(FILES ${PROJECT_BINARY_DIR}/version/AliRoot-config.cmake DESTINATION etc)
205
206 # General flags -> Should be moved into a configuration file
207 set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
208 set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE)
209
210 # List of modules for which PARfiles are enabled -- use the cache as global scope and clean it
211 set(ALIPARFILES "" CACHE INTERNAL "ALIPARFILES" FORCE)
212
213 # AliRoot base modules
214 add_subdirectory(STEER)
215 add_subdirectory(RAW)
216 add_subdirectory(ANALYSIS)
217
218 # Include Vc own cmake
219 include(Vc/Vc.cmake)
220 add_subdirectory(Vc)
221
222 # AliRoot common macros
223 add_subdirectory(macros)
224
225 # AliRoot modules
226 add_subdirectory(ACORDE)
227 add_subdirectory(AD)
228 add_subdirectory(BCM)
229 add_subdirectory(EMCAL)
230 add_subdirectory(EPOS)
231 add_subdirectory(EVE)
232 add_subdirectory(EVGEN)
233 add_subdirectory(FASTSIM)
234 add_subdirectory(FIT)
235 add_subdirectory(FMD)
236 add_subdirectory(HLT)
237 add_subdirectory(HMPID)
238 add_subdirectory(ITS)
239 add_subdirectory(MFT)
240 add_subdirectory(MONITOR)
241 add_subdirectory(MUON)
242 add_subdirectory(PHOS)
243 add_subdirectory(PMD)
244 add_subdirectory(PYTHIA8)
245 add_subdirectory(STARLIGHT)
246 add_subdirectory(STAT)
247 add_subdirectory(STRUCT)
248 add_subdirectory(T0)
249 add_subdirectory(TDPMjet)
250 add_subdirectory(TEvtGen)
251 add_subdirectory(THerwig)
252 add_subdirectory(TOF)
253 add_subdirectory(TPC)
254 add_subdirectory(TRD)
255 add_subdirectory(TRIGGER)
256 add_subdirectory(TTherminator)
257 add_subdirectory(VZERO)
258 add_subdirectory(ZDC)
259 add_subdirectory(doxygen)
260
261 # Fortran modules
262 if(CMAKE_Fortran_COMPILER)
263   add_subdirectory(DIME)
264   add_subdirectory(DPMJET)
265   add_subdirectory(HERWIG)
266   add_subdirectory(HIJING)
267   add_subdirectory(LHAPDF)
268   add_subdirectory(MICROCERN)
269   add_subdirectory(PYTHIA6)
270   add_subdirectory(TEPEMGEN)
271   add_subdirectory(THbtp)
272   add_subdirectory(THijing)
273   add_subdirectory(THydjet)
274   add_subdirectory(TPHIC)
275   add_subdirectory(TUHKMgen)
276   add_subdirectory(TAmpt)
277 endif(CMAKE_Fortran_COMPILER)
278
279 add_subdirectory(data)
280 add_subdirectory(GRP)
281 add_subdirectory(OCDB)
282 add_subdirectory(QAref)
283
284 # Enable SHUTTLE compilation
285 # Check if DIMDIR and ODIR are set
286 # # Setting variables in cache to be accesible by ccmake
287 set(SHUTTLE CACHE STRING "Enable SHUTTLE build : ON")
288 if(SHUTTLE)
289     if(ROOT_HASALIEN STREQUAL "no")
290         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")
291     endif()
292     
293     if(DIMDIR AND ODIR AND ALIEN)
294         add_subdirectory(SHUTTLE)
295     else()
296         message(FATAL_ERROR "SHUTTLE enabled! Please specify DIMDIR, ODIR and ALIEN")
297     endif()
298 endif(SHUTTLE)
299
300 add_subdirectory(ALIROOT)
301
302 # List modules with PARfiles
303 string(REPLACE ";" " " ALIPARFILES_FLAT "${ALIPARFILES}")
304 message(STATUS "PARfile target enabled for the following modules: ${ALIPARFILES_FLAT}")