Skip to content

Commit f11e96f

Browse files
author
Roberto Di Remigio
committed
Disable -std=c++11 for Intel compilers older than 14.0.0
1 parent f3fbc93 commit f11e96f

File tree

2 files changed

+67
-56
lines changed

2 files changed

+67
-56
lines changed

cmake/compilers/CXXFlags.cmake

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,33 @@ if(NOT DEFINED DEFUALT_CXX_FLAGS_SET OR RESET_FLAGS)
55
else()
66
set(CMAKE_CXX_FLAGS "-fPIC -std=gnu++98")
77
endif()
8-
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g3 -DDEBUG -Wall -Wextra -Winit-self -Woverloaded-virtual -Wuninitialized -Wmissing-declarations -Wwrite-strings")
9-
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG -Wno-unused")
8+
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3 -DDEBUG -Wall -Wextra -Winit-self -Woverloaded-virtual -Wuninitialized -Wmissing-declarations -Wwrite-strings")
9+
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -Wno-unused")
1010
if(ENABLE_VECTORIZATION)
1111
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_ARCHITECTURE_FLAGS} ${DEFINITIONS}")
1212
endif()
1313
if(ENABLE_CODE_COVERAGE)
1414
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
15-
set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -fprofile-arcs -ftest-coverage")
15+
set(CMAKE_CXX_LINK_FLAGS "-fprofile-arcs -ftest-coverage")
1616
endif()
1717
endif()
1818

1919
if(CMAKE_CXX_COMPILER_ID MATCHES Intel)
20-
if(HAS_CXX11_SUPPORT)
21-
set(CMAKE_CXX_FLAGS "-fPIC ${CXX11_COMPILER_FLAGS}")
20+
# Compilation of Boost uncovers some bugs with Intel's support for C++11
21+
# For Intel compilers older that 14.0.0 continue using -std=gnu++98
22+
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE ICPC_VERSION)
23+
if(ICPC_VERSION VERSION_LESS 14.0.0)
24+
set(CMAKE_CXX_FLAGS "-fPIC -std=gnu++98")
2225
else()
23-
set(CMAKE_CXX_FLAGS "-fPIC -std=gnu++98")
26+
if(HAS_CXX11_SUPPORT)
27+
set(CMAKE_CXX_FLAGS "-fPIC ${CXX11_COMPILER_FLAGS}")
28+
else()
29+
set(CMAKE_CXX_FLAGS "-fPIC -std=gnu++98")
30+
endif()
2431
endif()
25-
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -debug -DDEBUG -Wall -Wuninitialized -Wno-unknown-pragmas") # -Weffc++")
26-
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG")
27-
set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -shared-intel")
32+
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -debug -DDEBUG -Wall -Wuninitialized -Wno-unknown-pragmas") # -Weffc++")
33+
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
34+
set(CMAKE_CXX_LINK_FLAGS "-shared-intel")
2835
if(ENABLE_VECTORIZATION)
2936
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_ARCHITECTURE_FLAGS} ${DEFINITIONS}")
3037
endif()
@@ -58,8 +65,8 @@ if(NOT DEFINED DEFUALT_CXX_FLAGS_SET OR RESET_FLAGS)
5865
else()
5966
set(CMAKE_CXX_FLAGS "-fPIC -std=gnu++98")
6067
endif()
61-
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -DDEBUG -Wall -Wextra -Winit-self -Woverloaded-virtual -Wuninitialized -Wmissing-declarations -Wwrite-strings -Weffc++ -Wdocumentation")
62-
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG -Wno-unused")
68+
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -DDEBUG -Wall -Wextra -Winit-self -Woverloaded-virtual -Wuninitialized -Wmissing-declarations -Wwrite-strings -Weffc++ -Wdocumentation")
69+
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -Wno-unused")
6370
if(ENABLE_VECTORIZATION)
6471
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_ARCHITECTURE_FLAGS} ${DEFINITIONS}")
6572
endif()

cmake/compilers/CheckCXX11Features.cmake

Lines changed: 49 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -45,33 +45,12 @@
4545
# each other (i.e. only one may be present).
4646
#
4747

48-
if (NOT CMAKE_CXX_COMPILER_LOADED)
48+
if(NOT CMAKE_CXX_COMPILER_LOADED)
4949
message(FATAL_ERROR "CheckCXX11Features modules only works if language CXX is enabled")
50-
endif ()
51-
52-
#
53-
### Check for needed compiler flags
54-
#
55-
include(CheckCXXCompilerFlag)
56-
check_cxx_compiler_flag("-std=c++11" _HAS_CXX11_FLAG)
57-
if (NOT _HAS_CXX11_FLAG)
58-
check_cxx_compiler_flag("-std=c++0x" _HAS_CXX0X_FLAG)
59-
endif ()
60-
61-
set(HAS_CXX11_SUPPORT FALSE)
62-
if (_HAS_CXX11_FLAG OR _HAS_CXX0X_FLAG)
63-
set(HAS_CXX11_SUPPORT TRUE)
64-
add_definitions(-DHAS_CXX11)
6550
endif()
6651

67-
if (_HAS_CXX11_FLAG)
68-
set(CXX11_COMPILER_FLAGS "-std=c++11")
69-
elseif (_HAS_CXX0X_FLAG)
70-
set(CXX11_COMPILER_FLAGS "-std=c++0x")
71-
endif ()
72-
7352
function(cxx11_check_feature FEATURE_NAME RESULT_VAR)
74-
if (NOT DEFINED ${RESULT_VAR})
53+
if(NOT DEFINED ${RESULT_VAR})
7554
set(_bindir "${CMAKE_CURRENT_BINARY_DIR}/check_cxx11/cxx11_${FEATURE_NAME}")
7655

