]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - CMakeLists.txt
Overlaps corrected, new shape of sectors
[u/mrichter/AliRoot.git] / CMakeLists.txt
index b1a4a7fd14ebeca2cf390babf98f66e260d7f367..928a9d3269234523ca8764a2200472a19c36d6ac 100644 (file)
 
 cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR)
 
+### CMP0025   Compiler id for Apple Clang is now AppleClang.
+### CMP0042   MACOSX_RPATH is enabled by default.
+
+foreach(p
+  CMP0025 # CMake 3.0
+  CMP0042 # CMake 3.0
+  )
+  if(POLICY ${p})
+  cmake_policy(SET ${p} NEW)
+  endif()
+endforeach()
+
 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 "${AliRoot_SOURCE_DIR}/cmake")
 
@@ -34,243 +67,280 @@ set(CMAKE_MODULE_PATH "${AliRoot_SOURCE_DIR}/cmake")
 #  - ALIROOT_REVISION = GIT_SHORT_SHA1
 include(CheckGitVersion)
 
-#       - CLANG_MAJOR.CLANG_MINOR or
-#       - GCC_MAJOR.GCC_MINOR.GCC_PATCH
+# - CLANG_MAJOR.CLANG_MINOR or
+# - GCC_MAJOR.GCC_MINOR.GCC_PATCH
 include(CheckCompiler)
 
-# 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)
+# 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)
+
+# 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)
+elseif(DOXYGEN_ONLY)
+  message(FATAL_ERROR "Doxygen and Graphviz not found. Cannot generate documentation")
+else()
+  message(STATUS "Doxygen and Graphviz not found. Disabling support for documentation generation")
+endif()
+
+# Doxygen documentation is always included
+add_subdirectory(doxygen)
 
-# ROOT dictionaries and maps
-include(CMakeALICE)
+if(DEFINED DOXYGEN_ONLY AND DOXYGEN_ONLY)
+  # In this case we do not prepare targets for the rest, but for Doxygen only.
+  # This is useful because no checks are performed, and it means that Doxygen
+  # documentation can be generated on a relatively "dumb" server that has as
+  # requirements only cmake, doxygen and graphviz.
+  message(WARNING "Preparing build for Doxygen documentation only as requested. AliRoot will not be built!")
+else()
+
+  # Standard CMake inclusions and checks if we are actually building AliRoot,
+  # i.e. not only the documentation
 
-# Checking first for DIM, DATE, AMORE and daqDA 
-# in case ROOT Extra static library needs to be enabled
+  # 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
-if(DATE_CONFIG)
+  # 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)
+      find_package(DATE)
     else()
-        message(FATAL_ERROR "DATE enabled but no DIMDIR and ODIR set. Please set DIMDIR and ODIR")
+      message(FATAL_ERROR "DATE enabled but no DIMDIR and ODIR set. Please set DIMDIR and ODIR")
     endif()
-endif()
+  endif()
 
-# daqDA
-if(daqDA)
+  # 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)
+  endif(daqDA)
 
-# AMORE
-if(AMORE_CONFIG)
+  # 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)
+      find_package(AMORE)
     else()
-        message(FATAL_ERROR "AMORE enabled but no ROOTSYS defined")
+      message(FATAL_ERROR "AMORE enabled but no ROOTSYS defined")
     endif()
-endif(AMORE_CONFIG)
-
-# DA is enabled
-if(DA)
+  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)")
+      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")
+      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")
+      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")
+      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)
+  endif(DA)
 
-# MDC rpm creation enables the static build
-if(MDCRPM)
+  # 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
-if(ROOTSYS)
+  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(NOT ROOT_HASXML)
-        message(FATAL_ERROR "ROOT was not build with xml2 support. Please reinstall or rebuild ROOT with xml2 support")
+      message(FATAL_ERROR "ROOT was not build with xml2 support. Please reinstall or rebuild ROOT with xml2 support")
     endif(NOT ROOT_HASXML)
-else()
+  else()
     message(FATAL_ERROR "ROOT installation not found!\nPlease point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR")
-endif(ROOTSYS)
+  endif(ROOTSYS)
 
-# If no Fortran, i.e on Windows
-# We need to specify ROOT fortran
-# (f95 comes before gfortran in default module)
-include(CheckLanguage)
+  # ROOT dictionaries and maps
+  include(CMakeALICE)
 
-if(ROOT_FORTRAN)
+  # If no Fortran, i.e on Windows
+  # We need to specify ROOT fortran
+  # (f95 comes before gfortran in default module)
+  include(CheckLanguage)
+
+  if(ROOT_FORTRAN)
     message(STATUS "Using the Fortran compiler defined by ROOT configuration: ${ROOT_FORTRAN}")
     set(CMAKE_Fortran_COMPILER ${ROOT_FORTRAN})
-else()
+  else()
     message(STATUS "Using default system Fortran compiler")
-endif(ROOT_FORTRAN)
+  endif(ROOT_FORTRAN)
 
-check_language(Fortran)
-if(CMAKE_Fortran_COMPILER)
+  check_language(Fortran)
+  if(CMAKE_Fortran_COMPILER)
     enable_language(Fortran OPTIONAL)
-else()
+  else()
     message(STATUS "No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN, etc.")
