source: trunk/include/odin.h@ 21523

Last change on this file since 21523 was 21523, checked in by dmik, 15 years ago

Fixed INLINE: GCC always generates non-inline bodies for pure inline functions. So, those of them placed in headers must also be either static or extern to avoid duplicate symbols at link time. We use static because this causes the compiler to automatically generate local non-inlined bodies in case when inlining is not possible (for example, in debug builds) while extern would requires explicit body generation in a separate compilation unit.

File size: 3.5 KB
Line 
1/*
2 * ODIN - Build Environment Definition
3 *
4 * Copyright (C) 1999 Patrick Haller <phaller@gmx.net>
5 *
6 * ------------------------------------------------------------
7 * Note: Only compiler linkage definitions and similar stuff
8 * goes here. Nothing else.
9 * ------------------------------------------------------------
10 *
11 */
12
13
14#ifndef _ODIN_H_
15#define _ODIN_H_
16
17
18/***********************************
19 * Compiler Environment Definition *
20 ***********************************/
21
22#ifdef CDECL
23# undef CDECL
24#endif
25
26#ifdef EXPORT
27# undef EXPORT
28#endif
29
30#ifdef WIN32API
31# undef WIN32API
32#endif
33
34#ifdef SYSTEM
35# undef SYSTEM
36#endif
37
38#ifdef PASCAL
39# undef PASCAL
40#endif
41
42#ifdef UNALIGNED
43# undef UNALIGNED
44#endif
45
46
47/* ---------- WATCOM C ---------- */
48#ifdef __WATCOMC__
49 #define CDECL _cdecl
50 #define EXPORT _export
51 #define WIN32API __stdcall
52 #define WINAPI __stdcall
53 #define SYSTEM _System
54 #define PASCAL __stdcall
55 #ifdef __cplusplus
56 #define INLINE inline
57 #else
58 #define INLINE __inline
59 #define inline __inline
60 #endif
61 #define UNALIGNED
62 #define __attribute__(x)
63
64//MN: For some strange reason Watcom doesn't define these for C++!
65// This is not the best place to define them though.
66#ifdef __cplusplus
67 #define min(a,b) (((a) < (b)) ? (a) : (b))
68 #define max(a,b) (((a) > (b)) ? (a) : (b))
69#endif
70
71#else
72
73/* ---------- GCC/EMX ---------- */
74#ifdef __GNUC__
75 #if defined(__GNUC__) && (__GNUC__ <= 3) && (__GNUC_MINOR__ < 2)
76 #error You need gcc >= 3.2 to build Odin32
77 #endif
78 #if !defined(__stdcall__) /* this is also defined in windef.h if !defined(WIN32OS2) */
79 #define __stdcall __attribute__((__stdcall__))
80 #define __cdecl __attribute__((__cdecl__))
81 #endif
82 #define CDECL _cdecl
83 #define EXPORT _export
84 #define WIN32API __stdcall
85 #define WINAPI __stdcall
86 #define PASCAL __stdcall
87 #define INLINE static __inline__
88 #define UNALIGNED
89 #if (__GNUC__ < 4)
90 #define NONAMELESSUNION
91 #define NONAMELESSSTRUCT
92 #endif
93 #ifdef __INNOTEK_LIBC__
94 #define SYSTEM _System
95 #define APIENTRY _System
96 #else
97 #define SYSTEM CDECL
98 #undef APIENTRY
99 #define APIENTRY CDECL
100 #endif
101
102#else
103
104/* ---------- VAC ---------- */
105#if (defined(__IBMCPP__) || defined(__IBMC__))
106
107 #define CDECL __cdecl
108 #define EXPORT _Export
109 #define WIN32API __stdcall
110 #define WINAPI __stdcall
111 #define SYSTEM _System
112 #define PASCAL __stdcall
113 #define UNALIGNED
114 #ifndef __cplusplus
115 #define INLINE _Inline
116 #define inline INLINE
117 #else
118 #define INLINE inline
119 #endif
120 #define __inline__ INLINE
121 #define __attribute__(x)
122
123
124#ifndef RC_INVOKED
125 //Nameless unions or structures are not supported in C mode
126 //(nameless unions only in CPP mode and nameless unions only in VAC 3.6.5 CPP mode)
127 #ifdef __IBMC__
128 #define NONAMELESSUNION
129 #define NONAMELESSSTRUCT
130 #endif
131 #if (__IBMCPP__ == 300)
132 #define NONAMELESSSTRUCT
133 #endif
134#endif
135
136#ifndef RC_INVOKED
137 #include <builtin.h>
138#endif
139
140#else
141#ifdef RC_INVOKED
142 //SvL: wrc chokes on calling conventions....
143 #define CDECL
144 #define EXPORT
145 #define WIN32API
146 #define WINAPI
147 #define CALLBACK
148 #define SYSTEM
149 #define PASCAL
150 #define UNALIGNED
151 #define __cdecl
152 #define _System
153 #define __inline__
154 #define INLINE
155#else
156/* ---------- ??? ---------- */
157#error No known compiler.
158#endif
159#endif
160#endif
161#endif
162
163
164
165#endif /* _ODIN_H_*/
166
Note: See TracBrowser for help on using the repository browser.