1 /************************************************************************** 2 * 3 * Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com> 4 * Copyright 2010 LunarG, Inc. 5 * All Rights Reserved. 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a 8 * copy of this software and associated documentation files (the 9 * "Software"), to deal in the Software without restriction, including 10 * without limitation the rights to use, copy, modify, merge, publish, 11 * distribute, sub license, and/or sell copies of the Software, and to 12 * permit persons to whom the Software is furnished to do so, subject to 13 * the following conditions: 14 * 15 * The above copyright notice and this permission notice (including the 16 * next paragraph) shall be included in all copies or substantial portions 17 * of the Software. 18 * 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 24 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 * DEALINGS IN THE SOFTWARE. 26 * 27 **************************************************************************/ 28 29 30 #ifndef EGLCOMPILER_INCLUDED 31 #define EGLCOMPILER_INCLUDED 32 33 34 /** 35 * Get standard integer types 36 */ 37 #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) 38 # include <stdint.h> 39 #elif defined(_MSC_VER) 40 typedef __int8 int8_t; 41 typedef unsigned __int8 uint8_t; 42 typedef __int16 int16_t; 43 typedef unsigned __int16 uint16_t; 44 typedef __int32 int32_t; 45 typedef unsigned __int32 uint32_t; 46 typedef __int64 int64_t; 47 typedef unsigned __int64 uint64_t; 48 49 # if defined(_WIN64) 50 typedef __int64 intptr_t; 51 typedef unsigned __int64 uintptr_t; 52 # else 53 typedef __int32 intptr_t; 54 typedef unsigned __int32 uintptr_t; 55 # endif 56 57 # define INT64_C(__val) __val##i64 58 # define UINT64_C(__val) __val##ui64 59 #else 60 /* hope the best instead of adding a bunch of ifdef's */ 61 # include <stdint.h> 62 #endif 63 64 65 /** 66 * Function inlining 67 */ 68 #ifndef inline 69 # ifdef __cplusplus 70 /* C++ supports inline keyword */ 71 # elif defined(__GNUC__) 72 # define inline __inline__ 73 # elif defined(_MSC_VER) 74 # define inline __inline 75 # elif defined(__ICL) 76 # define inline __inline 77 # elif defined(__INTEL_COMPILER) 78 /* Intel compiler supports inline keyword */ 79 # elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100) 80 # define inline __inline 81 # elif defined(__SUNPRO_C) && defined(__C99FEATURES__) 82 /* C99 supports inline keyword */ 83 # elif (__STDC_VERSION__ >= 199901L) 84 /* C99 supports inline keyword */ 85 # else 86 # define inline 87 # endif 88 #endif 89 #ifndef INLINE 90 # define INLINE inline 91 #endif 92 93 94 /** 95 * Function visibility 96 */ 97 #ifndef PUBLIC 98 # if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) 99 # define PUBLIC __attribute__((visibility("default"))) 100 # elif defined(_MSC_VER) 101 # define PUBLIC __declspec(dllexport) 102 # else 103 # define PUBLIC 104 # endif 105 #endif 106 107 /** 108 * The __FUNCTION__ gcc variable is generally only used for debugging. 109 * If we're not using gcc, define __FUNCTION__ as a cpp symbol here. 110 * Don't define it if using a newer Windows compiler. 111 */ 112 #ifndef __FUNCTION__ 113 # if defined(__VMS) 114 # define __FUNCTION__ "VMS$NL:" 115 # elif (!defined __GNUC__) && (!defined __xlC__) && \ 116 (!defined(_MSC_VER) || _MSC_VER < 1300) 117 # if (__STDC_VERSION__ >= 199901L) /* C99 */ || \ 118 (defined(__SUNPRO_C) && defined(__C99FEATURES__)) 119 # define __FUNCTION__ __func__ 120 # else 121 # define __FUNCTION__ "<unknown>" 122 # endif 123 # endif 124 #endif 125 126 #endif /* EGLCOMPILER_INCLUDED */ 127