X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=cmake%2FALICE_CMake.cmake;h=1a5c2aa3c67b97b4bb7019712b0a81d4db2f7a70;hp=6b69e366d7573d5d95dd2f8487a52cb4422f9dc7;hb=022ec091da3cae0358b09332ec2c810d4130bf7c;hpb=31e2a8d5ae59b94398289f28f2caba1fa38e5c43 diff --git a/cmake/ALICE_CMake.cmake b/cmake/ALICE_CMake.cmake index 6b69e366d75..1a5c2aa3c67 100644 --- a/cmake/ALICE_CMake.cmake +++ b/cmake/ALICE_CMake.cmake @@ -5,7 +5,7 @@ # Author: Johny Jose (johny.jose@cern.ch) # Port of previous Makefile build to cmake -cmake_minimum_required(VERSION 2.8.4 FATAL_ERROR) +cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR) macro(ALICE_DevFlagsOutput) @@ -18,6 +18,12 @@ macro(ALICE_DevFlagsOutput) message(STATUS "SHLIB : ${SHLIB}") message(STATUS "SYSLIBS : ${SYSLIBS}") message(STATUS "CINTFLAGS : ${CINTFLAGS}") + message(STATUS "CMAKE_Fortran_FLAGS : ${CMAKE_Fortran_FLAGS}") + message(STATUS "CMAKE_CXX_FLAGS : ${CMAKE_CXX_FLAGS}") + message(STATUS "CMAKE_C_FLAGS : ${CMAKE_C_FLAGS}") + message(STATUS "CMAKE_SHARED_LINKER_FLAGS : ${CMAKE_SHARED_LINKER_FLAGS}") + message(STATUS "CMAKE_MODULE_LINKER_FLAGS : ${CMAKE_MODULE_LINKER_FLAGS}") + message(STATUS "CMAKE_EXE_LINKER_FLAGS : ${CMAKE_EXE_LINKER_FLAGS}") endif(ALICEDEV STREQUAL "YES") endmacro(ALICE_DevFlagsOutput) @@ -36,7 +42,7 @@ function(ALICE_CorrectPaths _output value ) set(external) string(REGEX MATCH "^/" external "${path}") if(NOT external) - list(APPEND corrected "${CMAKE_SOURCE_DIR}/${path}" ) + list(APPEND corrected "${AliRoot_SOURCE_DIR}/${path}" ) else() list(APPEND corrected "${path}") endif(NOT external) @@ -102,12 +108,12 @@ endfunction(ALICE_RootConfig) macro(ALICE_CheckOutOfSourceBuild) #Check if previous in-source build failed - if(EXISTS ${CMAKE_SOURCE_DIR}/CMakeCache.txt OR EXISTS ${CMAKE_SOURCE_DIR}/CMakeFiles) + if(EXISTS ${AliRoot_SOURCE_DIR}/CMakeCache.txt OR EXISTS ${AliRoot_SOURCE_DIR}/CMakeFiles) message(FATAL_ERROR "CMakeCache.txt or CMakeFiles exists in source directory! Please remove them before running cmake $ALICE_ROOT") - endif(EXISTS ${CMAKE_SOURCE_DIR}/CMakeCache.txt OR EXISTS ${CMAKE_SOURCE_DIR}/CMakeFiles) + endif(EXISTS ${AliRoot_SOURCE_DIR}/CMakeCache.txt OR EXISTS ${AliRoot_SOURCE_DIR}/CMakeFiles) #Get Real Paths of the source and binary directories - get_filename_component(srcdir "${CMAKE_SOURCE_DIR}" REALPATH) + get_filename_component(srcdir "${AliRoot_SOURCE_DIR}" REALPATH) get_filename_component(bindir "${CMAKE_BINARY_DIR}" REALPATH) #Check for in-source builds @@ -129,9 +135,14 @@ macro(ALICE_ConfigureCompiler) endif(ALIPROFILE STREQUAL "YES") ALICE_RootConfig(RCFLAGS --auxcflags) + if ( CMAKE_CXX_COMPILER MATCHES "clang") + string(REPLACE "-pthread" " " RCFLAGS "${RCFLAGS}") + endif ( CMAKE_CXX_COMPILER MATCHES "clang") + ALICE_RootConfig(RLFLAGS --ldflags) set(CXXFLAGS "${CXXFLAGS} ${RCFLAGS}") + string(REPLACE "-std=c++11" " " RCFLAGS "${RCFLAGS}") set(CFLAGS "${CFLAGS} ${RCFLAGS}") set(SOFLAGS "${SOFLAGS} ${RLFLAGS}") set(LDFLAGS "${LDFLAGS} ${RLFLAGS}") @@ -232,6 +243,8 @@ macro(ALICE_ResetPackage) set(PSHLIBS) set(PDS) + set(saveEINCLUDE) + endmacro(ALICE_ResetPackage) function(ALICE_SetPackageVariable _var ext setvalue unsetvalue ) @@ -248,8 +261,15 @@ function(ALICE_SetPackageVariable _var ext setvalue unsetvalue ) endfunction(ALICE_SetPackageVariable) macro(ALICE_BuildPackage) + # message(STATUS " ${PACKAGE}") list(APPEND EINCLUDE STEER) + # Needed for PAR files - we need to do this before path + # expansion so that the PAR files do not contain references to + # specific directories but depend solely on ALICE_ROOT + string(REPLACE ";" " " saveEINCLUDE "${EINCLUDE}") + # set(saveEINCLUDE "${EINCLUDE}") + # message(STATUS "saveEINCLUDE=${saveEINCLUDE} EINCLUDE=${EINCLUDE}") ALICE_SetPackageVariable(PFFLAGS "FFLAGS" "${PACKFFLAGS}" "${FFLAGS}") ALICE_SetPackageVariable(PCFLAGS "CFLAGS" "${PACKCFLAGS}" "${CFLAGS}") @@ -298,6 +318,8 @@ macro(ALICE_BuildPackage) list(APPEND PMALIBS ${PACKAGE}-static) list(APPEND ALLALIBS ${PACKAGE}-static) list(APPEND BINLIBS ${PACKAGE}) + # Do not link against other libraries when creating a library + # set(PELIBS) else() list(APPEND ALLEXECS ${PACKAGE}) endif(lib) @@ -306,7 +328,10 @@ macro(ALICE_BuildPackage) set(${MODULE}INC "${EINCLUDE}" PARENT_SCOPE) list(APPEND INCLUDEFILES ${PEXPORTDEST}) if(WITHDICT) - ALICE_SetPackageVariable(PDS "DS" "G__${PACKAGE}.cxx" "G__${PACKAGE}.cxx") + # Replace dots in file name with underscores, or rootcint will + # write invalid code (namespace names with dots in them) + string(REPLACE "." "_" ESC_PACKAGE ${PACKAGE}) + ALICE_SetPackageVariable(PDS "DS" "G__${ESC_PACKAGE}.cxx" "G__${ESC_PACKAGE}.cxx") ALICE_GenerateDictionary() else() if(lib) @@ -327,7 +352,8 @@ endmacro(ALICE_BuildPackage) macro(ALICE_BuildModule) - + # message(STATUS "${MODULE}") + execute_process(COMMAND ${CMAKE_COMMAND} -E echo_append "-- ${MODULE}:") add_definitions(-D_MODULE_="${MODULE}") foreach(PACKAGEFILE ${PACKAGES}) set(lib) @@ -336,6 +362,7 @@ macro(ALICE_BuildModule) string(REGEX MATCH "CMakebin" bin "${PACKAGEFILE}") get_filename_component(PACKAGE ${PACKAGEFILE} NAME) string(REGEX REPLACE "^CMake(lib|bin)(.*)\\.pkg" "\\2" PACKAGE "${PACKAGE}") + execute_process(COMMAND ${CMAKE_COMMAND} -E echo_append " ${PACKAGE}") if(ALICEDEV) message("Adding package ${PACKAGE} in ${MODULE}") endif(ALICEDEV) @@ -352,6 +379,7 @@ macro(ALICE_BuildModule) endif(NOT EXCLUDEPACKAGE) endforeach(PACKAGEFILE) ALICE_CheckModule() + execute_process(COMMAND ${CMAKE_COMMAND} -E echo " done") endmacro(ALICE_BuildModule) macro(ALICE_GenerateDictionary) @@ -374,7 +402,20 @@ macro(ALICE_GenerateDictionary) separate_arguments(DCINTHDRS) separate_arguments(DDH) # Format neccesary arguments + set(ROOT6_ALPHA "5.99.1") + string(REGEX REPLACE "/0*" "." ROOT_DOTVERSION ${ROOT_VERSION}) + if(ROOT_DOTVERSION VERSION_GREATER ROOT6_ALPHA) + # For current ROOT6-alpha - without proper PCM support - we need to + # give the _full_ path for all include paths, so that libCling can + # later attach those to the internal include path of the interpreter + # and so that the interpreter can parse the header files. + # + # THIS SHOULD BE A TEMPORARY HACK! + ALICE_Format(DINC "-I${PROJECT_SOURCE_DIR}/" "" + "${DINC};${CMAKE_INCLUDE_EXPORT_DIRECTORY}") + else() ALICE_Format(DINC "-I" "" "${DINC};${CMAKE_INCLUDE_EXPORT_DIRECTORY}") + endif(ROOT_DOTVERSION VERSION_GREATER ROOT6_ALPHA) set_source_files_properties(${PDS} PROPERTIES GENERATED TRUE) set_source_files_properties(${PDS} PROPERTIES COMPILE_FLAGS "-w") add_custom_command(OUTPUT ${PDS} @@ -389,12 +430,12 @@ endmacro(ALICE_GenerateDictionary) macro(ALICE_BuildLibrary) - ALICE_DevFlagsOutput() set(CMAKE_CXX_FLAGS "${PEDEFINE} ${PCXXFLAGS}") set(CMAKE_C_FLAGS "${PEDEFINE} ${PCFLAGS}") - set(CMAKE_Fortran_FLAGS ${PEDEFINE} ${PFFLAGS}) + set(CMAKE_Fortran_FLAGS "${PEDEFINE} ${PFFLAGS}") set(CMAKE_SHARED_LINKER_FLAGS ${PSOFLAGS}) set(CMAKE_MODULE_LINKER_FLAGS ${PLDFLAGS}) + ALICE_DevFlagsOutput() separate_arguments(PINC) @@ -413,7 +454,8 @@ macro(ALICE_BuildLibrary) include_directories(SYSTEM ${ROOTINCDIR}) include_directories(${PINC}) include_directories(${EINCLUDE}) - include_directories(${CMAKE_INCLUDE_EXPORT_DIRECTORY}) + include_directories(${CMAKE_INCLUDE_EXPORT_DIRECTORY}/FromTemplate) + include_directories(${AliRoot_SOURCE_DIR}) add_library(${PACKAGE} SHARED ${PCS} ${PFS} ${PS} ${PDS}) set_target_properties(${PACKAGE} PROPERTIES SUFFIX .so) @@ -448,12 +490,13 @@ endmacro(ALICE_BuildLibrary) macro(ALICE_BuildExecutable) - ALICE_DevFlagsOutput() set(CMAKE_CXX_FLAGS "${PEDEFINE} ${PCXXFLAGS} ${EXEFLAGS}") set(CMAKE_C_FLAGS "${PEDEFINE} ${PCFLAGS} ${EXEFLAGS}") set(CMAKE_Fortran_FLAGS "${PEDEFINE} ${PFFLAGS} ${EXEFLAGS}") set(CMAKE_SHARED_LINKER_FLAGS ${PSOFLAGS}) set(CMAKE_MODULE_LINKER_FLAGS ${PLDFLAGS}) + set(CMAKE_EXE_LINKER_FLAGS ${PLDFLAGS}) + ALICE_DevFlagsOutput() separate_arguments(PINC) separate_arguments(EINCLUDE) @@ -542,8 +585,8 @@ macro(ALICE_CopyHeaders) foreach(header ${HEADERS}) get_filename_component( header_name ${header} NAME ) add_custom_command(OUTPUT ${PEXPORTDEST}/${header_name} - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/${MODULE}/${header} ${PEXPORTDEST}/${header_name} - DEPENDS ${CMAKE_SOURCE_DIR}/${MODULE}/${header}) + COMMAND ${CMAKE_COMMAND} -E copy ${AliRoot_SOURCE_DIR}/${MODULE}/${header} ${PEXPORTDEST}/${header_name} + DEPENDS ${AliRoot_SOURCE_DIR}/${MODULE}/${header}) list(APPEND _headersdep ${PEXPORTDEST}/${header_name}) install(FILES ${header} DESTINATION include) endforeach(header) @@ -562,26 +605,27 @@ macro(ALICE_GenerateLinkDef) endforeach(class) add_custom_command(OUTPUT ${PDAL} - COMMAND sh ${CMAKE_SOURCE_DIR}/cmake/GenerateLinkDef.sh ${PCLASSES} > ${PDAL} - DEPENDS ${PCINTHDRS} ${CMAKE_SOURCE_DIR}/cmake/GenerateLinkDef.sh) + COMMAND sh ${AliRoot_SOURCE_DIR}/cmake/GenerateLinkDef.sh ${PCLASSES} > ${PDAL} + DEPENDS ${PCINTHDRS} ${AliRoot_SOURCE_DIR}/cmake/GenerateLinkDef.sh) endmacro(ALICE_GenerateLinkDef) macro(ALICE_BuildPAR) - if(EXISTS ${CMAKE_SOURCE_DIR}/${MODULE}/PROOF-INF.${PACKAGE}) + if(EXISTS ${AliRoot_SOURCE_DIR}/${MODULE}/PROOF-INF.${PACKAGE}) set(PARSRCS) - foreach(file ${SRCS} ${HDRS} ${FSRCS} ${DHDR}) + foreach(file ${SRCS} ${HDRS} ${FSRCS} ${DHDR} ${OTHERS} ) get_filename_component(srcdir ${file} PATH) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}/${file}-par COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}/${srcdir} COMMAND cp -pR ${file} ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}/${file} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) list(APPEND PARSRCS ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}/${file}-par) - endforeach(file ${SRCS} ${HDRS} ${FSRCS} ${DHDR}) + endforeach(file ${SRCS} ${HDRS} ${FSRCS} ${DHDR} ${OTHERS} ) + # message(STATUS "saveEINCLUDE=${saveEINCLUDE}") add_custom_target(${PACKAGE}.par - COMMAND sed -e 's/include .\(ROOTSYS\)\\/test\\/Makefile.arch/include Makefile.arch/\; s/PACKAGE = .*/PACKAGE = ${PACKAGE}/\; s,SRCS *=.*,SRCS = ${SRCS},\;' < Makefile | sed -e 's,HDRS *=.*,HDRS = ${HDRS},\; s,FSRCS *=.*,FSRCS = ${FSRCS},\; s,DHDR *=.*,DHDR = ${DHDR},' > ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}/Makefile - COMMAND cp -pR ${ROOTSYS}/test/Makefile.arch ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}/Makefile.arch + COMMAND sed -e 's,include ..ROOTSYS./\\\(etc\\|test\\\)/Makefile.arch,include Makefile.arch,\; s/PACKAGE = .*/PACKAGE = ${PACKAGE}/\; s,SRCS *=.*,SRCS = ${SRCS},\;' < Makefile | sed -e 's,HDRS *=.*,HDRS = ${HDRS},\; s,FSRCS *=.*,FSRCS = ${FSRCS},\; s,DHDR *=.*,DHDR = ${DHDR},\; s,EINCLUDE *:=.*,EINCLUDE := ${saveEINCLUDE},' > ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}/Makefile + COMMAND cp -pR `root-config --etcdir`/Makefile.arch ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}/Makefile.arch COMMAND cp -pR PROOF-INF.${PACKAGE} ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}/PROOF-INF # COMMAND cp -pR lib${PACKAGE}.pkg ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE} COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_CURRENT_BINARY_DIR} tar --exclude=.svn -czhf ${CMAKE_BINARY_DIR}/${PACKAGE}.par ${PACKAGE} @@ -607,7 +651,7 @@ macro(ALICE_BuildPAR) add_dependencies(test-par-all test-${PACKAGE}.par) add_dependencies(test-${MODULE}-par-all test-${PACKAGE}.par) - endif(EXISTS ${CMAKE_SOURCE_DIR}/${MODULE}/PROOF-INF.${PACKAGE}) + endif(EXISTS ${AliRoot_SOURCE_DIR}/${MODULE}/PROOF-INF.${PACKAGE}) # endif(EXISTS ${ALICE_ROOT}/${MODULE}/PROOF-INF.${PACKAGE}) endmacro(ALICE_BuildPAR)