1*2e9d4914SAndroid Build Coastguard Worker /* This source file must have a .cpp extension so that all C++ compilers 2*2e9d4914SAndroid Build Coastguard Worker recognize the extension without flags. Borland does not know .cxx for 3*2e9d4914SAndroid Build Coastguard Worker example. */ 4*2e9d4914SAndroid Build Coastguard Worker #ifndef __cplusplus 5*2e9d4914SAndroid Build Coastguard Worker # error "A C compiler has been selected for C++." 6*2e9d4914SAndroid Build Coastguard Worker #endif 7*2e9d4914SAndroid Build Coastguard Worker 8*2e9d4914SAndroid Build Coastguard Worker #if defined(__COMO__) 9*2e9d4914SAndroid Build Coastguard Worker # define COMPILER_ID "Comeau" 10*2e9d4914SAndroid Build Coastguard Worker 11*2e9d4914SAndroid Build Coastguard Worker #elif defined(__INTEL_COMPILER) || defined(__ICC) 12*2e9d4914SAndroid Build Coastguard Worker # define COMPILER_ID "Intel" 13*2e9d4914SAndroid Build Coastguard Worker 14*2e9d4914SAndroid Build Coastguard Worker #elif defined(__BORLANDC__) 15*2e9d4914SAndroid Build Coastguard Worker # define COMPILER_ID "Borland" 16*2e9d4914SAndroid Build Coastguard Worker 17*2e9d4914SAndroid Build Coastguard Worker #elif defined(__WATCOMC__) 18*2e9d4914SAndroid Build Coastguard Worker # define COMPILER_ID "Watcom" 19*2e9d4914SAndroid Build Coastguard Worker 20*2e9d4914SAndroid Build Coastguard Worker #elif defined(__SUNPRO_CC) 21*2e9d4914SAndroid Build Coastguard Worker # define COMPILER_ID "SunPro" 22*2e9d4914SAndroid Build Coastguard Worker 23*2e9d4914SAndroid Build Coastguard Worker #elif defined(__HP_aCC) 24*2e9d4914SAndroid Build Coastguard Worker # define COMPILER_ID "HP" 25*2e9d4914SAndroid Build Coastguard Worker 26*2e9d4914SAndroid Build Coastguard Worker #elif defined(__DECCXX) 27*2e9d4914SAndroid Build Coastguard Worker # define COMPILER_ID "Compaq" 28*2e9d4914SAndroid Build Coastguard Worker 29*2e9d4914SAndroid Build Coastguard Worker #elif defined(__IBMCPP__) 30*2e9d4914SAndroid Build Coastguard Worker # define COMPILER_ID "VisualAge" 31*2e9d4914SAndroid Build Coastguard Worker 32*2e9d4914SAndroid Build Coastguard Worker #elif defined(__PGI) 33*2e9d4914SAndroid Build Coastguard Worker # define COMPILER_ID "PGI" 34*2e9d4914SAndroid Build Coastguard Worker 35*2e9d4914SAndroid Build Coastguard Worker #elif defined(__GNUC__) 36*2e9d4914SAndroid Build Coastguard Worker # define COMPILER_ID "GNU" 37*2e9d4914SAndroid Build Coastguard Worker 38*2e9d4914SAndroid Build Coastguard Worker #elif defined(_MSC_VER) 39*2e9d4914SAndroid Build Coastguard Worker # define COMPILER_ID "MSVC" 40*2e9d4914SAndroid Build Coastguard Worker 41*2e9d4914SAndroid Build Coastguard Worker #elif defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) 42*2e9d4914SAndroid Build Coastguard Worker /* Analog Devices C++ compiler for Blackfin, TigerSHARC and 43*2e9d4914SAndroid Build Coastguard Worker SHARC (21000) DSPs */ 44*2e9d4914SAndroid Build Coastguard Worker # define COMPILER_ID "ADSP" 45*2e9d4914SAndroid Build Coastguard Worker 46*2e9d4914SAndroid Build Coastguard Worker #elif defined(_COMPILER_VERSION) 47*2e9d4914SAndroid Build Coastguard Worker # define COMPILER_ID "MIPSpro" 48*2e9d4914SAndroid Build Coastguard Worker 49*2e9d4914SAndroid Build Coastguard Worker /* This compiler is either not known or is too old to define an 50*2e9d4914SAndroid Build Coastguard Worker identification macro. Try to identify the platform and guess that 51*2e9d4914SAndroid Build Coastguard Worker it is the native compiler. */ 52*2e9d4914SAndroid Build Coastguard Worker #elif defined(__sgi) 53*2e9d4914SAndroid Build Coastguard Worker # define COMPILER_ID "MIPSpro" 54*2e9d4914SAndroid Build Coastguard Worker 55*2e9d4914SAndroid Build Coastguard Worker #elif defined(__hpux) || defined(__hpua) 56*2e9d4914SAndroid Build Coastguard Worker # define COMPILER_ID "HP" 57*2e9d4914SAndroid Build Coastguard Worker 58*2e9d4914SAndroid Build Coastguard Worker #else /* unknown compiler */ 59*2e9d4914SAndroid Build Coastguard Worker # define COMPILER_ID "" 60*2e9d4914SAndroid Build Coastguard Worker 61*2e9d4914SAndroid Build Coastguard Worker #endif 62*2e9d4914SAndroid Build Coastguard Worker 63*2e9d4914SAndroid Build Coastguard Worker /* Construct the string literal in pieces to prevent the source from 64*2e9d4914SAndroid Build Coastguard Worker getting matched. Store it in a pointer rather than an array 65*2e9d4914SAndroid Build Coastguard Worker because some compilers will just produce instructions to fill the 66*2e9d4914SAndroid Build Coastguard Worker array rather than assigning a pointer to a static array. */ 67*2e9d4914SAndroid Build Coastguard Worker char* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; 68*2e9d4914SAndroid Build Coastguard Worker 69*2e9d4914SAndroid Build Coastguard Worker /* Identify known platforms by name. */ 70*2e9d4914SAndroid Build Coastguard Worker #if defined(__linux) || defined(__linux__) || defined(linux) 71*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "Linux" 72*2e9d4914SAndroid Build Coastguard Worker 73*2e9d4914SAndroid Build Coastguard Worker #elif defined(__CYGWIN__) 74*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "Cygwin" 75*2e9d4914SAndroid Build Coastguard Worker 76*2e9d4914SAndroid Build Coastguard Worker #elif defined(__MINGW32__) 77*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "MinGW" 78*2e9d4914SAndroid Build Coastguard Worker 79*2e9d4914SAndroid Build Coastguard Worker #elif defined(__APPLE__) 80*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "Darwin" 81*2e9d4914SAndroid Build Coastguard Worker 82*2e9d4914SAndroid Build Coastguard Worker #elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) 83*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "Windows" 84*2e9d4914SAndroid Build Coastguard Worker 85*2e9d4914SAndroid Build Coastguard Worker #elif defined(__FreeBSD__) || defined(__FreeBSD) 86*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "FreeBSD" 87*2e9d4914SAndroid Build Coastguard Worker 88*2e9d4914SAndroid Build Coastguard Worker #elif defined(__NetBSD__) || defined(__NetBSD) 89*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "NetBSD" 90*2e9d4914SAndroid Build Coastguard Worker 91*2e9d4914SAndroid Build Coastguard Worker #elif defined(__OpenBSD__) || defined(__OPENBSD) 92*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "OpenBSD" 93*2e9d4914SAndroid Build Coastguard Worker 94*2e9d4914SAndroid Build Coastguard Worker #elif defined(__sun) || defined(sun) 95*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "SunOS" 96*2e9d4914SAndroid Build Coastguard Worker 97*2e9d4914SAndroid Build Coastguard Worker #elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) 98*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "AIX" 99*2e9d4914SAndroid Build Coastguard Worker 100*2e9d4914SAndroid Build Coastguard Worker #elif defined(__sgi) || defined(__sgi__) || defined(_SGI) 101*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "IRIX" 102*2e9d4914SAndroid Build Coastguard Worker 103*2e9d4914SAndroid Build Coastguard Worker #elif defined(__hpux) || defined(__hpux__) 104*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "HP-UX" 105*2e9d4914SAndroid Build Coastguard Worker 106*2e9d4914SAndroid Build Coastguard Worker #elif defined(__HAIKU) || defined(__HAIKU__) || defined(_HAIKU) 107*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "Haiku" 108*2e9d4914SAndroid Build Coastguard Worker /* Haiku also defines __BEOS__ so we must 109*2e9d4914SAndroid Build Coastguard Worker put it prior to the check for __BEOS__ 110*2e9d4914SAndroid Build Coastguard Worker */ 111*2e9d4914SAndroid Build Coastguard Worker 112*2e9d4914SAndroid Build Coastguard Worker #elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) 113*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "BeOS" 114*2e9d4914SAndroid Build Coastguard Worker 115*2e9d4914SAndroid Build Coastguard Worker #elif defined(__QNX__) || defined(__QNXNTO__) 116*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "QNX" 117*2e9d4914SAndroid Build Coastguard Worker 118*2e9d4914SAndroid Build Coastguard Worker #elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) 119*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "Tru64" 120*2e9d4914SAndroid Build Coastguard Worker 121*2e9d4914SAndroid Build Coastguard Worker #elif defined(__riscos) || defined(__riscos__) 122*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "RISCos" 123*2e9d4914SAndroid Build Coastguard Worker 124*2e9d4914SAndroid Build Coastguard Worker #elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) 125*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "SINIX" 126*2e9d4914SAndroid Build Coastguard Worker 127*2e9d4914SAndroid Build Coastguard Worker #elif defined(__UNIX_SV__) 128*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "UNIX_SV" 129*2e9d4914SAndroid Build Coastguard Worker 130*2e9d4914SAndroid Build Coastguard Worker #elif defined(__bsdos__) 131*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "BSDOS" 132*2e9d4914SAndroid Build Coastguard Worker 133*2e9d4914SAndroid Build Coastguard Worker #elif defined(_MPRAS) || defined(MPRAS) 134*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "MP-RAS" 135*2e9d4914SAndroid Build Coastguard Worker 136*2e9d4914SAndroid Build Coastguard Worker #elif defined(__osf) || defined(__osf__) 137*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "OSF1" 138*2e9d4914SAndroid Build Coastguard Worker 139*2e9d4914SAndroid Build Coastguard Worker #elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) 140*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "SCO_SV" 141*2e9d4914SAndroid Build Coastguard Worker 142*2e9d4914SAndroid Build Coastguard Worker #elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) 143*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "ULTRIX" 144*2e9d4914SAndroid Build Coastguard Worker 145*2e9d4914SAndroid Build Coastguard Worker #elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) 146*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "Xenix" 147*2e9d4914SAndroid Build Coastguard Worker 148*2e9d4914SAndroid Build Coastguard Worker #else /* unknown platform */ 149*2e9d4914SAndroid Build Coastguard Worker # define PLATFORM_ID "" 150*2e9d4914SAndroid Build Coastguard Worker 151*2e9d4914SAndroid Build Coastguard Worker #endif 152*2e9d4914SAndroid Build Coastguard Worker 153*2e9d4914SAndroid Build Coastguard Worker /* Construct the string literal in pieces to prevent the source from 154*2e9d4914SAndroid Build Coastguard Worker getting matched. Store it in a pointer rather than an array 155*2e9d4914SAndroid Build Coastguard Worker because some compilers will just produce instructions to fill the 156*2e9d4914SAndroid Build Coastguard Worker array rather than assigning a pointer to a static array. */ 157*2e9d4914SAndroid Build Coastguard Worker char* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; 158*2e9d4914SAndroid Build Coastguard Worker 159*2e9d4914SAndroid Build Coastguard Worker 160*2e9d4914SAndroid Build Coastguard Worker /*--------------------------------------------------------------------------*/ 161*2e9d4914SAndroid Build Coastguard Worker main(int argc,char * argv[])162*2e9d4914SAndroid Build Coastguard Workerint main(int argc, char* argv[]) 163*2e9d4914SAndroid Build Coastguard Worker { 164*2e9d4914SAndroid Build Coastguard Worker int require = 0; 165*2e9d4914SAndroid Build Coastguard Worker require += info_compiler[argc]; 166*2e9d4914SAndroid Build Coastguard Worker require += info_platform[argc]; 167*2e9d4914SAndroid Build Coastguard Worker (void)argv; 168*2e9d4914SAndroid Build Coastguard Worker return require; 169*2e9d4914SAndroid Build Coastguard Worker } 170