X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;ds=sidebyside;f=CMakeLists.txt;h=928a9d3269234523ca8764a2200472a19c36d6ac;hb=e9b1f5d76edb149052adc9648ad3cdff6f50dcbb;hp=4772c653ba07ad9afac5396c143d3dd7932244a7;hpb=56966a5ec2e64d964b0ef127ae81670f35983d66;p=u%2Fmrichter%2FAliRoot.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 4772c653ba0..928a9d32692 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,139 +17,330 @@ # Set Basic CMake Configuration # #--------------------------------------------------------------------------# -cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR) +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) -# If no Fortran, i.e on Windows -include(CheckLanguage) -check_language(Fortran) -if(CMAKE_Fortran_COMPILER) - enable_language(Fortran OPTIONAL) -else() - message("No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN") -endif() +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}") -# Path to additonal modules -set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") -include(CMakeALICE) +# 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}") -# ROOT configuration mandatory -if(ROOTSYS) - find_package(ROOT REQUIRED) +# 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}})") - # ROOT must be build with XML2 support - if(ROOT_HASXML STREQUAL "no") - message(FATAL_ERROR "ROOT was not build with xml2 support. Please reinstall or rebuild ROOT with xml2 support") - endif(ROOT_HASXML STREQUAL "no") -else() - message(FATAL_ERROR "ROOT installation not found!\nPlease point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR") -endif(ROOTSYS) +if(CMAKE_INSTALL_PREFIX STREQUAL "${AliRoot_SOURCE_DIR}") + message(FATAL_ERROR "Please choose a different installation point than the source tree!") +endif() -# DATE -find_package(DATE) +# Path to additonal modules +set(CMAKE_MODULE_PATH "${AliRoot_SOURCE_DIR}/cmake") -# Configure ARVerion.h using Git informatiion -# Sets 3 git variables +# 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 -if(EXISTS ${PROJECT_SOURCE_DIR}/.git/) - include(GetGitRevisionDescription) - - find_package(Git) - - if(GIT_FOUND) - get_git_head_revision(GIT_REFSPEC GIT_SHA1) - - # GIT_REFSPEC is empty for detached mode = tags in detached mode or checkout to specific hash - - # returns the closest reference to the current hash - # name of the current tag or heads/branch in the case of branches - git_describe(ALIROOT_GIT_TAG "--all" "--abbrev=0") - - STRING(REGEX REPLACE "^(.+/)(.+)/(.*)$" "\\2" BRANCH_TYPE "${GIT_REFSPEC}" ) - - # the revision is not set in the case of a branch, it means we are doing development - # and the revision will trigger a reconfiguration - if(BRANCH_TYPE STREQUAL "heads") - set(ALIROOT_REVISION "ThisIsaBranchNoRevisionProvided") - STRING(REGEX REPLACE "^(.+/)(.+/)(.*)$" "\\3" SHORT_BRANCH "${GIT_REFSPEC}" ) - else() - set(SHORT_BRANCH ${ALIROOT_GIT_TAG}) - set(ALIROOT_REVISION ${GIT_SHA1}) - endif() - - set(ALIROOT_BRANCH ${SHORT_BRANCH}) - - # generate the short version of the revision hash - execute_process(COMMAND git rev-parse --short ${GIT_SHA1} - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_STRIP_TRAILING_WHITESPACE - RESULT_VARIABLE res - OUTPUT_VARIABLE GIT_SHORT_SHA1) - - # if the rev-parse fails we set the short sha to the long initial one - if(NOT res EQUAL 0) - set(GIT_SHORT_SHA1 ${GIT_SHA1}) - endif() - - message(STATUS "Aliroot branch/tag: \"${ALIROOT_BRANCH}\" - Revision: \"${GIT_SHORT_SHA1}\" ") +# - ALIROOT_VERSION = ALIROOT_BRANCH +# - ALIROOT_REVISION = GIT_SHORT_SHA1 +include(CheckGitVersion) - else() - message(STATUS "Git not installed. I can't tell you which revision you are using!") - endif(GIT_FOUND) +# - CLANG_MAJOR.CLANG_MINOR or +# - GCC_MAJOR.GCC_MINOR.GCC_PATCH +include(CheckCompiler) + +# 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("AliRoot sources not downloaded from a Version Control System. I can't tell which revision you are using!") -endif(EXISTS ${PROJECT_SOURCE_DIR}/.git/) + message(STATUS "Doxygen and Graphviz not found. Disabling support for documentation generation") +endif() -configure_file(${PROJECT_SOURCE_DIR}/cmake/ARVersion.h.tmp ${CMAKE_BINARY_DIR}/version/ARVersion.h @ONLY) -install(FILES ${PROJECT_BINARY_DIR}/version/ARVersion.h DESTINATION include) +# Doxygen documentation is always included +add_subdirectory(doxygen) -string (REPLACE "-" "." ALIROOT_BRANCH_SPEC "${ALIROOT_BRANCH}") +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() -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}") + # 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 + + # 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(NOT ROOT_HASXML) + message(FATAL_ERROR "ROOT was not build with xml2 support. Please reinstall or rebuild ROOT with xml2 support") + 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) + include(CheckLanguage) + + if(ROOT_FORTRAN) + message(STATUS "Using the Fortran compiler defined by ROOT configuration: ${ROOT_FORTRAN}") + set(CMAKE_Fortran_COMPILER ${ROOT_FORTRAN}) + else() + message(STATUS "Using default system Fortran compiler") + endif(ROOT_FORTRAN) + + check_language(Fortran) + if(CMAKE_Fortran_COMPILER) + enable_language(Fortran OPTIONAL) + else() + message(STATUS "No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN, etc.") + 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(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) -# AliRoot modules -add_subdirectory (STEER) -add_subdirectory (STAT) -add_subdirectory (OADB) -add_subdirectory (ANALYSIS) -add_subdirectory (RAW) -add_subdirectory (ITS) -#add_subdirectory (TPC) -#add_subdirectory (VZERO) -#add_subdirectory (T0) -#add_subdirectory (TOF) -#add_subdirectory (TRD) -#add_subdirectory (ZDC) -#add_subdirectory (STRUCT) -#add_subdirectory (HMPID) -#add_subdirectory (PMD) -#add_subdirectory (MUON) -#add_subdirectory (FMD) -#add_subdirectory (ACORDE) -#add_subdirectory (EMCAL) -#add_subdirectory (PHOS) -#add_subdirectory (TRIGGER) -#add_subdirectory (BCM) -#add_subdirectory (CORRFW) -#add_subdirectory (FASTSIM) -#if(CMAKE_Fortran_COMPILER_WORKS) -# add_subdirectory (LHAPDF) -# add_subdirectory (PYTHIA6) -# add_subdirectory (MICROCERN) -#endif(CMAKE_Fortran_COMPILER_WORKS) -#add_subdirectory (EVGEN) -#add_subdirectory (TUHKMgen) -#add_subdirectory (TTherminator) -#add_subdirectory (TPHIC) -#add_subdirectory (THydjet) -#add_subdirectory (PWG) -#add_subdirectory (Vc) -#add_subdirectory (HLT) +endif(DEFINED DOXYGEN_ONLY AND DOXYGEN_ONLY)