annotate dyncall/dyncall_macros.h @ 254:9d70178c1ded

- better cpp checking whether dlinfo() is available, to also cover GLIBC based systems that don't identify as Linux (e.g. debian/k*BSD)
author Tassilo Philipp
date Mon, 15 May 2017 13:06:04 +0200
parents a74e2cd93348
children b625f2e11911
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 /*
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 Package: dyncall
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4 Library: dyncall
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 File: dyncall/dyncall_macros.h
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 Description: Platform detection macros
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 License:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8
188
44ae5b653086 - more endian detection in macros
Tassilo Philipp
parents: 180
diff changeset
9 Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 Tassilo Philipp <tphilipp@potion-studios.com>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 Permission to use, copy, modify, and distribute this software for any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 purpose with or without fee is hereby granted, provided that the above
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 copyright notice and this permission notice appear in all copies.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28 /*
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30 dyncall macros
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 Platform detection, specific defines and configuration.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 The purpose of this file is to provide coherent platform and compiler
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 specific defines. So instead of defines like WIN32, _OpenBSD_ or
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35 __GNUC__, one should use DC__OS_Win32, DC__OS_OpenBSD or DC__C_GNU,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 respectively.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 REVISION
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 2007/12/11 initial
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 #ifndef DYNCALL_MACROS_H
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45 #define DYNCALL_MACROS_H
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 /* Platform specific defines. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 /* MS Windows XP x64/Vista64 or later. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 #if defined(WIN64) || defined(_WIN64) || defined(__WIN64__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 #define DC__OS_Win64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54 /* MS Windows NT/95/98/ME/2000/XP/Vista32. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 #elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) || defined(__WINDOWS__) || defined(_WINDOWS)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56 #define DC__OS_Win32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58 /* All the OS' based on Darwin OS (MacOS X, OpenDarwin). Note that '__APPLE__' may be defined for classic MacOS, too. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 /* __MACOSX__ is not defined in gcc assembler mode (switch: -S) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60 /* @@@ TODO: Check for Classic OS */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 #elif defined(__APPLE__) || defined(__Darwin__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 # define DC__OS_Darwin
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 # if defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 # define DC__OS_IPhone
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66 # else /* defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67 # define DC__OS_MacOSX
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 # endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70 /* The most popular open source Unix-like OS - Linux. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71 #elif defined(__linux__) || defined(__linux) || defined(__gnu_linux__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72 #define DC__OS_Linux
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 /* The most powerful open source Unix-like OS - FreeBSD. */
254
9d70178c1ded - better cpp checking whether dlinfo() is available, to also cover GLIBC based systems that don't identify as Linux (e.g. debian/k*BSD)
Tassilo Philipp
parents: 204
diff changeset
75 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) /* latter is (also) used by systems using FreeBSD kernel, e.g. Debian/kFreeBSD, which could be detected specifically by also checking for __GLIBC__ */
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76 #define DC__OS_FreeBSD
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78 /* The most secure open source Unix-like OS - OpenBSD. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79 #elif defined(__OpenBSD__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80 #define DC__OS_OpenBSD
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82 /* The most portable open source Unix-like OS - NetBSD. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 #elif defined(__NetBSD__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 #define DC__OS_NetBSD
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86 /* The FreeBSD fork having heavy clusterization in mind - DragonFlyBSD. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 #elif defined(__DragonFly__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 #define DC__OS_DragonFlyBSD
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90 /* Sun's Unix-like OS - SunOS / Solaris. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91 #elif defined(__sun__) || defined(__sun) || defined(sun)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92 #define DC__OS_SunOS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94 /* The "Linux-like environment for Windows" - Cygwin. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 #elif defined(__CYGWIN__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96 #define DC__OS_Cygwin
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98 /* The "Minimalist GNU for Windows" - MinGW. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99 #elif defined(__MINGW__)/*@@@*/
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100 #define DC__OS_MinGW
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102 /* The Nintendo DS (homebrew) using devkitpro. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 #elif defined(__nds__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104 #define DC__OS_NDS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 /* The PlayStation Portable (homebrew) SDK. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 #elif defined(__psp__) || defined(PSP)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108 #define DC__OS_PSP
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110 /* Haiku (BeOS alike). */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 #elif defined(__HAIKU__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 #define DC__OS_BeOS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114 /* The Unix successor - Plan9 from Bell Labs */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
115 #elif defined(Plan9) || defined(__Plan9__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
116 #define DC__OS_Plan9
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
117
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
118 /* Digital's Unix-like OS - VMS */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
119 #elif defined(__vms)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
120 #define DC__OS_VMS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122 #elif defined(__minix)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123 #define DC__OS_Minix
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125 #else
174
a8052efbde18 - loosened OS detection macros a bit to not bail out and thus make it easier to use dyncall on baremetal
cslag
parents: 141
diff changeset
126
a8052efbde18 - loosened OS detection macros a bit to not bail out and thus make it easier to use dyncall on baremetal
cslag
parents: 141
diff changeset
127 /* Unable to determine OS, which is probably ok (e.g. baremetal stuff, etc.). */
a8052efbde18 - loosened OS detection macros a bit to not bail out and thus make it easier to use dyncall on baremetal
cslag
parents: 141
diff changeset
128 #define DC__OS_UNKNOWN
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
131
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133 /* Compiler specific defines. Do not change the order, because */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134 /* some of the compilers define flags for compatible ones, too. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136 /* Intel's C/C++ compiler. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137 #if defined(__INTEL_COMPILER)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
138 #define DC__C_Intel
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
139
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
140 /* MS C/C++ compiler. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
141 #elif defined(_MSC_VER)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142 #define DC__C_MSVC
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144 /* LLVM clang. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
145 #elif defined(__clang__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146 #define DC__C_CLANG
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
147
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
148 /* The GNU Compiler Collection - GCC. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149 #elif defined(__GNUC__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
150 #define DC__C_GNU
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
151
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
152 /* Watcom compiler. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
153 #elif defined(__WATCOMC__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
154 #define DC__C_WATCOM
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
155
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
156 /* Portable C Compiler. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
157 #elif defined(__PCC__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
158 #define DC__C_PCC
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
159
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
160 /* Sun Pro C. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
161 #elif defined(__SUNPRO_C)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
162 #define DC__C_SUNPRO
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
163
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
164 /* Undetected C Compiler. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
165 #else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
166 #define DC__C_UNKNOWN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
167 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
168
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
169
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
170
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
171 /* Architecture. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
172
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
173 /* Check architecture. */
31
6e7b1b7ad9d3 Fixed failing builds when the compiler is ICC/ICPC
Snaipe <franklinmathieu@gmail.com>
parents: 0
diff changeset
174 #if defined(_M_X64_) || defined(_M_AMD64) || defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64)
6e7b1b7ad9d3 Fixed failing builds when the compiler is ICC/ICPC
Snaipe <franklinmathieu@gmail.com>
parents: 0
diff changeset
175 # define DC__Arch_AMD64
6e7b1b7ad9d3 Fixed failing builds when the compiler is ICC/ICPC
Snaipe <franklinmathieu@gmail.com>
parents: 0
diff changeset
176 #elif defined(_M_IX86) || defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(__386__) || defined(__i386)
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
177 # define DC__Arch_Intel_x86
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
178 #elif defined(_M_IA64) || defined(__ia64__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
179 # define DC__Arch_Itanium
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
180 #elif defined(_M_PPC) || defined(__powerpc__) || defined(__powerpc) || defined(__POWERPC__) || defined(__ppc__) || defined(__power__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
181 # if defined(__ppc64__) || defined(_ARCH_PPC64) || defined(__power64__) || defined(__powerpc64__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
182 # define DC__Arch_PPC64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
183 # else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
184 # define DC__Arch_PPC32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
185 # endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
186 #elif defined(__mips64__) || defined(__mips64)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
187 # define DC__Arch_MIPS64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
188 #elif defined(_M_MRX000) || defined(__mips__) || defined(__mips) || defined(_mips)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
189 # define DC__Arch_MIPS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
190 #elif defined(__arm__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
191 # define DC__Arch_ARM
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
192 #elif defined(__aarch64__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
193 # define DC__Arch_ARM64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
194 #elif defined(__sh__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
195 # define DC__Arch_SuperH
180
629cfbba5ba0 - sparc predef cleanup
cslag
parents: 179
diff changeset
196 #elif defined(__sparc) || defined(__sparc__)
629cfbba5ba0 - sparc predef cleanup
cslag
parents: 179
diff changeset
197 # if defined(__sparcv9) || defined(__sparc_v9__) || defined(__sparc64__) || defined(__arch64__)
629cfbba5ba0 - sparc predef cleanup
cslag
parents: 179
diff changeset
198 # define DC__Arch_Sparc64
629cfbba5ba0 - sparc predef cleanup
cslag
parents: 179
diff changeset
199 # else
629cfbba5ba0 - sparc predef cleanup
cslag
parents: 179
diff changeset
200 # define DC__Arch_Sparc
629cfbba5ba0 - sparc predef cleanup
cslag
parents: 179
diff changeset
201 # endif
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
202 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
203
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
204
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
205
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
206 /* Rough OS classification. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
207
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
208 #if defined(DC__OS_Win32) || defined(DC__OS_Win64)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
209 # define DC_WINDOWS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
210 #elif defined(DC__OS_Plan9)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
211 # define DC_PLAN9
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
212 #elif defined(DC__OS_NDS) || defined(DC__OS_PSP)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
213 # define DC_OTHER
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
214 #else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
215 # define DC_UNIX
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
216 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
217
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
218
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
219
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
220 /* Misc machine-dependent modes, ABIs, etc.. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
221
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
222 #if defined(__arm__) && !defined(__thumb__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
223 # define DC__Arch_ARM_ARM
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
224 #elif defined(__arm__) && defined(__thumb__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
225 # define DC__Arch_ARM_THUMB
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
226 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
227
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
228 #if defined(DC__Arch_ARM_ARM) || defined(DC__Arch_ARM_THUMB)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
229 # if defined(__ARM_EABI__) || defined(DC__OS_NDS)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
230 # if defined (__ARM_PCS_VFP) && (__ARM_PCS_VFP == 1)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
231 # define DC__ABI_ARM_HF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
232 # else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
233 # define DC__ABI_ARM_EABI
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
234 # endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
235 # elif defined(__APCS_32__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
236 # define DC__ABI_ARM_OABI
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
237 # endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
238 #endif /* ARM */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
239
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
240 #if defined(DC__Arch_MIPS) || defined(DC__Arch_MIPS64)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
241 # if defined(_ABIO32) || defined(_MIPS_ARCH_MIPS1) || defined(_MIPS_ARCH_MIPS2)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
242 # define DC__ABI_MIPS_O32
112
0baf4f79a8c5 - added __mips_n64 predef detection to macros.h
cslag
parents: 101
diff changeset
243 # elif defined(_ABI64) || defined(_mips_n64)
0baf4f79a8c5 - added __mips_n64 predef detection to macros.h
cslag
parents: 101
diff changeset
244 # define DC__ABI_MIPS_N64
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
245 # elif defined(_ABIN32)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
246 # define DC__ABI_MIPS_N32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
247 # else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
248 # define DC__ABI_MIPS_EABI
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
249 # endif
141
e63089fe5bef - todo update
cslag
parents: 118
diff changeset
250 /*@@@implement/support: __mips_hard_float*/
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
251 #endif /* MIPS */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
252
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
253 #if defined(DC__Arch_PPC64)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
254 # if defined(_CALL_ELF)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
255 # define DC__ABI_PPC64_ELF_V _CALL_ELF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
256 # else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
257 # define DC__ABI_PPC64_ELF_V 0 /* 0 means not explicitly set, otherwise this is 1 (big endian) and 2 (little endian) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
258 # endif
112
0baf4f79a8c5 - added __mips_n64 predef detection to macros.h
cslag
parents: 101
diff changeset
259 #endif /* PPC64 */
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
260
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
261
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
262 /* Endian detection. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
263 #if defined(DC__Arch_Intel_x86) || defined(DC__Arch_AMD64) /* always little */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
264 # define DC__Endian_LITTLE
179
b11b0735b09f - renamings: sparc_v9 -> sparc64
cslag
parents: 174
diff changeset
265 #elif defined(DC__Arch_Sparc) /* always purely big until v9 */
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
266 # define DC__Endian_BIG
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
267 #else /* all others are bi-endian */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
268 /* @@@check flags used on following bi-endianness archs:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
269 DC__Arch_ARM
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
270 DC__Arch_ARM64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
271 DC__Arch_Itanium
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
272 DC__Arch_PPC32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
273 DC__Arch_PPC64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
274 DC__Arch_SuperH
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
275 */
115
b0d5b49bf418 - added more macros to detect MIPS platforms
cslag
parents: 112
diff changeset
276 # if (defined(DC__Arch_PPC64) && (DC__ABI_PPC64_ELF_V == 1)) || defined(_BIG_ENDIAN) || defined(MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__)
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
277 # define DC__Endian_BIG
115
b0d5b49bf418 - added more macros to detect MIPS platforms
cslag
parents: 112
diff changeset
278 # elif (defined(DC__Arch_PPC64) && (DC__ABI_PPC64_ELF_V == 2)) || defined(_LITTLE_ENDIAN) || defined(MIPSEL) || defined(__MIPSEL) || defined(__MIPSEL__)
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
279 # define DC__Endian_LITTLE
204
a74e2cd93348 - sparc64 endian detection on non-explicit platforms
Tassilo Philipp
parents: 188
diff changeset
280 # elif defined(DC__Arch_Sparc64) && !defined(__BYTE_ORDER__) /* Sparc64 default is big-endian, except if explicitly defined */
a74e2cd93348 - sparc64 endian detection on non-explicit platforms
Tassilo Philipp
parents: 188
diff changeset
281 # define DC__Endian_BIG
188
44ae5b653086 - more endian detection in macros
Tassilo Philipp
parents: 180
diff changeset
282 # elif defined(__BYTE_ORDER__) /* explicitly set */
44ae5b653086 - more endian detection in macros
Tassilo Philipp
parents: 180
diff changeset
283 # if defined(__ORDER_BIG_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
44ae5b653086 - more endian detection in macros
Tassilo Philipp
parents: 180
diff changeset
284 # define DC__Endian_BIG
44ae5b653086 - more endian detection in macros
Tassilo Philipp
parents: 180
diff changeset
285 # elif defined(__ORDER_LITTLE_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
44ae5b653086 - more endian detection in macros
Tassilo Philipp
parents: 180
diff changeset
286 # define DC__Endian_LITTLE
44ae5b653086 - more endian detection in macros
Tassilo Philipp
parents: 180
diff changeset
287 # endif
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
288 # endif /* no else, leave unset if not sure */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
289 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
290
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
291
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
292 /* Internal macro/tag. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
293 #if !defined(DC_API)
188
44ae5b653086 - more endian detection in macros
Tassilo Philipp
parents: 180
diff changeset
294 # define DC_API
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
295 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
296
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
297 #endif /* DYNCALL_MACROS_H */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
298