1 /* 2 Simple DirectMedia Layer 3 Copyright (C) 1997-2014 Sam Lantinga <slouken (at) libsdl.org> 4 5 This software is provided 'as-is', without any express or implied 6 warranty. In no event will the authors be held liable for any damages 7 arising from the use of this software. 8 9 Permission is granted to anyone to use this software for any purpose, 10 including commercial applications, and to alter it and redistribute it 11 freely, subject to the following restrictions: 12 13 1. The origin of this software must not be misrepresented; you must not 14 claim that you wrote the original software. If you use this software 15 in a product, an acknowledgment in the product documentation would be 16 appreciated but is not required. 17 2. Altered source versions must be plainly marked as such, and must not be 18 misrepresented as being the original software. 19 3. This notice may not be removed or altered from any source distribution. 20 */ 21 22 /** 23 * \file begin_code.h 24 * 25 * This file sets things up for C dynamic library function definitions, 26 * static inlined functions, and structures aligned at 4-byte alignment. 27 * If you don't like ugly C preprocessor code, don't look at this file. :) 28 */ 29 30 /* This shouldn't be nested -- included it around code only. */ 31 #ifdef _begin_code_h 32 #error Nested inclusion of begin_code.h 33 #endif 34 #define _begin_code_h 35 36 #ifndef SDL_DEPRECATED 37 # if (__GNUC__ >= 4) /* technically, this arrived in gcc 3.1, but oh well. */ 38 # define SDL_DEPRECATED __attribute__((deprecated)) 39 # else 40 # define SDL_DEPRECATED 41 # endif 42 #endif 43 44 /* Some compilers use a special export keyword */ 45 #ifndef DECLSPEC 46 # if defined(__WIN32__) || defined(__WINRT__) 47 # ifdef __BORLANDC__ 48 # ifdef BUILD_SDL 49 # define DECLSPEC 50 # else 51 # define DECLSPEC __declspec(dllimport) 52 # endif 53 # else 54 # define DECLSPEC __declspec(dllexport) 55 # endif 56 # else 57 # if defined(__GNUC__) && __GNUC__ >= 4 58 # define DECLSPEC __attribute__ ((visibility("default"))) 59 # elif defined(__GNUC__) && __GNUC__ >= 2 60 # define DECLSPEC __declspec(dllexport) 61 # else 62 # define DECLSPEC 63 # endif 64 # endif 65 #endif 66 67 /* By default SDL uses the C calling convention */ 68 #ifndef SDLCALL 69 #if (defined(__WIN32__) || defined(__WINRT__)) && !defined(__GNUC__) 70 #define SDLCALL __cdecl 71 #else 72 #define SDLCALL 73 #endif 74 #endif /* SDLCALL */ 75 76 /* Removed DECLSPEC on Symbian OS because SDL cannot be a DLL in EPOC */ 77 #ifdef __SYMBIAN32__ 78 #undef DECLSPEC 79 #define DECLSPEC 80 #endif /* __SYMBIAN32__ */ 81 82 /* Force structure packing at 4 byte alignment. 83 This is necessary if the header is included in code which has structure 84 packing set to an alternate value, say for loading structures from disk. 85 The packing is reset to the previous value in close_code.h 86 */ 87 #if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) 88 #ifdef _MSC_VER 89 #pragma warning(disable: 4103) 90 #endif 91 #ifdef __BORLANDC__ 92 #pragma nopackwarning 93 #endif 94 #ifdef _M_X64 95 /* Use 8-byte alignment on 64-bit architectures, so pointers are aligned */ 96 #pragma pack(push,8) 97 #else 98 #pragma pack(push,4) 99 #endif 100 #endif /* Compiler needs structure packing set */ 101 102 #ifndef SDL_INLINE 103 #if defined(__GNUC__) 104 #define SDL_INLINE __inline__ 105 #elif defined(_MSC_VER) || defined(__BORLANDC__) || \ 106 defined(__DMC__) || defined(__SC__) || \ 107 defined(__WATCOMC__) || defined(__LCC__) || \ 108 defined(__DECC) 109 #define SDL_INLINE __inline 110 #ifndef __inline__ 111 #define __inline__ __inline 112 #endif 113 #else 114 #define SDL_INLINE inline 115 #ifndef __inline__ 116 #define __inline__ inline 117 #endif 118 #endif 119 #endif /* SDL_INLINE not defined */ 120 121 #ifndef SDL_FORCE_INLINE 122 #if defined(_MSC_VER) 123 #define SDL_FORCE_INLINE __forceinline 124 #elif ( (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) ) 125 #define SDL_FORCE_INLINE __attribute__((always_inline)) static __inline__ 126 #else 127 #define SDL_FORCE_INLINE static SDL_INLINE 128 #endif 129 #endif /* SDL_FORCE_INLINE not defined */ 130 131 /* Apparently this is needed by several Windows compilers */ 132 #if !defined(__MACH__) 133 #ifndef NULL 134 #ifdef __cplusplus 135 #define NULL 0 136 #else 137 #define NULL ((void *)0) 138 #endif 139 #endif /* NULL */ 140 #endif /* ! Mac OS X - breaks precompiled headers */ 141