3 # Top level CMakeList.txt file for the AliRoot Build System
5 # Author: Johny Jose (johny.jose@cern.ch)
6 # Port of previous Makefile build to cmake
9 cmake_minimum_required(VERSION 2.8.4 FATAL_ERROR)
11 #--------------------------------------------------------------------------------#
12 # Set Basic CMake Configuration #
13 #--------------------------------------------------------------------------------#
15 project(AliRoot CXX C Fortran)
17 # Environment variables
18 set(ALICE_ROOT $ENV{ALICE_ROOT})
19 set(ALICE $ENV{ALICE})
20 set(ALICE_INSTALL $ENV{ALICE_INSTALL})
21 if(${ALICE_INSTALL} MATCHES ${CMAKE_BINARY_DIR})
22 message(FATAL_ERROR "Install dir should be different from build dir")
23 endif(${ALICE_INSTALL} MATCHES ${CMAKE_BINARY_DIR})
24 # Environment for SHUTTLE
25 set(DIMDIR $ENV{DIMDIR})
29 message(WARNING "Environment variable ALICE is not set")
33 message(FATAL_ERROR "Please set ALICE_ROOT to the AliRoot source directory")
36 # Set AliRoot Installation directory
38 message(STATUS "AliRoot files will be installed in ${ALICE_ROOT}. You can specify a different location by setting ALICE_INSTALL environment variable")
39 set(ALICE_INSTALL ${ALICE_ROOT})
41 message(STATUS "AliRoot files will be installed in ${ALICE_INSTALL}")
42 endif(NOT ALICE_INSTALL)
43 set(CMAKE_INSTALL_PREFIX ${ALICE_INSTALL})
45 get_filename_component(PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}" REALPATH)
46 set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
47 set(CPACK_COMPONENTS_ALL MDC)
51 #--------------------------------------------------------------------------------#
53 #--------------------------------------------------------------------------------#
56 # ------------------------------
58 find_package(Subversion REQUIRED)
61 # ------------------------------
63 find_package(ROOT REQUIRED)
66 # ------------------------------
68 find_package(RuleChecker)
71 # ------------------------------
76 # ------------------------------
81 # ------------------------------
85 # AliRoot CPack configuration
86 #-------------------------------
91 #--------------------------------------------------------------------------------#
92 # Environment/Compiler Configuration #
93 #--------------------------------------------------------------------------------#
95 ALICE_CheckOutOfSourceBuild()
96 ALICE_RootConfig(CMAKE_CXX_COMPILER --cxx)
97 ALICE_RootConfig(CMAKE_C_COMPILER --cc)
98 ALICE_RootConfig(CMAKE_Fortran_COMPILER --f77)
99 ALICE_ConfigurePlatform()
100 ALICE_ConfigureCompiler()
103 #--------------------------------------------------------------------------------#
104 # AliRoot Path Settings #
105 #--------------------------------------------------------------------------------#
107 ALICE_DevFlagsOutput()
108 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin/tgt_${ALICE_TARGET}")
109 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib/tgt_${ALICE_TARGET}")
110 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib/tgt_${ALICE_TARGET}")
111 set(CMAKE_INCLUDE_EXPORT_DIRECTORY "${PROJECT_BINARY_DIR}/include")
112 file(MAKE_DIRECTORY ${CMAKE_INCLUDE_EXPORT_DIRECTORY})
113 set(EXPORTDIRS "${ALICE_INSTALL}/include")
114 set(BINLIBDIRS "-L${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
117 #--------------------------------------------------------------------------------#
119 #--------------------------------------------------------------------------------#
121 # Exclude Module from all target
122 # ------------------------------
124 #set(EXCLUDEMODULES THydjet SHUTTLE)
128 # ------------------------------
129 set(ALIROOTMODULES STEER PHOS TRD TPC ZDC MUON PMD FMD TOF ITS ACORDE HMPID T0 BCM STRUCT VZERO THijing THbtp EMCAL THerwig TEPEMGEN FASTSIM TPHIC RAW MONITOR ANALYSIS JETAN HLT STAT TTherminator CORRFW DPMJET TDPMjet PWG0 PWG1 PWG2 PWG3 PWG4 TRIGGER PYTHIA8 TAmpt OADB )
132 list(APPEND ALIROOTMODULES THydjet)
136 list(APPEND ALIROOTMODULES SHUTTLE)
140 # ------------------------------
141 list(APPEND ALIROOTMODULES TUHKMgen EPOS)
144 # ------------------------------
145 ALICE_RootConfig(EVE --has-opengl)
146 if(NOT EVE STREQUAL "no")
147 list(APPEND ALIROOTMODULES EVE)
148 endif(NOT EVE STREQUAL "no")
151 # ------------------------------
152 set(CERNMODULES LHAPDF HIJING MICROCERN HERWIG)
155 if(EXISTS ${ROOTINCDIR}/TPythia6.h)
157 list(APPEND CERNMODULES PYTHIA6 EVGEN)
159 message(FATAL_ERROR "ROOT must have Pythia6 enabled !")
160 endif(EXISTS ${ROOTINCDIR}/TPythia6.h)
162 # Set Final list of modules
163 set(MODULES ${ALIROOTMODULES} ${CERNMODULES} ALIROOT)
165 # Set Module directories
166 set(MODDIRS ${MODULES})
168 # Libraries for Linking
169 # ------------------------------
170 set(ALILIBS MUON TPC PMD TRD FMD TOF ITS PHOS ACORDE HMPID VZERO ZDC STRUCT T0 EVGEN STEER TRIGGER)
171 set(LIBS ${ROOTCLIBS} ${ROOTPLIBS} ${SYSLIBS})
173 # Configure ARVerion.h
174 # ------------------------------
176 if(EXISTS ${PROJECT_SOURCE_DIR}/.svn/ )
177 Subversion_WC_INFO(${PROJECT_SOURCE_DIR} PROJECT)
178 set(ALIROOT_SVN_REVISION ${PROJECT_WC_REVISION})
179 set(ALIROOT_SVN_BRANCH ${PROJECT_WC_URL})
180 string(REGEX MATCH "[^/]+$" ALIROOT_SVN_BRANCH ${ALIROOT_SVN_BRANCH})
182 elseif(EXISTS ${PROJECT_SOURCE_DIR}/.git/ )
183 execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND git svn info OUTPUT_VARIABLE OUTPUTVAR)
184 string(REPLACE "\n" ";" OUTPUTVAR ${OUTPUTVAR})
185 foreach(f ${OUTPUTVAR})
187 string(REGEX MATCH "[^/]+$" ALIROOT_SVN_BRANCH ${f})
188 elseif(${f} MATCHES Revision)
189 string(REGEX MATCH "[^: ]+$" ALIROOT_SVN_REVISION ${f})
190 endif(${f} MATCHES URL)
192 endif(EXISTS ${PROJECT_SOURCE_DIR}/.svn/ )
194 message(STATUS "Aliroot Revision - ${ALIROOT_SVN_REVISION} Branch - ${ALIROOT_SVN_BRANCH}")
195 if(EXISTS ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h)
196 file(REMOVE ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h)
197 endif(EXISTS ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h)
198 configure_file(${PROJECT_SOURCE_DIR}/cmake/ARVersion.h.tmp ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h @ONLY)
199 endif(Subversion_FOUND)
201 #--------------------------------------------------------------------------------#
203 #--------------------------------------------------------------------------------#
206 # ------------------------------
213 # Top Level Build Targets
214 # ------------------------------
216 add_custom_target(alilibs-static)
217 add_custom_target(include-headers ALL)
218 add_custom_target(DA-all)
219 add_custom_target(check-all)
220 add_custom_target(check-hxml)
221 add_custom_target(smell-all)
222 add_custom_target(par-all)
223 add_custom_target(test-par-all)
226 # ------------------------------
227 foreach(MODULE ${MODDIRS})
229 configure_file(${PROJECT_SOURCE_DIR}/cmake/Module.tmp ${PROJECT_SOURCE_DIR}/${MODULE}/CMakeLists.txt @ONLY)
230 add_custom_target(${MODULE}-all ALL)
231 add_custom_target(${MODULE}-par-all)
232 add_custom_target(test-${MODULE}-par-all)
233 add_custom_target(${MODULE}-all-static)
234 add_dependencies(alilibs-static "${MODULE}-static")
235 add_subdirectory(${MODULE})
238 if(DATE_FOUND AND AMORE_FOUND)
240 endif(DATE_FOUND AND AMORE_FOUND)
242 if(RULECHECKER_FOUND)
243 add_custom_target(factfile DEPENDS ${FACTFILE})
244 add_custom_command( OUTPUT ${FACTFILE}
245 COMMAND ${CMAKE_COMMAND} -E echo "Re-generating factfile"
246 COMMAND ${JAVA_RUNTIME} -Xmx1024M -jar ${FACTEXTRACTOR_JAR} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}
247 DEPENDS check-hxml ${CMAKE_BINARY_DIR}/check-hxml-touchfile ${_factfile_deps}
248 WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
249 endif(RULECHECKER_FOUND)
251 #--------------------------------------------------------------------------------#
252 # Additional Targets #
253 #--------------------------------------------------------------------------------#
256 # ------------------------------
258 include (InstallRequiredSystemLibraries)