diff --git a/CMakeLists.txt b/CMakeLists.txt index d218a46334703f7890a9123fa6b008a1a9d9711c..9957a707970d24442c771cd6074657545225acba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,6 @@ option(DD4HEP_USE_GEANT4 "Enable the simulation part based on Geant4" OFF) option(DD4HEP_USE_GEAR "Build gear wrapper for backward compatibility" OFF) option(DD4HEP_USE_LCIO "Build lcio extensions" OFF) option(BUILD_TESTING "Enable and build tests" ON) -option(DD4HEP_USE_CXX11 "Build DD4hep using c++11" ON) option(DD4HEP_USE_CXX14 "Build DD4hep using c++14" OFF) option(CMAKE_MACOSX_RPATH "Build with rpath on macos" ON) # diff --git a/cmake/DD4hepBuild.cmake b/cmake/DD4hepBuild.cmake index 317d5bbf8d4b12b0286550aed2f206a9d3437753..c1b8c2c31ce4420077f457319f5b9da371a3e258 100644 --- a/cmake/DD4hepBuild.cmake +++ b/cmake/DD4hepBuild.cmake @@ -33,25 +33,38 @@ endmacro(dd4hep_to_parent_scope) # #--------------------------------------------------------------------------------------------------- macro(dd4hep_set_compiler_flags) + CHECK_CXX_COMPILER_FLAG("-std=c++14" FLAG_CXX14) + CHECK_CXX_COMPILER_FLAG("-std=c++11" FLAG_CXX11) + CHECK_CXX_COMPILER_FLAG("-ftls-model=global-dynamic" FLAG_FTLS) + + if (NOT FLAG_CXX11) + message( FATAL_ERROR "The provided compiler does not support the C++11 standard" ) + endif() + + if (NOT FLAG_FTLS) + message( FATAL_ERROR "The provided compiler does not support the flag -ftls-model=global-dynamic" ) + endif() + if ( DD4HEP_USE_CXX14 ) set ( CMAKE_CXX_FLAGS "-std=c++14 -ftls-model=global-dynamic") set ( DD4HEP_USE_CXX11 OFF ) set ( DD4HEP_USE_STDCXX 14 ) add_definitions(-DDD4HEP_USE_STDCXX=14) - elseif ( DD4HEP_USE_CXX11 ) + else() set ( CMAKE_CXX_FLAGS "-std=c++11 -ftls-model=global-dynamic") + set ( DD4HEP_USE_CXX14 OFF ) set ( DD4HEP_USE_STDCXX 11 ) add_definitions(-DDD4HEP_USE_STDCXX=11) - else() - set( CMAKE_CXX_FLAGS ) endif() set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wshadow -Wformat-security -Wno-long-long -Wdeprecated") + CHECK_CXX_COMPILER_FLAG("-fdiagnostics-color=always" FLAG_COLOR) + if (FLAG_COLOR) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=always") + endif() + if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined") - if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.9) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=always") - endif() endif() if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") @@ -250,7 +263,6 @@ function( dd4hep_print_cmake_options ) dd4hep_print ( "| Requires LCIO_DIR to be set |") dd4hep_print ( "| or LCIO in CMAKE_MODULE_PATH |") dd4hep_print ( "| DD4HEP_USE_GEAR Build gear wrapper for backward compatibility OFF |") - dd4hep_print ( "| DD4HEP_USE_CXX11 Build DD4hep using c++11 OFF |") dd4hep_print ( "| DD4HEP_USE_CXX14 Build DD4hep using c++14 OFF |") dd4hep_print ( "| BUILD_TESTING Enable and build tests ON |") dd4hep_print ( "| DD4HEP_USE_PYROOT Enable 'Detector Builders' based on PyROOT OFF |")