-endif()
-
-# DATE
-if(DATE_CONFIG)
-    find_package(DATE)
-endif(DATE_CONFIG)
-
-# daqDA
-if(daqDA)
-    find_package(daqDA)
-endif(daqDA)
-
-# DA is enabled
-if(DA)
-    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\"")
+  endif()
+
+  # FastJet
+  find_package(FASTJET)
+
+  # ZEROMQ
+  find_package(ZeroMQ)
+
+  # 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)
+
+  # 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)
+  add_subdirectory(RAW)
+  add_subdirectory(ANALYSIS)
+
+  # Include Vc own cmake
+  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(EMCAL)
+  add_subdirectory(EPOS)
+  add_subdirectory(EVE)
+  add_subdirectory(EVGEN)
+  add_subdirectory(FASTSIM)
+  add_subdirectory(FIT)
+  add_subdirectory(FMD)
+  add_subdirectory(HLT)
+  add_subdirectory(HMPID)
+  add_subdirectory(ITS)
+  add_subdirectory(MFT)
+  add_subdirectory(MONITOR)
+  add_subdirectory(MUON)
+  add_subdirectory(PHOS)
+  add_subdirectory(PMD)
+  add_subdirectory(PYTHIA8)
+  add_subdirectory(STARLIGHT)
+  add_subdirectory(STAT)
+  add_subdirectory(STRUCT)
+  add_subdirectory(T0)
+  add_subdirectory(TDPMjet)
+  add_subdirectory(TEvtGen)
+  add_subdirectory(THerwig)
+  add_subdirectory(TOF)
+  add_subdirectory(TPC)
+  add_subdirectory(TRD)
+  add_subdirectory(TRIGGER)
+  add_subdirectory(TTherminator)
+  add_subdirectory(VZERO)
+  add_subdirectory(ZDC)
+
+  # Fortran modules
+  if(CMAKE_Fortran_COMPILER)
+    add_subdirectory(DIME)
+    add_subdirectory(DPMJET)
+    add_subdirectory(HERWIG)
+    add_subdirectory(HIJING)
+    add_subdirectory(LHAPDF)
+    add_subdirectory(MICROCERN)
+    add_subdirectory(PYTHIA6)
+    add_subdirectory(TEPEMGEN)
+    add_subdirectory(THbtp)
+    add_subdirectory(THijing)
+    add_subdirectory(THydjet)
+    add_subdirectory(TPHIC)
+    add_subdirectory(TUHKMgen)
+    add_subdirectory(TAmpt)
+  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(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()
-    
-    # Enable static libraries
-    set(ALIROOT_STATIC TRUE)
-    message(STATUS "DAs enabled")
-endif(DA)
-
-# FastJet
-find_package(FASTJET)
-
-# ZEROMQ
-find_package(ZeroMQ)
-
-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)
-
-# AliRoot base modules
-add_subdirectory(STEER)
-add_subdirectory(RAW)
-add_subdirectory(ANALYSIS)
-
-# Include Vc own cmake
-include(Vc/Vc.cmake)
-add_subdirectory(Vc)
-
-# 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(EVGEN)
-add_subdirectory(FASTSIM)
-add_subdirectory(FIT)
-add_subdirectory(FMD)
-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(STARLIGHT)
-add_subdirectory(STAT)
-add_subdirectory(STRUCT)
-add_subdirectory(T0)
-add_subdirectory(TDPMjet)
-add_subdirectory(TEvtGen)
-add_subdirectory(THerwig)
-add_subdirectory(TOF)
-add_subdirectory(TPC)
-add_subdirectory(TRD)
-add_subdirectory(TRIGGER)
-add_subdirectory(TTherminator)
-add_subdirectory(VZERO)
-add_subdirectory(ZDC)
-
-# Fortran modules
-if(CMAKE_Fortran_COMPILER)
-  add_subdirectory(DIME)
-  add_subdirectory(DPMJET)
-  add_subdirectory(HERWIG)
-  add_subdirectory(HIJING)
-  add_subdirectory(LHAPDF)
-  add_subdirectory(MICROCERN)
-  add_subdirectory(PYTHIA6)
-  add_subdirectory(TEPEMGEN)
-  add_subdirectory(THbtp)
-  add_subdirectory(THijing)
-  add_subdirectory(THydjet)
-  add_subdirectory(TPHIC)
-  add_subdirectory(TUHKMgen)
-  add_subdirectory(TAmpt)
-endif(CMAKE_Fortran_COMPILER)
-
-# PWG libraries
-add_subdirectory(PWG)
-add_subdirectory(PWGCF)
-# Depends on PWGCF - To fix dependencies
-add_subdirectory(PWGGA)
-# Depends on CF  - To fix the dependencies
-add_subdirectory(PWGDQ)
-add_subdirectory(PWGHF)
-# Depends on CF
-add_subdirectory(PWGJE)
-add_subdirectory(PWGLF)
-add_subdirectory(PWGPP)
-add_subdirectory(PWGUD)
-add_subdirectory(data)
-
-# Enable SHUTTLE compilation
-# Check if DIMDIR and ODIR are set
-if(SHUTTLE)
+      
     if(DIMDIR AND ODIR AND ALIEN)
-        add_subdirectory(SHUTTLE)
+      add_subdirectory(SHUTTLE)
     else()
-        message(FATAL_ERROR "SHUTTLE enabled! Please specify DIMDIR, ODIR and ALIEN")
+      message(FATAL_ERROR "SHUTTLE enabled! Please specify DIMDIR, ODIR and ALIEN")
     endif()
-endif(SHUTTLE)
+  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}")
 
-add_subdirectory(ALIROOT)
+  # 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)
 
-# Data
-add_subdirectory(data)
\ No newline at end of file
+endif(DEFINED DOXYGEN_ONLY AND DOXYGEN_ONLY)