# Set Basic CMake Configuration #
#--------------------------------------------------------------------------#
-cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
+cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR)
project(AliRoot CXX C)
+message(STATUS "CMake platform: ${CMAKE_SYSTEM}")
+message(STATUS "Build folder: ${AliRoot_BINARY_DIR}")
+message(STATUS "Source folder: ${AliRoot_SOURCE_DIR}")
+message(STATUS "Installation folder: ${CMAKE_INSTALL_PREFIX}")
+
+# CMake supports different build types by default. We want the DEBUG build type
+# to have "-g -O0" flags: by default it only has "-g"
+set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
+set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
+
+# You can change the build type using
+# cmake -DCMAKE_BUILD_TYPE=DEBUG | RELEASE | RELWITHDEBINFO | MINSIZEREL ...
+if (NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE RELWITHDEBINFO)
+endif(NOT CMAKE_BUILD_TYPE)
+message(STATUS "Build type: ${CMAKE_BUILD_TYPE} (${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}})")
+
+if(CMAKE_INSTALL_PREFIX STREQUAL "${AliRoot_SOURCE_DIR}")
+ message(FATAL_ERROR "Please choose a different installation point than the source tree!")
+endif()
+
# Path to additonal modules
-set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
+set(CMAKE_MODULE_PATH "${AliRoot_SOURCE_DIR}/cmake")
+
+# AliRoot version extracted from Git repository
+# Sets 4 git variables
+# - GIT_REFSPEC - complete name of the current reference
+# - ALIROOT_BRANCH - name of the branch or tag extracted from the current reference
+# - GIT_SHA1 - current hash in the long format
+# - GIT_SHORT_SHA1 - current hash in the short format
+# - ALIROOT_VERSION = ALIROOT_BRANCH
+# - ALIROOT_REVISION = GIT_SHORT_SHA1
+include(CheckGitVersion)
# - CLANG_MAJOR.CLANG_MINOR or
# - GCC_MAJOR.GCC_MINOR.GCC_PATCH
include(CheckCompiler)
-# ROOT dictionaries and maps
-include(CMakeALICE)
+# Utility to generate PARfiles
+include(cmake/GenParFile.cmake)
+
+# Shared library suffix
+if (NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
+ set(CMAKE_SHARED_LIBRARY_SUFFIX .so)
+endif (NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
+
+# Checking first for DIM, DATE, AMORE and daqDA
+# in case ROOT Extra static library needs to be enabled
+
+# DATE
+# date-config needs DIMDIR and ODIR set
+# Setting variables in cache to be accesible by ccmake
+set(DATE_CONFIG CACHE STRING "date-config script location")
+set(DIMDIT CACHE STRING "dim installation folder")
+set(ODIR CACHE STRING "dim plaform, usually \"linux\"")
+if(DATE_CONFIG)
+ if(DIMDIR AND ODIR)
+ find_package(DATE)
+ else()
+ message(FATAL_ERROR "DATE enabled but no DIMDIR and ODIR set. Please set DIMDIR and ODIR")
+ endif()
+endif()
+
+# daqDA
+# Setting variables in cache to be accesible by ccmake
+set(daqDA CACHE STRING "daqDA library folder installation")
+if(daqDA)
+ find_package(daqDA)
+endif(daqDA)
+
+# AMORE
+# Setting variables in cache to be accesible by ccmake
+set(AMORE_CONFIG CACHE STRING "amore-config script location")
+if(AMORE_CONFIG)
+ if(ROOTSYS)
+ find_package(AMORE)
+ else()
+ message(FATAL_ERROR "AMORE enabled but no ROOTSYS defined")
+ endif()
+endif(AMORE_CONFIG)
+
+# id DARPM we enable DA if it is not set
+# Setting variables in cache to be accesible by ccmake
+set(DARPM CACHE STRING "Enable DARPM: ON")
+set(DA CACHE STRING "Enable DA: ON")
+if(DARPM)
+ if(NOT DA)
+ set(DA ON)
+ endif(NOT DA)
+endif(DARPM)
+
+# DA is enabled
+# Setting variables in cache to be accesible by ccmake
+set(ALIROOT_STATIC CACHE STRING "ENABLE static building of AliRoot: ON")
+if(DA)
+ if(NOT DIMDIR AND NOT ODIR)
+ set(DA FALSE)
+ message(FATAL_ERROR "DAs enabled but no DIMDIR and ODIR set. Please set DIMDIR to DIM installation and ODIR to platform (default linux)")
+ endif()
+
+ if(NOT DATE_FOUND)
+ set(DA FALSE)
+ message(FATAL_ERROR "DAs enabled but no DATE support found. Please point to your date installation using \"DATE_CONFIG\" variable")
+ endif()
+
+ if(NOT daqDA_FOUND)
+ set(DA FALSE)
+ message(FATAL_ERROR "DAs enabled but no daqDA support found. Please point to your daqDA installation using \"daqDA\" variable")
+ endif()
+
+ if(NOT AMORE_FOUND)
+ set(DA FALSE)
+ message(FATAL_ERROR "DAs enabled but no AMORE support found. Please point to your AMORE installation using \"AMORE_CONFIG\" variable")
+ endif()
+
+ # Enable static libraries
+ set(ALIROOT_STATIC TRUE)
+ message(STATUS "DAs enabled")
+endif(DA)
+
+# MDC rpm creation enables the static build
+# Setting variables in cache to be accesible by ccmake
+set(MDCRPM CACHE STRING "Enable mdc rpm build")
+if(MDCRPM)
+ set(ALIROOT_STATIC TRUE)
+ message(STATUS "AliMDC RPM enabled. AliRoot static build enabled")
+endif(MDCRPM)
# ROOT configuration mandatory
+# FindRoot has to be after the enabling of DA due to libRootExtra
+# Do not put it above DA
+# Setting variables in cache to be accesible by ccmake
+set(ROOTSYS CACHE STRING "ROOT installation folder")
if(ROOTSYS)
find_package(ROOT REQUIRED)
# ROOT must be build with XML2 support
- if(ROOT_HASXML STREQUAL "no")
+ if(NOT ROOT_HASXML)
message(FATAL_ERROR "ROOT was not build with xml2 support. Please reinstall or rebuild ROOT with xml2 support")
- endif(ROOT_HASXML STREQUAL "no")
+ endif(NOT ROOT_HASXML)
else()
message(FATAL_ERROR "ROOT installation not found!\nPlease point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR")
endif(ROOTSYS)
+# ROOT dictionaries and maps
+include(CMakeALICE)
+
+
# If no Fortran, i.e on Windows
# We need to specify ROOT fortran
# (f95 comes before gfortran in default module)
if(CMAKE_Fortran_COMPILER)
enable_language(Fortran OPTIONAL)
else()
- message("No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN, etc.")
+ message(STATUS "No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN, etc.")
endif()
-
-# DATE
-find_package(DATE)
+# Optional: Doxygen for reference doc generation
+find_package(Doxygen)
+if(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
+ message(STATUS "Doxygen ${DOXYGEN_VERSION} and Graphviz found: ${DOXYGEN_EXECUTABLE}, ${DOXYGEN_DOT_EXECUTABLE}")
+ set(CAN_GENERATE_DOC TRUE)
+else()
+ message(STATUS "Doxygen and Graphviz not found. Disabling support for documentation generation")
+endif(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
# FastJet
find_package(FASTJET)
# ZEROMQ
find_package(ZeroMQ)
-# AliRoot version extracted from Git repository
-# Sets 4 git variables
-# - GIT_REFSPEC - complete name of the current reference
-# - ALIROOT_BRANCH - name of the branch or tag extracted from the current reference
-# - GIT_SHA1 - current hash in the long format
-# - GIT_SHORT_SHA1 - current hash in the short format
-include(CheckGitVersion)
+# Generating the AliRoot-config.cmake file
+configure_file(${PROJECT_SOURCE_DIR}/cmake/AliRoot-config.cmake.in ${CMAKE_BINARY_DIR}/version/AliRoot-config.cmake @ONLY)
+install(FILES ${PROJECT_BINARY_DIR}/version/AliRoot-config.cmake DESTINATION etc)
-message(STATUS "CMake platform: ${CMAKE_SYSTEM}")
-message(STATUS "Build folder: ${AliRoot_BINARY_DIR}")
-message(STATUS "Source folder: ${AliRoot_SOURCE_DIR}")
-message(STATUS "Installation folder: ${CMAKE_INSTALL_PREFIX}")
+# General flags -> Should be moved into a configuration file
+set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
+set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE)
+# List of modules for which PARfiles are enabled -- use the cache as global scope and clean it
+set(ALIPARFILES "" CACHE INTERNAL "ALIPARFILES" FORCE)
# AliRoot base modules
add_subdirectory(STEER)
include(Vc/Vc.cmake)
add_subdirectory(Vc)
+# AliRoot common macros
+add_subdirectory(macros)
+
# AliRoot modules
add_subdirectory(ACORDE)
add_subdirectory(AD)
add_subdirectory(BCM)
-add_subdirectory(CORRFW)
add_subdirectory(EMCAL)
add_subdirectory(EPOS)
add_subdirectory(EVE)
add_subdirectory(HLT)
add_subdirectory(HMPID)
add_subdirectory(ITS)
-add_subdirectory(JETAN)
add_subdirectory(MFT)
add_subdirectory(MONITOR)
add_subdirectory(MUON)
-add_subdirectory(OADB)
add_subdirectory(PHOS)
add_subdirectory(PMD)
add_subdirectory(PYTHIA8)
add_subdirectory(STAT)
add_subdirectory(STRUCT)
add_subdirectory(T0)
+add_subdirectory(TDPMjet)
add_subdirectory(TEvtGen)
add_subdirectory(THerwig)
add_subdirectory(TOF)
add_subdirectory(TTherminator)
add_subdirectory(VZERO)
add_subdirectory(ZDC)
+add_subdirectory(doxygen)
# Fortran modules
if(CMAKE_Fortran_COMPILER)
+ add_subdirectory(DIME)
+ add_subdirectory(DPMJET)
add_subdirectory(HERWIG)
add_subdirectory(HIJING)
add_subdirectory(LHAPDF)
add_subdirectory(TPHIC)
add_subdirectory(TUHKMgen)
add_subdirectory(TAmpt)
- add_subdirectory(DIME)
endif(CMAKE_Fortran_COMPILER)
+add_subdirectory(data)
+add_subdirectory(GRP)
+add_subdirectory(OCDB)
+add_subdirectory(QAref)
+
# Enable SHUTTLE compilation
# Check if DIMDIR and ODIR are set
+# # Setting variables in cache to be accesible by ccmake
+set(SHUTTLE CACHE STRING "Enable SHUTTLE build : ON")
if(SHUTTLE)
+ if(ROOT_HASALIEN STREQUAL "no")
+ 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")
+ endif()
+
if(DIMDIR AND ODIR AND ALIEN)
add_subdirectory(SHUTTLE)
else()
message(FATAL_ERROR "SHUTTLE enabled! Please specify DIMDIR, ODIR and ALIEN")
endif()
endif(SHUTTLE)
+
+add_subdirectory(ALIROOT)
+
+# List modules with PARfiles
+string(REPLACE ";" " " ALIPARFILES_FLAT "${ALIPARFILES}")
+message(STATUS "PARfile target enabled for the following modules: ${ALIPARFILES_FLAT}")
+
+# Install Find macros for common packages to be further used by AliPhysics
+install(FILES
+ cmake/CMakeALICE.cmake
+ cmake/FindROOT.cmake
+ cmake/FindFASTJET.cmake
+ cmake/FindZeroMQ.cmake
+ cmake/GetGitRevisionDescription.cmake
+ cmake/GetGitRevisionDescription.cmake.in
+ DESTINATION cmake)