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 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 # Environment for SHUTTLE
22 set(DIMDIR $ENV{DIMDIR})
26 message(WARNING "Environment variable ALICE is not set")
30 message(FATAL_ERROR "Please set ALICE_ROOT to the AliRoot source directory")
33 # Set AliRoot Installation directory
35 message(STATUS "AliRoot files will be installed in ${ALICE_ROOT}. You can specify a different location by setting ALICE_INSTALL environment variable")
36 set(ALICE_INSTALL ${ALICE_ROOT})
38 message(STATUS "AliRoot files will be installed in ${ALICE_INSTALL}")
39 endif(NOT ALICE_INSTALL)
40 set(CMAKE_INSTALL_PREFIX ${ALICE_INSTALL})
42 get_filename_component(PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}" REALPATH)
43 set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
44 set(CPACK_COMPONENTS_ALL MDC)
48 #--------------------------------------------------------------------------------#
50 #--------------------------------------------------------------------------------#
53 # ------------------------------
55 find_package(Subversion REQUIRED)
58 # ------------------------------
60 find_package(ROOT REQUIRED)
63 # ------------------------------
65 find_package(RuleChecker)
68 # ------------------------------
73 # ------------------------------
78 # ------------------------------
82 # AliRoot CPack configuration
83 #-------------------------------
88 #--------------------------------------------------------------------------------#
89 # Environment/Compiler Configuration #
90 #--------------------------------------------------------------------------------#
92 ALICE_CheckOutOfSourceBuild()
93 ALICE_RootConfig(CMAKE_CXX_COMPILER --cxx)
94 ALICE_RootConfig(CMAKE_C_COMPILER --cc)
95 ALICE_RootConfig(CMAKE_Fortran_COMPILER --f77)
96 ALICE_ConfigurePlatform()
97 ALICE_ConfigureCompiler()
100 #--------------------------------------------------------------------------------#
101 # AliRoot Path Settings #
102 #--------------------------------------------------------------------------------#
104 ALICE_DevFlagsOutput()
105 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin/tgt_${ALICE_TARGET}")
106 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib/tgt_${ALICE_TARGET}")
107 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib/tgt_${ALICE_TARGET}")
108 set(CMAKE_INCLUDE_EXPORT_DIRECTORY "${PROJECT_BINARY_DIR}/include")
109 file(MAKE_DIRECTORY ${CMAKE_INCLUDE_EXPORT_DIRECTORY})
110 set(EXPORTDIRS "${ALICE_INSTALL}/include")
111 set(BINLIBDIRS "-L${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
114 #--------------------------------------------------------------------------------#
116 #--------------------------------------------------------------------------------#
118 # Exclude Module from all target
119 # ------------------------------
121 #set(EXCLUDEMODULES THydjet SHUTTLE)
125 # ------------------------------
126 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 LHC STAT TTherminator CORRFW DPMJET TDPMjet PWG0 PWG1 PWG2 PWG3 PWG4 TRIGGER PYTHIA8 TAmpt OADB )
129 list(APPEND ALIROOTMODULES THydjet)
133 list(APPEND ALIROOTMODULES SHUTTLE)
137 # ------------------------------
138 list(APPEND ALIROOTMODULES TUHKMgen EPOS)
141 # ------------------------------
142 ALICE_RootConfig(EVE --has-opengl)
143 if(NOT EVE STREQUAL "no")
144 list(APPEND ALIROOTMODULES EVE)
145 endif(NOT EVE STREQUAL "no")
148 # ------------------------------
149 set(CERNMODULES LHAPDF HIJING MICROCERN HERWIG)
152 if(EXISTS ${ROOTINCDIR}/TPythia6.h)
154 list(APPEND CERNMODULES PYTHIA6 EVGEN)
156 message(FATAL_ERROR "ROOT must have Pythia6 enabled !")
157 endif(EXISTS ${ROOTINCDIR}/TPythia6.h)
159 # Set Final list of modules
160 set(MODULES ${ALIROOTMODULES} ${CERNMODULES} ALIROOT)
162 # Set Module directories
163 set(MODDIRS ${MODULES})
165 # Libraries for Linking
166 # ------------------------------
167 set(ALILIBS MUON TPC PMD TRD FMD TOF ITS PHOS ACORDE HMPID VZERO ZDC STRUCT T0 EVGEN STEER TRIGGER)
168 set(LIBS ${ROOTCLIBS} ${ROOTPLIBS} ${SYSLIBS})
170 # Configure ARVerion.h
171 # ------------------------------
173 if(EXISTS ${PROJECT_SOURCE_DIR}/.svn/ )
174 Subversion_WC_INFO(${PROJECT_SOURCE_DIR} PROJECT)
175 set(ALIROOT_SVN_REVISION ${PROJECT_WC_REVISION})
176 set(ALIROOT_SVN_BRANCH ${PROJECT_WC_URL})
177 string(REGEX MATCH "[^/]+$" ALIROOT_SVN_BRANCH ${ALIROOT_SVN_BRANCH})
179 elseif(EXISTS ${PROJECT_SOURCE_DIR}/.git/ )
180 execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND git svn info OUTPUT_VARIABLE OUTPUTVAR)
181 string(REPLACE "\n" ";" OUTPUTVAR ${OUTPUTVAR})
182 foreach(f ${OUTPUTVAR})
184 string(REGEX MATCH "[^/]+$" ALIROOT_SVN_BRANCH ${f})
185 elseif(${f} MATCHES Revision)
186 string(REGEX MATCH "[^: ]+$" ALIROOT_SVN_REVISION ${f})
187 endif(${f} MATCHES URL)
189 endif(EXISTS ${PROJECT_SOURCE_DIR}/.svn/ )
191 message(STATUS "Aliroot Revision - ${ALIROOT_SVN_REVISION} Branch - ${ALIROOT_SVN_BRANCH}")
192 if(EXISTS ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h)
193 file(REMOVE ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h)
194 endif(EXISTS ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h)
195 configure_file(${PROJECT_SOURCE_DIR}/cmake/ARVersion.h.tmp ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h @ONLY)
196 endif(Subversion_FOUND)
198 #--------------------------------------------------------------------------------#
200 #--------------------------------------------------------------------------------#
203 # ------------------------------
210 # Top Level Build Targets
211 # ------------------------------
213 add_custom_target(alilibs-static)
214 add_custom_target(include-headers ALL)
215 add_custom_target(DA-all)
216 add_custom_target(check-all)
217 add_custom_target(check-hxml)
218 add_custom_target(smell-all)
219 add_custom_target(par-all)
220 add_custom_target(test-par-all)
223 # ------------------------------
224 foreach(MODULE ${MODDIRS})
226 configure_file(${PROJECT_SOURCE_DIR}/cmake/Module.tmp ${PROJECT_SOURCE_DIR}/${MODULE}/CMakeLists.txt @ONLY)
227 add_custom_target(${MODULE}-all ALL)
228 add_custom_target(${MODULE}-par-all)
229 add_custom_target(test-${MODULE}-par-all)
230 add_custom_target(${MODULE}-all-static)
231 add_dependencies(alilibs-static "${MODULE}-static")
232 add_subdirectory(${MODULE})
235 if(DATE_FOUND AND AMORE_FOUND)
237 endif(DATE_FOUND AND AMORE_FOUND)
239 if(RULECHECKER_FOUND)
240 add_custom_target(factfile DEPENDS ${FACTFILE})
241 add_custom_command( OUTPUT ${FACTFILE}
242 COMMAND ${CMAKE_COMMAND} -E echo "Re-generating factfile"
243 COMMAND ${JAVA_RUNTIME} -Xmx1024M -jar ${FACTEXTRACTOR_JAR} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}
244 DEPENDS check-hxml ${CMAKE_BINARY_DIR}/check-hxml-touchfile ${_factfile_deps}
245 WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
246 endif(RULECHECKER_FOUND)
248 #--------------------------------------------------------------------------------#
249 # Additional Targets #
250 #--------------------------------------------------------------------------------#
253 # ------------------------------
255 include (InstallRequiredSystemLibraries)