mirror of
https://github.com/reactos/CMake.git
synced 2024-12-13 22:58:41 +00:00
bdbbf763d6
The Borland compiler was re-branded as CodeGear during 2007-2009 and since 2009 is the Embarcadero compiler. They offer predefined macros: http://docwiki.embarcadero.com/RADStudio/en/Predefined_Macros and distinguish themselves by __CODEGEARC__ and __CODEGEARC_VERSION__. Version 6.30 (C++Builder XE) changed the meaning of some flags: http://docwiki.embarcadero.com/RADStudio/en/C%2B%2B_Compiler_Option_Changes_for_XE Teach Embarcadero compiler information files to generate build rules with flags matching the compiler version. Leave the flags unchanged for old Borland versions. Always set the BORLAND toolchain indicator for compatibility with existing projects that test it. Also set the EMBARCADERO indicator for newer toolchains.
205 lines
6.2 KiB
C
205 lines
6.2 KiB
C
#ifdef __cplusplus
|
|
# error "A C++ compiler has been selected for C."
|
|
#endif
|
|
|
|
/* Version number components: V=Version, R=Revision, P=Patch
|
|
Version date components: YYYY=Year, MM=Month, DD=Day */
|
|
|
|
#if defined(__18CXX)
|
|
# define ID_VOID_MAIN
|
|
#endif
|
|
|
|
#if defined(__INTEL_COMPILER) || defined(__ICC)
|
|
# define COMPILER_ID "Intel"
|
|
/* __INTEL_COMPILER = VRP */
|
|
# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
|
|
# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
|
|
# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
|
|
# if defined(__INTEL_COMPILER_BUILD_DATE)
|
|
/* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
|
|
# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
|
|
# endif
|
|
|
|
#elif defined(__clang__)
|
|
# define COMPILER_ID "Clang"
|
|
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
|
|
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
|
|
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
|
|
|
|
#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
|
|
# define COMPILER_ID "Embarcadero"
|
|
# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
|
|
# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
|
|
# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF)
|
|
|
|
#elif defined(__BORLANDC__)
|
|
# define COMPILER_ID "Borland"
|
|
/* __BORLANDC__ = 0xVRR */
|
|
# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
|
|
# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
|
|
|
|
#elif defined(__WATCOMC__)
|
|
# define COMPILER_ID "Watcom"
|
|
/* __WATCOMC__ = VVRR */
|
|
# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
|
|
# define COMPILER_VERSION_MINOR DEC(__WATCOMC__ % 100)
|
|
|
|
#elif defined(__SUNPRO_C)
|
|
# define COMPILER_ID "SunPro"
|
|
# if __SUNPRO_C >= 0x5100
|
|
/* __SUNPRO_C = 0xVRRP */
|
|
# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12)
|
|
# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF)
|
|
# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF)
|
|
# else
|
|
/* __SUNPRO_C = 0xVRP */
|
|
# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8)
|
|
# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF)
|
|
# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF)
|
|
# endif
|
|
|
|
#elif defined(__HP_cc)
|
|
# define COMPILER_ID "HP"
|
|
/* __HP_cc = VVRRPP */
|
|
# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000)
|
|
# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100)
|
|
# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100)
|
|
|
|
#elif defined(__DECC)
|
|
# define COMPILER_ID "Compaq"
|
|
|
|
#elif defined(__IBMC__)
|
|
# if defined(__COMPILER_VER__)
|
|
# define COMPILER_ID "zOS"
|
|
# else
|
|
# if __IBMC__ >= 800
|
|
# define COMPILER_ID "XL"
|
|
# else
|
|
# define COMPILER_ID "VisualAge"
|
|
# endif
|
|
/* __IBMC__ = VRP */
|
|
# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
|
|
# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
|
|
# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
|
|
# endif
|
|
|
|
#elif defined(__PGI)
|
|
# define COMPILER_ID "PGI"
|
|
# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
|
|
# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
|
|
# if defined(__PGIC_PATCHLEVEL__)
|
|
# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
|
|
# endif
|
|
|
|
#elif defined(__PATHSCALE__)
|
|
# define COMPILER_ID "PathScale"
|
|
|
|
#elif defined(_CRAYC)
|
|
# define COMPILER_ID "Cray"
|
|
|
|
#elif defined(__TI_COMPILER_VERSION__)
|
|
# define COMPILER_ID "TI_DSP"
|
|
|
|
#elif defined(__TINYC__)
|
|
# define COMPILER_ID "TinyCC"
|
|
|
|
#elif defined(__SCO_VERSION__)
|
|
# define COMPILER_ID "SCO"
|
|
|
|
#elif defined(__GNUC__)
|
|
# define COMPILER_ID "GNU"
|
|
# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
|
|
# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
|
|
# if defined(__GNUC_PATCHLEVEL__)
|
|
# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
|
|
# endif
|
|
|
|
#elif defined(_MSC_VER)
|
|
# define COMPILER_ID "MSVC"
|
|
/* _MSC_VER = VVRR */
|
|
# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
|
|
# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
|
|
# if defined(_MSC_FULL_VER)
|
|
# if _MSC_VER >= 1400
|
|
/* _MSC_FULL_VER = VVRRPPPPP */
|
|
# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
|
|
# else
|
|
/* _MSC_FULL_VER = VVRRPPPP */
|
|
# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
|
|
# endif
|
|
# endif
|
|
# if defined(_MSC_BUILD)
|
|
# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
|
|
# endif
|
|
|
|
#elif defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
|
|
/* Analog Devices C++ compiler for Blackfin, TigerSHARC and
|
|
SHARC (21000) DSPs */
|
|
# define COMPILER_ID "ADSP"
|
|
|
|
/* IAR Systems compiler for embedded systems.
|
|
http://www.iar.com
|
|
Not supported yet by CMake
|
|
#elif defined(__IAR_SYSTEMS_ICC__)
|
|
# define COMPILER_ID "IAR" */
|
|
|
|
/* sdcc, the small devices C compiler for embedded systems,
|
|
http://sdcc.sourceforge.net */
|
|
#elif defined(SDCC)
|
|
# define COMPILER_ID "SDCC"
|
|
|
|
#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION)
|
|
# define COMPILER_ID "MIPSpro"
|
|
# if defined(_SGI_COMPILER_VERSION)
|
|
/* _SGI_COMPILER_VERSION = VRP */
|
|
# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100)
|
|
# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10)
|
|
# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10)
|
|
# else
|
|
/* _COMPILER_VERSION = VRP */
|
|
# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100)
|
|
# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10)
|
|
# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10)
|
|
# endif
|
|
|
|
/* This compiler is either not known or is too old to define an
|
|
identification macro. Try to identify the platform and guess that
|
|
it is the native compiler. */
|
|
#elif defined(__sgi)
|
|
# define COMPILER_ID "MIPSpro"
|
|
|
|
#elif defined(__hpux) || defined(__hpua)
|
|
# define COMPILER_ID "HP"
|
|
|
|
#else /* unknown compiler */
|
|
# define COMPILER_ID ""
|
|
|
|
#endif
|
|
|
|
/* Construct the string literal in pieces to prevent the source from
|
|
getting matched. Store it in a pointer rather than an array
|
|
because some compilers will just produce instructions to fill the
|
|
array rather than assigning a pointer to a static array. */
|
|
char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
|
|
|
|
@CMAKE_C_COMPILER_ID_PLATFORM_CONTENT@
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#ifdef ID_VOID_MAIN
|
|
void main() {}
|
|
#else
|
|
int main(int argc, char* argv[])
|
|
{
|
|
int require = 0;
|
|
require += info_compiler[argc];
|
|
require += info_platform[argc];
|
|
require += info_arch[argc];
|
|
#ifdef COMPILER_VERSION_MAJOR
|
|
require += info_version[argc];
|
|
#endif
|
|
(void)argv;
|
|
return require;
|
|
}
|
|
#endif
|