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