macos: workaround to build tcc using tcc until .o object files generated by tcc are...
[tinycc.git] / conftest.c
blob404871a3c1afa5bc0aef2ad4f975c4fe929b8e11
1 #include <stdio.h>
3 #if defined(_WIN32)
4 #include <fcntl.h>
5 #endif
7 /* Define architecture */
8 #if defined(__i386__) || defined _M_IX86
9 # define TRIPLET_ARCH "i386"
10 #elif defined(__x86_64__) || defined _M_AMD64
11 # define TRIPLET_ARCH "x86_64"
12 #elif defined(__arm__)
13 # define TRIPLET_ARCH "arm"
14 #elif defined(__aarch64__)
15 # define TRIPLET_ARCH "aarch64"
16 #elif defined(__riscv) && defined(__LP64__)
17 # define TRIPLET_ARCH "riscv64"
18 #else
19 # define TRIPLET_ARCH "unknown"
20 #endif
22 /* Define OS */
23 #if defined (__linux__)
24 # define TRIPLET_OS "linux"
25 #elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__)
26 # define TRIPLET_OS "kfreebsd"
27 #elif defined(_WIN32)
28 # define TRIPLET_OS "win32"
29 #elif defined(__APPLE__)
30 # define TRIPLET_OS "darwin"
31 #elif !defined (__GNU__)
32 # define TRIPLET_OS "unknown"
33 #endif
35 /* Define calling convention and ABI */
36 #if defined (__ARM_EABI__)
37 # if defined (__ARM_PCS_VFP)
38 # define TRIPLET_ABI "gnueabihf"
39 # else
40 # define TRIPLET_ABI "gnueabi"
41 # endif
42 #else
43 # define TRIPLET_ABI "gnu"
44 #endif
46 #if defined _WIN32
47 # define TRIPLET TRIPLET_ARCH "-" TRIPLET_OS
48 #elif defined __GNU__
49 # define TRIPLET TRIPLET_ARCH "-" TRIPLET_ABI
50 #else
51 # define TRIPLET TRIPLET_ARCH "-" TRIPLET_OS "-" TRIPLET_ABI
52 #endif
54 #if defined(_WIN32)
55 int _CRT_glob = 0;
56 #endif
58 int main(int argc, char *argv[])
60 #if defined(_WIN32)
61 _setmode(_fileno(stdout), _O_BINARY); /* don't translate \n to \r\n */
62 #endif
63 switch(argc == 2 ? argv[1][0] : 0) {
64 case 'b':
66 volatile unsigned foo = 0x01234567;
67 puts(*(unsigned char*)&foo == 0x67 ? "no" : "yes");
68 break;
70 #if defined(__clang__)
71 case 'm':
72 printf("%d\n", __clang_minor__);
73 break;
74 case 'v':
75 printf("%d\n", __clang_major__);
76 break;
77 #elif defined(__TINYC__)
78 case 'v':
79 puts("0");
80 break;
81 case 'm':
82 printf("%d\n", __TINYC__);
83 break;
84 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
85 /* GNU comes last as other compilers may add 'GNU' compatibility */
86 case 'm':
87 printf("%d\n", __GNUC_MINOR__);
88 break;
89 case 'v':
90 printf("%d\n", __GNUC__);
91 break;
92 #else
93 case 'm':
94 case 'v':
95 puts("0");
96 break;
97 #endif
98 case 't':
99 puts(TRIPLET);
100 break;
101 case 'c':
102 #if defined(__clang__)
103 puts("clang");
104 #elif defined(__TINYC__)
105 puts("tcc");
106 #elif defined(__GNUC__)
107 puts("gcc");
108 #else
109 puts("unknown");
110 #endif
111 break;
112 default:
113 break;
115 return 0;