7756
set(_location "${PROJECT_SOURCE_DIR}/cmake/compilers/CheckCXX11Features")
@@ -129,28 +108,53 @@ function(cxx11_check_feature FEATURE_NAME RESULT_VAR)
129108
endif (${RESULT_VAR})
130109
set(${RESULT_VAR} ${${RESULT_VAR}} CACHE INTERNAL "C++11 support for ${_LOG_NAME}")
131110
set(feature_list ${feature_list} CACHE INTERNAL "")
132-
endif (NOT DEFINED ${RESULT_VAR})
111+
endif(NOT DEFINED ${RESULT_VAR})
133112
endfunction(cxx11_check_feature)
134113

135-
cxx11_check_feature("__func__" HAS_CXX11_FUNC)
136-
cxx11_check_feature("auto" HAS_CXX11_AUTO)
137-
cxx11_check_feature("auto_ret_type" HAS_CXX11_AUTO_RET_TYPE)
138-
cxx11_check_feature("class_override_final" HAS_CXX11_CLASS_OVERRIDE)
139-
cxx11_check_feature("constexpr" HAS_CXX11_CONSTEXPR)
140-
cxx11_check_feature("cstdint" HAS_CXX11_CSTDINT_H)
141-
cxx11_check_feature("decltype" HAS_CXX11_DECLTYPE)
142-
cxx11_check_feature("initializer_list" HAS_CXX11_INITIALIZER_LIST)
143-
cxx11_check_feature("lambda" HAS_CXX11_LAMBDA)
144-
cxx11_check_feature("long_long" HAS_CXX11_LONG_LONG)
145-
cxx11_check_feature("nullptr" HAS_CXX11_NULLPTR)
146-
cxx11_check_feature("regex" HAS_CXX11_LIB_REGEX)
147-
cxx11_check_feature("rvalue-references" HAS_CXX11_RVALUE_REFERENCES)
148-
cxx11_check_feature("sizeof_member" HAS_CXX11_SIZEOF_MEMBER)
149-
cxx11_check_feature("static_assert" HAS_CXX11_STATIC_ASSERT)
150-
cxx11_check_feature("variadic_templates" HAS_CXX11_VARIADIC_TEMPLATES)
114+
# Compilation of Boost uncovers some bugs with Intel's support for C++11
115+
# For Intel compilers older that 14.0.0 continue using -std=gnu++98
116+
if(CMAKE_CXX_COMPILER_ID MATCHES Intel)
117+
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE ICPC_VERSION)
118+
endif()
151119

152-
# Print list of supported features
153-
message(STATUS "Found following supported C++11 features:")
154-
foreach(FEATURE ${feature_list})
155-
message (STATUS " ${FEATURE}")
156-
endforeach()
120+
if(ICPC_VERSION VERSION_LESS 14.0.0)
121+
message(STATUS "Buggy compiler support for C++11. Using older standard.")
122+
else()
123+
# Check which compiler flag is valid for the C++11 standard
124+
include(CheckCXXCompilerFlag)
125+
check_cxx_compiler_flag("-std=c++11" _HAS_CXX11_FLAG)
126+
set(CXX11_COMPILER_FLAGS "-std=c++11")
127+
if(NOT _HAS_CXX11_FLAG)
128+
check_cxx_compiler_flag("-std=c++0x" _HAS_CXX0X_FLAG)
129+
set(CXX11_COMPILER_FLAGS "-std=c++0x")
130+
endif()
131+
132+
set(HAS_CXX11_SUPPORT FALSE)
133+
if(_HAS_CXX11_FLAG OR _HAS_CXX0X_FLAG)
134+
set(HAS_CXX11_SUPPORT TRUE)
135+
add_definitions(-DHAS_CXX11)
136+
endif()
137+
138+
cxx11_check_feature("__func__" HAS_CXX11_FUNC)
139+
cxx11_check_feature("auto" HAS_CXX11_AUTO)
140+
cxx11_check_feature("auto_ret_type" HAS_CXX11_AUTO_RET_TYPE)
141+
cxx11_check_feature("class_override_final" HAS_CXX11_CLASS_OVERRIDE)
142+
cxx11_check_feature("constexpr" HAS_CXX11_CONSTEXPR)
143+
cxx11_check_feature("cstdint" HAS_CXX11_CSTDINT_H)
144+
cxx11_check_feature("decltype" HAS_CXX11_DECLTYPE)
145+
cxx11_check_feature("initializer_list" HAS_CXX11_INITIALIZER_LIST)
146+
cxx11_check_feature("lambda" HAS_CXX11_LAMBDA)
147+
cxx11_check_feature("long_long" HAS_CXX11_LONG_LONG)
148+
cxx11_check_feature("nullptr" HAS_CXX11_NULLPTR)
149+
cxx11_check_feature("regex" HAS_CXX11_LIB_REGEX)
150+
cxx11_check_feature("rvalue-references" HAS_CXX11_RVALUE_REFERENCES)
151+
cxx11_check_feature("sizeof_member" HAS_CXX11_SIZEOF_MEMBER)
152+
cxx11_check_feature("static_assert" HAS_CXX11_STATIC_ASSERT)
153+
cxx11_check_feature("variadic_templates" HAS_CXX11_VARIADIC_TEMPLATES)
154+
155+
# Print list of supported features
156+
message(STATUS "Found following supported C++11 features:")
157+
foreach(FEATURE ${feature_list})
158+
message (STATUS " ${FEATURE}")
159+
endforeach()
160+
endif()

0 commit comments

Comments
 (0)