mirror of
https://github.com/reactos/CMake.git
synced 2025-01-23 12:15:20 +00:00
Merge topic 'gcc-features'
37ed860a GNU C++: record that -fvisibility-inlines-hidden is available since 4.0 94a8ee6f GNU C: record that C99 is available since at least 3.4 940bf6a4 Tests/Module/WCDH: only use -Werror=undef compiler flag if actually supported f26ca5a1 Tests/Module/WCDH: write multi_file_compiler_detection.h before using it
This commit is contained in:
commit
fb26fcb261
@ -338,6 +338,14 @@ versions specified for each:
|
||||
* ``SunPro``: Oracle SolarisStudio version 12.4.
|
||||
* ``Intel``: Intel compiler versions 12.1 through 17.0.
|
||||
|
||||
CMake is currently aware of the :prop_tgt:`C standards <C_STANDARD>`
|
||||
and :prop_gbl:`compile features <CMAKE_C_KNOWN_FEATURES>` available from
|
||||
the following :variable:`compiler ids <CMAKE_<LANG>_COMPILER_ID>` as of the
|
||||
versions specified for each:
|
||||
|
||||
* all compilers and versions listed above for C++
|
||||
* ``GNU``: GNU compiler versions 3.4 through 5.0.
|
||||
|
||||
CMake is currently aware of the :prop_tgt:`CUDA standards <CUDA_STANDARD>`
|
||||
from the following :variable:`compiler ids <CMAKE_<LANG>_COMPILER_ID>` as of the
|
||||
versions specified for each:
|
||||
|
5
Help/release/dev/gcc-features.rst
Normal file
5
Help/release/dev/gcc-features.rst
Normal file
@ -0,0 +1,5 @@
|
||||
gcc-features
|
||||
------------
|
||||
|
||||
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
|
||||
is now aware of the availability of C99 in gcc since version 3.4.
|
@ -1,5 +1,5 @@
|
||||
|
||||
set(_cmake_oldestSupported "(__GNUC__ * 100 + __GNUC_MINOR__) >= 404")
|
||||
set(_cmake_oldestSupported "(__GNUC__ * 100 + __GNUC_MINOR__) >= 304")
|
||||
|
||||
# GNU 4.7 correctly sets __STDC_VERSION__ to 201112L, but GNU 4.6 sets it
|
||||
# to 201000L. As the former is strictly greater than the latter, test only
|
||||
@ -8,10 +8,10 @@ set(_cmake_oldestSupported "(__GNUC__ * 100 + __GNUC_MINOR__) >= 404")
|
||||
# to the distinction between __cplusplus and __GXX_EXPERIMENTAL_CXX0X__ tests.
|
||||
set(GNU46_C11 "(__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201000L")
|
||||
set(_cmake_feature_test_c_static_assert "${GNU46_C11}")
|
||||
# Since 4.4 at least:
|
||||
set(GNU44_C99 "(__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L")
|
||||
set(_cmake_feature_test_c_restrict "${GNU44_C99}")
|
||||
set(_cmake_feature_test_c_variadic_macros "${GNU44_C99}")
|
||||
# Since 3.4 at least:
|
||||
set(GNU34_C99 "(__GNUC__ * 100 + __GNUC_MINOR__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L")
|
||||
set(_cmake_feature_test_c_restrict "${GNU34_C99}")
|
||||
set(_cmake_feature_test_c_variadic_macros "${GNU34_C99}")
|
||||
|
||||
set(GNU_C90 "${_cmake_oldestSupported}")
|
||||
set(_cmake_feature_test_c_function_prototypes "${GNU_C90}")
|
||||
|
@ -4,12 +4,12 @@ __compiler_gnu(C)
|
||||
if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.5)
|
||||
set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
|
||||
set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
|
||||
elseif (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.4)
|
||||
elseif (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
|
||||
set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c89")
|
||||
set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu89")
|
||||
endif()
|
||||
|
||||
if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.4)
|
||||
if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
|
||||
set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
|
||||
set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
|
||||
endif()
|
||||
@ -22,7 +22,7 @@ elseif (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.6)
|
||||
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu1x")
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.4)
|
||||
if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
|
||||
if (NOT CMAKE_C_COMPILER_FORCED)
|
||||
if (NOT CMAKE_C_STANDARD_COMPUTED_DEFAULT)
|
||||
message(FATAL_ERROR "CMAKE_C_STANDARD_COMPUTED_DEFAULT should be set for ${CMAKE_C_COMPILER_ID} (${CMAKE_C_COMPILER}) version ${CMAKE_C_COMPILER_VERSION}")
|
||||
@ -38,10 +38,9 @@ if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.4)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
macro(cmake_record_c_compile_features)
|
||||
set(_result 0)
|
||||
if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.4)
|
||||
if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
|
||||
if(_result EQUAL 0 AND CMAKE_C11_STANDARD_COMPILE_OPTION)
|
||||
_record_compiler_features_c(11)
|
||||
endif()
|
||||
|
@ -6,7 +6,7 @@ if (WIN32)
|
||||
set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fno-keep-inline-dllexport")
|
||||
endif()
|
||||
else()
|
||||
if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.2)
|
||||
if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0)
|
||||
set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
|
||||
endif()
|
||||
endif()
|
||||
|
@ -20,6 +20,17 @@ write_compiler_detection_header(
|
||||
${cxx_known_features} ${c_known_features}
|
||||
)
|
||||
|
||||
write_compiler_detection_header(
|
||||
FILE "${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files/multi_file_compiler_detection.h"
|
||||
PREFIX MULTI
|
||||
OUTPUT_FILES_VAR multi_files
|
||||
OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files/compiler_support"
|
||||
COMPILERS GNU Clang AppleClang MSVC SunPro Intel
|
||||
VERSION 3.1
|
||||
FEATURES
|
||||
${cxx_known_features} ${c_known_features}
|
||||
)
|
||||
|
||||
macro(set_defines target true_defs false_defs)
|
||||
set(defines)
|
||||
foreach(def ${true_defs})
|
||||
@ -57,7 +68,11 @@ if (CMAKE_C_COMPILE_FEATURES)
|
||||
|
||||
add_executable(C_undefined c_undefined.c)
|
||||
set_property(TARGET C_undefined PROPERTY C_STANDARD 90)
|
||||
target_compile_options(C_undefined PRIVATE -Werror=undef)
|
||||
include(CheckCCompilerFlag)
|
||||
check_c_compiler_flag(-Werror=undef use_error_undef)
|
||||
if (use_error_undef)
|
||||
target_compile_options(C_undefined PRIVATE -Werror=undef)
|
||||
endif()
|
||||
|
||||
add_executable(WriteCompilerDetectionHeader_C main.c)
|
||||
set_property(TARGET WriteCompilerDetectionHeader_C PROPERTY C_STANDARD 90)
|
||||
@ -116,17 +131,6 @@ add_executable(WriteCompilerDetectionHeader main.cpp)
|
||||
set_property(TARGET WriteCompilerDetectionHeader PROPERTY CXX_STANDARD 98)
|
||||
set_defines(WriteCompilerDetectionHeader "${true_defs}" "${false_defs}")
|
||||
|
||||
write_compiler_detection_header(
|
||||
FILE "${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files/multi_file_compiler_detection.h"
|
||||
PREFIX MULTI
|
||||
OUTPUT_FILES_VAR multi_files
|
||||
OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files/compiler_support"
|
||||
COMPILERS GNU Clang AppleClang MSVC SunPro Intel
|
||||
VERSION 3.1
|
||||
FEATURES
|
||||
${cxx_known_features} ${c_known_features}
|
||||
)
|
||||
|
||||
add_executable(multi_files multi_files.cpp)
|
||||
set_property(TARGET multi_files PROPERTY CXX_STANDARD 98)
|
||||
target_include_directories(multi_files PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files)
|
||||
|
Loading…
x
Reference in New Issue
Block a user