From 53c0dc2dd2216b7927787e6d819a9a734be2c0eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Stankowski?= Date: Sun, 20 Mar 2016 10:42:19 +0100 Subject: [PATCH] Add support for Bruce C Compiler (BCC) Revise C compiler detection code to be K&R compatible. --- Help/release/dev/add-bruce-c.rst | 4 ++++ Help/variable/CMAKE_LANG_COMPILER_ID.rst | 1 + Modules/CMakeCCompilerId.c.in | 22 ++++++++++++++----- Modules/CMakeCompilerIdDetection.cmake | 1 + Modules/CMakeDetermineCCompiler.cmake | 3 +++ Modules/CMakePlatformId.h.in | 6 ++--- .../Compiler/Bruce-C-DetermineCompiler.cmake | 1 + Modules/Compiler/Bruce-C.cmake | 7 ++++++ 8 files changed, 36 insertions(+), 9 deletions(-) create mode 100644 Help/release/dev/add-bruce-c.rst create mode 100644 Modules/Compiler/Bruce-C-DetermineCompiler.cmake create mode 100644 Modules/Compiler/Bruce-C.cmake diff --git a/Help/release/dev/add-bruce-c.rst b/Help/release/dev/add-bruce-c.rst new file mode 100644 index 000000000..9e47900f3 --- /dev/null +++ b/Help/release/dev/add-bruce-c.rst @@ -0,0 +1,4 @@ +add-bruce-c +----------- + +* Support was added for the Bruce C Compiler with compiler id ``Bruce``. diff --git a/Help/variable/CMAKE_LANG_COMPILER_ID.rst b/Help/variable/CMAKE_LANG_COMPILER_ID.rst index 81976a918..ebd616e04 100644 --- a/Help/variable/CMAKE_LANG_COMPILER_ID.rst +++ b/Help/variable/CMAKE_LANG_COMPILER_ID.rst @@ -12,6 +12,7 @@ include: ADSP = Analog VisualDSP++ (analog.com) AppleClang = Apple Clang (apple.com) ARMCC = ARM Compiler (arm.com) + Bruce = Bruce C Compiler CCur = Concurrent Fortran (ccur.com) Clang = LLVM Clang (clang.llvm.org) Cray = Cray Compiler (cray.com) diff --git a/Modules/CMakeCCompilerId.c.in b/Modules/CMakeCCompilerId.c.in index 5bfe0fdfa..c107dfdf5 100644 --- a/Modules/CMakeCCompilerId.c.in +++ b/Modules/CMakeCCompilerId.c.in @@ -5,6 +5,11 @@ #if defined(__18CXX) # define ID_VOID_MAIN #endif +#if defined(__CLASSIC_C__) +/* cv-qualifiers did not exist in K&R C */ +# define const +# define volatile +#endif @CMAKE_C_COMPILER_ID_CONTENT@ @@ -28,23 +33,28 @@ char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; @CMAKE_C_COMPILER_ID_PLATFORM_CONTENT@ @CMAKE_C_COMPILER_ID_ERROR_FOR_TEST@ -const char* info_language_dialect_default = "INFO" ":" "dialect_default[" -#if !defined(__STDC_VERSION__) - "90" +#if !defined(__STDC__) +# define C_DIALECT #elif __STDC_VERSION__ >= 201000L - "11" +# define C_DIALECT "11" #elif __STDC_VERSION__ >= 199901L - "99" +# define C_DIALECT "99" #else +# define C_DIALECT "90" #endif -"]"; +const char* info_language_dialect_default = + "INFO" ":" "dialect_default[" C_DIALECT "]"; /*--------------------------------------------------------------------------*/ #ifdef ID_VOID_MAIN void main() {} #else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else int main(int argc, char* argv[]) +# endif { int require = 0; require += info_compiler[argc]; diff --git a/Modules/CMakeCompilerIdDetection.cmake b/Modules/CMakeCompilerIdDetection.cmake index cbc005570..1d341e516 100644 --- a/Modules/CMakeCompilerIdDetection.cmake +++ b/Modules/CMakeCompilerIdDetection.cmake @@ -79,6 +79,7 @@ function(compiler_id_detection outvar lang) if (lang STREQUAL C) list(APPEND ordered_compilers TinyCC + Bruce ) endif() list(APPEND ordered_compilers diff --git a/Modules/CMakeDetermineCCompiler.cmake b/Modules/CMakeDetermineCCompiler.cmake index e0b54686a..f8c630324 100644 --- a/Modules/CMakeDetermineCCompiler.cmake +++ b/Modules/CMakeDetermineCCompiler.cmake @@ -87,6 +87,9 @@ else() # Try enabling ANSI mode on HP. "-Aa" + + # Try compiling K&R-compatible code (needed by Bruce C Compiler). + "-D__CLASSIC_C__" ) endif() diff --git a/Modules/CMakePlatformId.h.in b/Modules/CMakePlatformId.h.in index da99b9e6d..47eb00a39 100644 --- a/Modules/CMakePlatformId.h.in +++ b/Modules/CMakePlatformId.h.in @@ -91,11 +91,11 @@ # define PLATFORM_ID "Windows3x" # else /* unknown platform */ -# define PLATFORM_ID "" +# define PLATFORM_ID # endif #else /* unknown platform */ -# define PLATFORM_ID "" +# define PLATFORM_ID #endif @@ -145,7 +145,7 @@ # endif #else -# define ARCHITECTURE_ID "" +# define ARCHITECTURE_ID #endif /* Convert integer to decimal digit literals. */ diff --git a/Modules/Compiler/Bruce-C-DetermineCompiler.cmake b/Modules/Compiler/Bruce-C-DetermineCompiler.cmake new file mode 100644 index 000000000..bb9f4b989 --- /dev/null +++ b/Modules/Compiler/Bruce-C-DetermineCompiler.cmake @@ -0,0 +1 @@ +set(_compiler_id_pp_test "defined(__BCC__)") diff --git a/Modules/Compiler/Bruce-C.cmake b/Modules/Compiler/Bruce-C.cmake new file mode 100644 index 000000000..23676eccb --- /dev/null +++ b/Modules/Compiler/Bruce-C.cmake @@ -0,0 +1,7 @@ +# Bruce C Compiler ignores "-g" flag and optimization cannot be +# enabled here (it is implemented only for 8086 target). +set (CMAKE_C_FLAGS_INIT "-D__CLASSIC_C__") +set (CMAKE_C_FLAGS_DEBUG_INIT "-g") +set (CMAKE_C_FLAGS_MINSIZEREL_INIT "-DNDEBUG") +set (CMAKE_C_FLAGS_RELEASE_INIT "-DNDEBUG") +set (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-g -DNDEBUG")