浏览代码

cmake: Set C standard to ISO C17

- Sets CMAKE_C_STANDARD to 17
- Disables C extensions (e.g. gnu17) to force ISO C on macOS/Windows
- Fixes language properties in cmake 3.0 not being set correctly
- Sets Xcode attributes to c17
derrod 2 年之前
父节点
当前提交
35d42f77d6
共有 3 个文件被更改,包括 24 次插入14 次删除
  1. 8 2
      cmake/Modules/CompilerConfig.cmake
  2. 14 8
      cmake/macos/compilerconfig.cmake
  3. 2 4
      cmake/macos/xcode.cmake

+ 8 - 2
cmake/Modules/CompilerConfig.cmake

@@ -5,6 +5,13 @@ set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 set(CMAKE_CXX_EXTENSIONS OFF)
 
+set(CMAKE_C_STANDARD 17)
+set(CMAKE_C_STANDARD_REQUIRED ON)
+# TODO/FIXME: Investigate disabling C extensions on Linux/POSIX
+if(OS_MACOS OR NOT OS_POSIX)
+  set(CMAKE_C_EXTENSIONS OFF)
+endif()
+
 # Set compile options for MSVC
 if(OS_WINDOWS AND MSVC)
   if(NOT EXISTS "${CMAKE_BINARY_DIR}/ALL_BUILD.vcxproj.user")
@@ -66,8 +73,7 @@ if(OS_WINDOWS AND MSVC)
     /utf-8
     /permissive-
     /Zc:__cplusplus
-    /Zc:preprocessor
-    /std:c17)
+    /Zc:preprocessor)
 
   add_link_options(
     "LINKER:/Brepro" "LINKER:/OPT:REF" "LINKER:/WX" "$<$<NOT:$<EQUAL:${CMAKE_SIZEOF_VOID_P},8>>:LINKER\:/SAFESEH\:NO>"

+ 14 - 8
cmake/macos/compilerconfig.cmake

@@ -14,6 +14,20 @@ include(ccache)
 include(compiler_common)
 include(simd)
 
+# Set C17 / C++17 standards as required and disable extensions
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_EXTENSIONS OFF)
+
+set(CMAKE_C_STANDARD 17)
+set(CMAKE_C_STANDARD_REQUIRED ON)
+set(CMAKE_C_EXTENSIONS OFF)
+
+# Set symbols to be hidden by default for C and C++
+set(CMAKE_CXX_VISIBILITY_PRESET hidden)
+set(CMAKE_C_VISIBILITY_PRESET hidden)
+set(CMAKE_VISIBILITY_INLINES_HIDDEN TRUE)
+
 # Add default C and C++ compiler options if Xcode generator is not used
 if(NOT XCODE)
   list(
@@ -31,14 +45,6 @@ if(NOT XCODE)
     -fno-strict-aliasing
     -Wno-error=shorten-64-to-32)
 
-  # Set symbols to be hidden by default for C and C++
-  set(CMAKE_CXX_STANDARD 17)
-  set(CMAKE_CXX_STANDARD_REQUIRED ON)
-
-  set(CMAKE_CXX_VISIBILITY_PRESET hidden)
-  set(CMAKE_C_VISIBILITY_PRESET hidden)
-  set(CMAKE_VISIBILITY_INLINES_HIDDEN TRUE)
-
   # Enable stripping of dead symbols when not building for Debug configuration
   set(_release_configs RelWithDebInfo Release MinSizeRel)
   if(CMAKE_BUILD_TYPE IN_LIST _release_configs)

+ 2 - 4
cmake/macos/xcode.cmake

@@ -85,10 +85,8 @@ set(CMAKE_XCODE_ATTRIBUTE_LINKER_DISPLAYS_MANGLED_NAMES[variant=Debug] YES)
 set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC NO)
 # Disable strict aliasing
 set(CMAKE_XCODE_ATTRIBUTE_GCC_STRICT_ALIASING NO)
-# cmake-format: off
-# Re-enable once the bad goto statements are fixed
-# set(CMAKE_XCODE_ATTRIBUTE_GCC_C_LANGUAGE_STANDARD c99)
-# cmake-format: on
+# Set C language default to C17
+set(CMAKE_XCODE_ATTRIBUTE_GCC_C_LANGUAGE_STANDARD c17)
 # Set C++ language default to c++17
 set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD c++17)
 # Enable support for module imports in ObjC