0,0 → 1,77 |
#include <stdio.h> |
|
/* Define architecture */ |
#if defined(__i386__) |
# define TRIPLET_ARCH "i386" |
#elif defined(__x86_64__) |
# define TRIPLET_ARCH "x86_64" |
#elif defined(__arm__) |
# define TRIPLET_ARCH "arm" |
#elif defined(__aarch64__) |
# define TRIPLET_ARCH "aarch64" |
#else |
# define TRIPLET_ARCH "unknown" |
#endif |
|
/* Define OS */ |
#if defined (__linux__) |
# define TRIPLET_OS "linux" |
#elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__) |
# define TRIPLET_OS "kfreebsd" |
#elif !defined (__GNU__) |
# define TRIPLET_OS "unknown" |
#endif |
|
/* Define calling convention and ABI */ |
#if defined (__ARM_EABI__) |
# if defined (__ARM_PCS_VFP) |
# define TRIPLET_ABI "gnueabihf" |
# else |
# define TRIPLET_ABI "gnueabi" |
# endif |
#else |
# define TRIPLET_ABI "gnu" |
#endif |
|
#ifdef __GNU__ |
# define TRIPLET TRIPLET_ARCH "-" TRIPLET_ABI |
#else |
# define TRIPLET TRIPLET_ARCH "-" TRIPLET_OS "-" TRIPLET_ABI |
#endif |
|
#if defined(_WIN32) |
int _CRT_glob = 0; |
#endif |
|
int main(int argc, char *argv[]) |
{ |
switch(argc == 2 ? argv[1][0] : 0) { |
case 'b': |
{ |
volatile unsigned foo = 0x01234567; |
puts(*(unsigned char*)&foo == 0x67 ? "no" : "yes"); |
break; |
} |
#ifdef __GNUC__ |
case 'm': |
printf("%d\n", __GNUC_MINOR__); |
break; |
case 'v': |
printf("%d\n", __GNUC__); |
break; |
#else |
case 'm': |
case 'v': |
puts("0"); |
break; |
#endif |
case 't': |
puts(TRIPLET); |
break; |
case -1: |
/* to test -Wno-unused-result */ |
fread(NULL, 1, 1, NULL); |
break; |
} |
return 0; |
} |