# ************************************************************************** # * Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. * # * * # * Author: The ALICE Off-line Project. * # * Contributors are mentioned in the code where appropriate. * # * * # * Permission to use, copy, modify and distribute this software and its * # * documentation strictly for non-commercial purposes is hereby granted * # * without fee, provided that the above copyright notice appears in all * # * copies and that both the copyright notice and this permission notice * # * appear in the supporting documentation. The authors make no claims * # * about the suitability of this software for any purpose. It is * # * provided "as is" without express or implied warranty. * # ************************************************************************** #--------------------------------------------------------------------------# # Set Basic CMake Configuration # #--------------------------------------------------------------------------# 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 "${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) # 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(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() # 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) # 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) 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(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)