From da33d606e6f6563e8006ebac06e22194f1f27014 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 23 Apr 2026 15:47:58 -0400 Subject: [PATCH] PellesC: Add support for C language standards Issue: #21536 Inspired-by: Serguei E. Leontiev --- .../ci/configure_windows_pellesc_common.cmake | 2 ++ Modules/CMakeCCompilerId.c.in | 2 ++ Modules/Compiler/PellesC-C.cmake | 18 ++++++++++++++++++ Tests/CMakeLists.txt | 1 + Tests/CompileFeatures/c_std.h | 2 ++ 5 files changed, 25 insertions(+) diff --git a/.gitlab/ci/configure_windows_pellesc_common.cmake b/.gitlab/ci/configure_windows_pellesc_common.cmake index bc2cc5173a..7027e7c617 100644 --- a/.gitlab/ci/configure_windows_pellesc_common.cmake +++ b/.gitlab/ci/configure_windows_pellesc_common.cmake @@ -1,6 +1,8 @@ set(CMake_TEST_CXX OFF CACHE BOOL "") set(CMake_TEST_Java OFF CACHE BOOL "") +set(CMake_TEST_C_STANDARDS "90;99;11;17;23" CACHE STRING "") + set(configure_no_sccache 1) include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake") diff --git a/Modules/CMakeCCompilerId.c.in b/Modules/CMakeCCompilerId.c.in index 65d3bab50d..165376ddba 100644 --- a/Modules/CMakeCCompilerId.c.in +++ b/Modules/CMakeCCompilerId.c.in @@ -74,6 +74,8 @@ const char* info_language_extensions_default = "INFO" ":" "extensions_default[" defined(__TI_COMPILER_VERSION__) || defined(__RENESAS__)) && \ !defined(__STRICT_ANSI__) "ON" +#elif defined(__POCC__) && defined(__POCC__EXTENSIONS) + "ON" #else "OFF" #endif diff --git a/Modules/Compiler/PellesC-C.cmake b/Modules/Compiler/PellesC-C.cmake index c97fa64ced..4381e127e3 100644 --- a/Modules/Compiler/PellesC-C.cmake +++ b/Modules/Compiler/PellesC-C.cmake @@ -6,3 +6,21 @@ __compiler_pellesc(C) set(CMAKE_C_OUTPUT_EXTENSION ".obj") set(CMAKE_C_VERBOSE_FLAG "-V2") + +include (Compiler/CMakeCommonCompilerMacros) + +set(CMAKE_C90_STANDARD_COMPILE_OPTION "") # No C90-only mode. +set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON) +set(CMAKE_C99_STANDARD_COMPILE_OPTION -std=c99) +set(CMAKE_C99_EXTENSION_COMPILE_OPTION -std=c99 -Zx) +set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON) +set(CMAKE_C11_STANDARD_COMPILE_OPTION -std=c11) +set(CMAKE_C11_EXTENSION_COMPILE_OPTION -std=c11 -Zx) +set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON) +set(CMAKE_C17_STANDARD_COMPILE_OPTION -std=c17) +set(CMAKE_C17_EXTENSION_COMPILE_OPTION -std=c17 -Zx) +set(CMAKE_C23_STANDARD_COMPILE_OPTION -std=c23) +set(CMAKE_C23_EXTENSION_COMPILE_OPTION -std=c23 -Zx) +set(CMAKE_C_STANDARD_LATEST 23) + +__compiler_check_default_language_standard(C 12.0 23) diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 7a70421256..210363e5a5 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -440,6 +440,7 @@ if(BUILD_TESTING) ) ADD_TEST_MACRO(CompileFeatures CompileFeatures) set_property(TEST CompileFeatures APPEND PROPERTY LABELS "CUDA" "HIP") + set_property(TEST CompileFeatures APPEND PROPERTY LABELS "PellesC") ADD_TEST_MACRO(CMakeCommands.target_compile_features) diff --git a/Tests/CompileFeatures/c_std.h b/Tests/CompileFeatures/c_std.h index afe0308882..7e6402d49f 100644 --- a/Tests/CompileFeatures/c_std.h +++ b/Tests/CompileFeatures/c_std.h @@ -5,4 +5,6 @@ #ifdef __STDC_VERSION__ # define C_STD __STDC_VERSION__ +#elif defined(__POCC_STDC_VERSION__) +# define C_STD __POCC_STDC_VERSION__ #endif