diff --git a/CMake-Embarcadero-BCC32C/.gitignore b/CMake-Embarcadero-BCC32C/.gitignore
new file mode 100644
index 0000000..59b50f7
--- /dev/null
+++ b/CMake-Embarcadero-BCC32C/.gitignore
@@ -0,0 +1 @@
+/cmake-build*/
diff --git a/CMake-Embarcadero-BCC32C/.idea/.gitignore b/CMake-Embarcadero-BCC32C/.idea/.gitignore
new file mode 100644
index 0000000..08ec655
--- /dev/null
+++ b/CMake-Embarcadero-BCC32C/.idea/.gitignore
@@ -0,0 +1,6 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+/deployment.xml
diff --git a/CMake-Embarcadero-BCC32C/.idea/CMake-Embarcadero-BCC32C.iml b/CMake-Embarcadero-BCC32C/.idea/CMake-Embarcadero-BCC32C.iml
new file mode 100644
index 0000000..f08604b
--- /dev/null
+++ b/CMake-Embarcadero-BCC32C/.idea/CMake-Embarcadero-BCC32C.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/CMake-Embarcadero-BCC32C/.idea/custom-compiler.xml b/CMake-Embarcadero-BCC32C/.idea/custom-compiler.xml
new file mode 100644
index 0000000..3701129
--- /dev/null
+++ b/CMake-Embarcadero-BCC32C/.idea/custom-compiler.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CMake-Embarcadero-BCC32C/.idea/misc.xml b/CMake-Embarcadero-BCC32C/.idea/misc.xml
new file mode 100644
index 0000000..089d1d9
--- /dev/null
+++ b/CMake-Embarcadero-BCC32C/.idea/misc.xml
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CMake-Embarcadero-BCC32C/.idea/modules.xml b/CMake-Embarcadero-BCC32C/.idea/modules.xml
new file mode 100644
index 0000000..09438e3
--- /dev/null
+++ b/CMake-Embarcadero-BCC32C/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CMake-Embarcadero-BCC32C/.idea/vcs.xml b/CMake-Embarcadero-BCC32C/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/CMake-Embarcadero-BCC32C/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CMake-Embarcadero-BCC32C/CMakeLists.txt b/CMake-Embarcadero-BCC32C/CMakeLists.txt
new file mode 100644
index 0000000..42a3872
--- /dev/null
+++ b/CMake-Embarcadero-BCC32C/CMakeLists.txt
@@ -0,0 +1,10 @@
+cmake_minimum_required(VERSION 3.17)
+
+project(custom-compiler-test C CXX)
+
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+set(CMAKE_C_STANDARD 99)
+
+add_link_options(-lGl -lGpr)
+add_executable(CMake-Embarcadero-BCC32C main.cpp cmain.c)
+
diff --git a/CMake-Embarcadero-BCC32C/CMakePresets.json b/CMake-Embarcadero-BCC32C/CMakePresets.json
new file mode 100644
index 0000000..feeb156
--- /dev/null
+++ b/CMake-Embarcadero-BCC32C/CMakePresets.json
@@ -0,0 +1,22 @@
+{
+ "version": 2,
+ "configurePresets": [
+ {
+ "name": "bcc32c",
+ "generator": "Ninja",
+ "binaryDir": "cmake-build-bcc",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "C:/tools/BCC102/bin/bcc32c.exe",
+ "CMAKE_CXX_COMPILER": "C:/tools/BCC102/bin/bcc32c.exe"
+ }
+ }
+ ],
+ "buildPresets": [
+ {
+ "name": "BCC32C",
+ "displayName": "Embarcadero BCC32C",
+ "description": "Automatic preset for Embarcadero Free C Compiler",
+ "configurePreset": "bcc32c"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/CMake-Embarcadero-BCC32C/README.md b/CMake-Embarcadero-BCC32C/README.md
new file mode 100644
index 0000000..07f2652
--- /dev/null
+++ b/CMake-Embarcadero-BCC32C/README.md
@@ -0,0 +1,10 @@
+Test project for Custom Compiler Feature
+===
+
+This project is an example how to use [Embarcadero Free C Compiler](https://www.embarcadero.com/free-tools/ccompiler)
+with [CMake](https://cmake.org/) and [CLion](https://www.jetbrains.com/clion/)
+using [Custom Defined Compiler](https://youtrack.jetbrains.com/issue/CPP-9615)
+
+There is a custom compiler definition file for the compiler: [custom-compiler-bcc-msp430.yaml](custom-compiler-bcc.yaml)
+
+**NB**: The compiler is supposed to be installed to `c:\tools\bcc102` folder
\ No newline at end of file
diff --git a/CMake-Embarcadero-BCC32C/cmain.c b/CMake-Embarcadero-BCC32C/cmain.c
new file mode 100644
index 0000000..c3d4e79
--- /dev/null
+++ b/CMake-Embarcadero-BCC32C/cmain.c
@@ -0,0 +1,16 @@
+#include
+
+#pragma message ("Compile C")
+int getInt();
+long long fn() {
+ return 3ll;
+}
+
+void fan(unsigned int x) {
+ const int res = x == 123;
+ if (x == 456) {}
+}
+
+void c_main() {
+ puts("Hello, World from C!");
+}
diff --git a/CMake-Embarcadero-BCC32C/custom-compiler-bcc.yaml b/CMake-Embarcadero-BCC32C/custom-compiler-bcc.yaml
new file mode 100644
index 0000000..2aa1351
--- /dev/null
+++ b/CMake-Embarcadero-BCC32C/custom-compiler-bcc.yaml
@@ -0,0 +1,200 @@
+aliases:
+ - &Embarcadero-7-30-exe
+ match-compiler-exe: "(.*/)?bcc32[xc](\\.exe)?"
+ code-insight-target-name: aarch64
+ - &Common-Embarcadero-7-30-defines
+ __BORLANDC__: &version "0x0730"
+ __CODEGEARC__: *version
+ __CONSOLE__: "1"
+ _CPPUNWIND: "1"
+ _M_IX86: "0x12c"
+ _PUSHPOP_SUPPORTED: "1"
+ _STDCALL_SUPPORTED: "1"
+ __TEMPLATES__: "1"
+ __TLS__: "1"
+ __TURBOC__: *version
+ _WCHAR_T:
+ _WCHAR_T_DEFINED:
+ _Windows: "1"
+ _WIN64: "1"
+ _INTEGRAL_MAX_BITS: "64"
+ _M_IX86_FP: "0"
+ _WIN32: "1"
+ __ATOMIC_ACQUIRE: "2"
+ __ATOMIC_ACQ_REL: "4"
+ __ATOMIC_CONSUME: "1"
+ __ATOMIC_RELAXED: "0"
+ __ATOMIC_RELEASE: "3"
+ __ATOMIC_SEQ_CST: "5"
+ __BYTE_ORDER__: "__ORDER_LITTLE_ENDIAN__"
+ __CHAR16_TYPE__: "unsigned short"
+ __CHAR32_TYPE__: "unsigned int"
+ __CHAR_BIT__: "8"
+ __CODEGEARC_VERSION__: "0x7308CAF"
+ __CONSTANT_CFSTRINGS__: "1"
+ __DBL_DENORM_MIN__: "4.9406564584124654e-324"
+ __DBL_DIG__: "15"
+ __DBL_EPSILON__: "2.2204460492503131e-16"
+ __DBL_HAS_DENORM__: "1"
+ __DBL_HAS_INFINITY__: "1"
+ __DBL_HAS_QUIET_NAN__: "1"
+ __DBL_MANT_DIG__: "53"
+ __DBL_MAX_10_EXP__: "308"
+ __DBL_MAX_EXP__: "1024"
+ __DBL_MAX__: "1.7976931348623157e+308"
+ __DBL_MIN_10_EXP__: "(-307)"
+ __DBL_MIN_EXP__: "(-1021)"
+ __DBL_MIN__: "2.2250738585072014e-308"
+ __DECIMAL_DIG__: "21"
+ __FINITE_MATH_ONLY__: "0"
+ __FLAT__: "1"
+ __FLT_DENORM_MIN__: "1.40129846e-45F"
+ __FLT_DIG__: "6"
+ __FLT_EPSILON__: "1.19209290e-7F"
+ __FLT_EVAL_METHOD__: "2"
+ __FLT_HAS_DENORM__: "1"
+ __FLT_HAS_INFINITY__: "1"
+ __FLT_HAS_QUIET_NAN__: "1"
+ __FLT_MANT_DIG__: "24"
+ __FLT_MAX_10_EXP__: "38"
+ __FLT_MAX_EXP__: "128"
+ __FLT_MAX__: "3.40282347e+38F"
+ __FLT_MIN_10_EXP__: "(-37)"
+ __FLT_MIN_EXP__: "(-125)"
+ __FLT_MIN__: "1.17549435e-38F"
+ __FLT_RADIX__: "2"
+ __FUNC__: "__FUNCTION__"
+ __GCC_ATOMIC_BOOL_LOCK_FREE: "2"
+ __GCC_ATOMIC_CHAR16_T_LOCK_FREE: "2"
+ __GCC_ATOMIC_CHAR32_T_LOCK_FREE: "2"
+ __GCC_ATOMIC_CHAR_LOCK_FREE: "2"
+ __GCC_ATOMIC_INT_LOCK_FREE: "2"
+ __GCC_ATOMIC_LLONG_LOCK_FREE: "2"
+ __GCC_ATOMIC_LONG_LOCK_FREE: "2"
+ __GCC_ATOMIC_POINTER_LOCK_FREE: "2"
+ __GCC_ATOMIC_SHORT_LOCK_FREE: "2"
+ __GCC_ATOMIC_TEST_AND_SET_TRUEVAL: "1"
+ __GCC_ATOMIC_WCHAR_T_LOCK_FREE: "2"
+ __GNUC_STDC_INLINE__: "1"
+ __GXX_RTTI: "1"
+ __INT16_TYPE__: "short"
+ __INT32_TYPE__: "int"
+ __INT64_C_SUFFIX__: "LL"
+ __INT64_TYPE__: "long long int"
+ __INT8_TYPE__: "char"
+ __INTMAX_MAX__: "9223372036854775807LL"
+ __INTMAX_TYPE__: "long long int"
+ __INTMAX_WIDTH__: "64"
+ __INTPTR_TYPE__: "int"
+ __INTPTR_WIDTH__: "32"
+ __INT_MAX__: "2147483647"
+ __LDBL_DENORM_MIN__: "3.64519953188247460253e-4951L"
+ __LDBL_DIG__: "18"
+ __LDBL_EPSILON__: "1.08420217248550443401e-19L"
+ __LDBL_HAS_DENORM__: "1"
+ __LDBL_HAS_INFINITY__: "1"
+ __LDBL_HAS_QUIET_NAN__: "1"
+ __LDBL_MANT_DIG__: "64"
+ __LDBL_MAX_10_EXP__: "4932"
+ __LDBL_MAX_EXP__: "16384"
+ __LDBL_MAX__: "1.18973149535723176502e+4932L"
+ __LDBL_MIN_10_EXP__: "(-4931)"
+ __LDBL_MIN_EXP__: "(-16381)"
+ __LDBL_MIN__: "3.36210314311209350626e-4932L"
+ __LITTLE_ENDIAN__: "1"
+ __LONG_LONG_MAX__: "9223372036854775807LL"
+ __LONG_MAX__: "2147483647L"
+ __NO_INLINE__: "1"
+ __NO_MATH_INLINES: "1"
+ __ORDER_BIG_ENDIAN__: "4321"
+ __ORDER_LITTLE_ENDIAN__: "1234"
+ __ORDER_PDP_ENDIAN__: "3412"
+ __POINTER_WIDTH__: "32"
+ __PRAGMA_REDEFINE_EXTNAME: "1"
+ __PTRDIFF_TYPE__: "int"
+ __PTRDIFF_WIDTH__: "32"
+ __REGISTER_PREFIX__: "__SCHAR_MAX__ 127"
+ __SHRT_MAX__: "32767"
+ __SIG_ATOMIC_WIDTH__: "32"
+ __SIZEOF_DOUBLE__: "8"
+ __SIZEOF_FLOAT__: "4"
+ __SIZEOF_INT__: "4"
+ __SIZEOF_LONG_DOUBLE__: "10"
+ __SIZEOF_LONG_LONG__: "8"
+ __SIZEOF_LONG__: "4"
+ __SIZEOF_POINTER__: "4"
+ __SIZEOF_PTRDIFF_T__: "4"
+ __SIZEOF_SHORT__: "2"
+ __SIZEOF_SIZE_T__: "4"
+ __SIZEOF_WCHAR_T__: "2"
+ __SIZEOF_WINT_T__: "4"
+ __SIZE_MAX__: "4294967295U"
+ __SIZE_TYPE__: "unsigned int"
+ __SIZE_WIDTH__: "32"
+ __STDC_HOSTED__: "1"
+ __STDC_VERSION__: "199901L"
+ __STRICT_ANSI__: "1"
+ __UINTMAX_TYPE__: "long long unsigned int"
+ __USER_LABEL_PREFIX__: "_"
+ __UUID_SUPPORT__: "1"
+ __VERSION__: "4.2.1 Compatible Embarcadero Technologies Inc. bcc32x 3.3.1 (36350.30c6854.779bede)"
+ __WCHAR_MAX__: "65535U"
+ __WCHAR_TYPE__: "unsigned short"
+ __WCHAR_UNSIGNED__: "1"
+ __WCHAR_WIDTH__: "16"
+ __WINT_TYPE__: "int"
+ __WINT_WIDTH__: "32"
+ __clang__: "1"
+ __clang_major__: "3"
+ __clang_minor__: "3"
+ __clang_patchlevel__: "1"
+ __clang_version__: "3.3.1 (36350.30c6854.779bede)"
+ __i386: "1"
+ __i386__: "1"
+ __llvm__: "1"
+ __BCOPT__: "1"
+ __BOOL__: "1"
+
+ - &C-Embarcadero-7-30
+ include-dirs: ${compiler-exe-dir}/../include/windows/crtl
+ defines:
+ <<: *Common-Embarcadero-7-30-defines
+
+ - &CPP-Embarcadero-7-30
+ include-dirs:
+ - ${compiler-exe-dir}/../include/windows/crtl
+ - ${compiler-exe-dir}/../include/dinkumware64
+ defines:
+ <<: *Common-Embarcadero-7-30-defines
+ __BCPLUSPLUS__: *version
+ __cplusplus: "201402L"
+ __TCPLUSPLUS__: *version
+ defines-text: "
+#define defined_as_text some_text
+"
+
+compilers:
+
+ - description: C Embarcadero 7.30 by extension
+ <<: *Embarcadero-7-30-exe
+ match-sources: ".*\\.c"
+ match-language: C
+ <<: *C-Embarcadero-7-30
+
+ - description: CPP Embarcadero 7.30 by extension
+ <<: *Embarcadero-7-30-exe
+ match-sources: ".*\\.cpp"
+ match-language: CPP
+ <<: *CPP-Embarcadero-7-30
+
+ - description: CPP Embarcadero 7.30 by join cli key
+ <<: *Embarcadero-7-30-exe
+ match-args: "-xc++"
+ match-language: CPP
+ <<: *CPP-Embarcadero-7-30
+
+ - description: CPP Embarcadero 7.30 by split cli key
+ <<: *Embarcadero-7-30-exe
+ match-args: "-x c++"
+ match-language: CPP
+ <<: *CPP-Embarcadero-7-30
diff --git a/CMake-Embarcadero-BCC32C/main.cpp b/CMake-Embarcadero-BCC32C/main.cpp
new file mode 100644
index 0000000..cb5a3a9
--- /dev/null
+++ b/CMake-Embarcadero-BCC32C/main.cpp
@@ -0,0 +1,10 @@
+#include
+
+#pragma message ("Compile C++")
+extern "C" void c_main(void);
+
+int main() {
+ std::cout << "Hello, World, from C++!" << std::endl;
+ c_main();
+ return 0;
+}