diff --git a/.dd4hep-ci.d/compile_and_test.sh b/.dd4hep-ci.d/compile_and_test.sh index 66ed5baf4525ff42f6a15dbc7bae8b05c1ef607d..915070b29e9aff3526f98c3a5846403e9b9431a1 100755 --- a/.dd4hep-ci.d/compile_and_test.sh +++ b/.dd4hep-ci.d/compile_and_test.sh @@ -8,7 +8,7 @@ source /DD4hep/.dd4hep-ci.d/init_x86_64.sh cd /DD4hep mkdir build cd build -cmake -GNinja -D DD4HEP_USE_GEANT4=ON -D DD4HEP_USE_BOOST=ON -DBoost_NO_BOOST_CMAKE=ON -D DD4HEP_USE_LCIO=ON -D BUILD_TESTING=ON -D Geant4_DIR=$G4INSTALL/lib64/Geant4-10.2.2 -D DD4HEP_USE_CXX11=ON -DCMAKE_BUILD_TYPE=Release -DROOT_DIR=$ROOTSYS .. && \ +cmake -GNinja -D DD4HEP_USE_GEANT4=ON -D DD4HEP_USE_BOOST=ON -DBoost_NO_BOOST_CMAKE=ON -D DD4HEP_USE_LCIO=ON -D BUILD_TESTING=ON -D Geant4_DIR=$G4INSTALL/lib64/Geant4-10.2.2 -D DD4HEP_USE_CXX11=ON -DCMAKE_BUILD_TYPE=Release -DROOT_DIR=$ROOTSYS -DCMAKE_CXX_FLAGS="-fdiagnostics-color=always" .. && \ ninja && \ ninja install && \ . ../bin/thisdd4hep.sh && \ diff --git a/cmake/DD4hepBuild.cmake b/cmake/DD4hepBuild.cmake index 3aa0e710af88cded7eb24ed2492b859691ddd9b9..c113f2c49ef4e44c78e19efd8489447317927f03 100644 --- a/cmake/DD4hepBuild.cmake +++ b/cmake/DD4hepBuild.cmake @@ -34,43 +34,51 @@ endmacro(dd4hep_to_parent_scope) #--------------------------------------------------------------------------------------------------- macro(dd4hep_set_compiler_flags) include(CheckCXXCompilerFlag) - 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) + SET(COMPILER_FLAGS -Wall -Wextra -pedantic -Wshadow -Wformat-security -Wno-long-long -Wdeprecated -fdiagnostics-color=auto ) + + FOREACH( FLAG ${COMPILER_FLAGS} ) + CHECK_CXX_COMPILER_FLAG( "${FLAG}" CXX_FLAG_WORKS_${FLAG} ) + IF( ${CXX_FLAG_WORKS_${FLAG}} ) + MESSAGE ( STATUS "Adding ${FLAG} to CXX_FLAGS" ) + SET ( CMAKE_CXX_FLAGS "${FLAG} ${CMAKE_CXX_FLAGS} ") + ELSE() + MESSAGE ( STATUS "NOT Adding ${FLAG} to CXX_FLAGS" ) + ENDIF() + ENDFOREACH() + + CHECK_CXX_COMPILER_FLAG("-std=c++14" CXX_FLAG_WORKS_C++14) + CHECK_CXX_COMPILER_FLAG("-std=c++11" CXX_FLAG_WORKS_C++11) + CHECK_CXX_COMPILER_FLAG("-ftls-model=global-dynamic" CXX_FLAG_WORKS_FTLS_global-dynamic) + + if (NOT CXX_FLAG_WORKS_C++11) message( FATAL_ERROR "The provided compiler does not support the C++11 standard" ) endif() - if (NOT FLAG_FTLS) + if (NOT CXX_FLAG_WORKS_FTLS_global-dynamic) 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 ( CMAKE_CXX_FLAGS "-std=c++14 -ftls-model=global-dynamic ${CMAKE_CXX_FLAGS} ") set ( DD4HEP_USE_CXX11 OFF ) set ( DD4HEP_USE_STDCXX 14 ) add_definitions(-DDD4HEP_USE_STDCXX=14) else() - set ( CMAKE_CXX_FLAGS "-std=c++11 -ftls-model=global-dynamic") + set ( CMAKE_CXX_FLAGS "-std=c++11 -ftls-model=global-dynamic ${CMAKE_CXX_FLAGS} ") set ( DD4HEP_USE_CXX14 OFF ) set ( DD4HEP_USE_STDCXX 11 ) add_definitions(-DDD4HEP_USE_STDCXX=11) 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") - endif() + IF(("${CMAKE_CXX_COMPILER_ID}" EQUAL "GNU") OR ("${CMAKE_CXX_COMPILER_ID}" EQUAL "Clang")) + SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined") + ENDIF() - if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-undefined,error") - endif() + IF("${CMAKE_CXX_COMPILER_ID}" EQUAL "AppleClang") + SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-undefined,error") + ENDIF() #rpath treatment if (APPLE)