6 #ifndef OPENVDB_PLATFORM_HAS_BEEN_INCLUDED
7 #define OPENVDB_PLATFORM_HAS_BEEN_INCLUDED
9 #define PRAGMA(x) _Pragma(#x)
14 #define OPENVDB_PREPROC_STRINGIFY_(x) #x
19 #define OPENVDB_PREPROC_STRINGIFY(x) OPENVDB_PREPROC_STRINGIFY_(x)
22 #define OPENVDB_PREPROC_CONCAT_(x, y) x ## y
27 #define OPENVDB_PREPROC_CONCAT(x, y) OPENVDB_PREPROC_CONCAT_(x, y)
32 #define OPENVDB_CHECK_GCC(MAJOR, MINOR) \
33 (__GNUC__ > MAJOR || (__GNUC__ == MAJOR && __GNUC_MINOR__ >= MINOR))
35 #define OPENVDB_CHECK_GCC(MAJOR, MINOR) 0
39 #define OPENVDB_HAS_CXX11 1
43 #if defined(OPENVDB_USE_SSE42) || defined(OPENVDB_USE_AVX)
46 #elif defined(__GNUC__)
47 #if defined(__x86_64__) || defined(__i386__)
48 #include <x86intrin.h>
49 #elif defined(__ARM_NEON__)
60 #ifndef _USE_MATH_DEFINES
61 #define _USE_MATH_DEFINES
70 #if defined(_DLL) && !defined(OPENVDB_STATICLIB) && !defined(OPENVDB_DLL)
76 #if !defined(OPENVDB_OPENEXR_STATICLIB) && !defined(OPENEXR_DLL)
96 #if defined(__INTEL_COMPILER)
100 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_BEGIN \
101 _Pragma("warning (push)") \
102 _Pragma("warning (disable:111)") \
103 _Pragma("warning (disable:128)") \
104 _Pragma("warning (disable:185)") \
105 _Pragma("warning (disable:280)")
106 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_END \
107 _Pragma("warning (pop)")
108 #elif defined(__clang__)
109 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_BEGIN \
110 PRAGMA(clang diagnostic push) \
111 PRAGMA(clang diagnostic ignored "-Wunreachable-code")
112 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_END \
113 PRAGMA(clang diagnostic pop)
115 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_BEGIN
116 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_END
121 #ifndef OPENVDB_NO_DEPRECATION_WARNINGS
122 #define OPENVDB_DEPRECATED [[deprecated]]
123 #define OPENVDB_DEPRECATED_MESSAGE(msg) [[deprecated(msg)]]
125 #define OPENVDB_DEPRECATED
126 #define OPENVDB_DEPRECATED_MESSAGE(msg)
143 #if defined __INTEL_COMPILER
144 #define OPENVDB_NO_DEPRECATION_WARNING_BEGIN \
145 _Pragma("warning (push)") \
146 _Pragma("warning (disable:1478)")
147 #define OPENVDB_NO_DEPRECATION_WARNING_END \
148 _Pragma("warning (pop)")
149 #elif defined __clang__
150 #define OPENVDB_NO_DEPRECATION_WARNING_BEGIN \
151 _Pragma("clang diagnostic push") \
152 _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
154 #define OPENVDB_NO_DEPRECATION_WARNING_END \
155 _Pragma("clang diagnostic pop")
156 #elif defined __GNUC__
157 #define OPENVDB_NO_DEPRECATION_WARNING_BEGIN \
158 _Pragma("GCC diagnostic push") \
159 _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
160 #define OPENVDB_NO_DEPRECATION_WARNING_END \
161 _Pragma("GCC diagnostic pop")
162 #elif defined _MSC_VER
163 #define OPENVDB_NO_DEPRECATION_WARNING_BEGIN \
164 __pragma(warning(push)) \
165 __pragma(warning(disable : 4996))
166 #define OPENVDB_NO_DEPRECATION_WARNING_END \
167 __pragma(warning(pop))
169 #define OPENVDB_NO_DEPRECATION_WARNING_BEGIN
170 #define OPENVDB_NO_DEPRECATION_WARNING_END
184 #if defined __INTEL_COMPILER
185 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_BEGIN
186 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_END
187 #elif defined __GNUC__
189 #if OPENVDB_CHECK_GCC(4, 9)
190 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_BEGIN \
191 _Pragma("GCC diagnostic push") \
192 _Pragma("GCC diagnostic ignored \"-Wconversion\"") \
193 _Pragma("GCC diagnostic ignored \"-Wfloat-conversion\"")
195 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_BEGIN \
196 _Pragma("GCC diagnostic push") \
197 _Pragma("GCC diagnostic ignored \"-Wconversion\"")
199 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_END \
200 _Pragma("GCC diagnostic pop")
202 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_BEGIN
203 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_END
207 #ifdef OPENVDB_EXPORT
208 #undef OPENVDB_EXPORT
210 #ifdef OPENVDB_IMPORT
211 #undef OPENVDB_IMPORT
215 #define OPENVDB_EXPORT __declspec(dllexport)
216 #define OPENVDB_IMPORT __declspec(dllimport)
218 #define OPENVDB_EXPORT
219 #define OPENVDB_IMPORT
221 #elif defined(__GNUC__)
222 #define OPENVDB_EXPORT __attribute__((visibility("default")))
223 #define OPENVDB_IMPORT __attribute__((visibility("default")))
227 #if defined(_WIN32) && defined(OPENVDB_DLL)
228 #ifdef OPENVDB_PRIVATE
229 #define OPENVDB_TEMPLATE_EXPORT OPENVDB_EXPORT
230 #define OPENVDB_TEMPLATE_IMPORT
232 #define OPENVDB_TEMPLATE_EXPORT
233 #define OPENVDB_TEMPLATE_IMPORT OPENVDB_IMPORT
236 #define OPENVDB_TEMPLATE_IMPORT
237 #define OPENVDB_TEMPLATE_EXPORT
246 #ifdef OPENVDB_PRIVATE
247 #define OPENVDB_API OPENVDB_EXPORT
249 #define OPENVDB_API OPENVDB_IMPORT
251 #ifdef OPENVDB_HOUDINI_API
252 #undef OPENVDB_HOUDINI_API
254 #ifdef OPENVDB_HOUDINI_PRIVATE
255 #define OPENVDB_HOUDINI_API OPENVDB_EXPORT
257 #define OPENVDB_HOUDINI_API OPENVDB_IMPORT
260 #ifdef OPENVDB_AX_DLL
261 #ifdef OPENVDB_AX_API
262 #undef OPENVDB_AX_API
264 #ifdef OPENVDB_AX_PRIVATE
265 #define OPENVDB_AX_API OPENVDB_EXPORT
267 #define OPENVDB_AX_API OPENVDB_IMPORT
270 #define OPENVDB_AX_API
277 #define OPENVDB_START_THREADSAFE_STATIC_REFERENCE __pragma(warning(disable:1710))
278 #define OPENVDB_FINISH_THREADSAFE_STATIC_REFERENCE __pragma(warning(default:1710))
279 #define OPENVDB_START_THREADSAFE_STATIC_WRITE __pragma(warning(disable:1711))
280 #define OPENVDB_FINISH_THREADSAFE_STATIC_WRITE __pragma(warning(default:1711))
281 #define OPENVDB_START_THREADSAFE_STATIC_ADDRESS __pragma(warning(disable:1712))
282 #define OPENVDB_FINISH_THREADSAFE_STATIC_ADDRESS __pragma(warning(default:1712))
286 #define OPENVDB_START_NON_THREADSAFE_STATIC_REFERENCE __pragma(warning(disable:1710))
287 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_REFERENCE __pragma(warning(default:1710))
288 #define OPENVDB_START_NON_THREADSAFE_STATIC_WRITE __pragma(warning(disable:1711))
289 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_WRITE __pragma(warning(default:1711))
290 #define OPENVDB_START_NON_THREADSAFE_STATIC_ADDRESS __pragma(warning(disable:1712))
291 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_ADDRESS __pragma(warning(default:1712))
294 #define OPENVDB_THREADSAFE_STATIC_REFERENCE(CODE) \
295 __pragma(warning(disable:1710)); CODE; __pragma(warning(default:1710))
296 #define OPENVDB_THREADSAFE_STATIC_WRITE(CODE) \
297 __pragma(warning(disable:1711)); CODE; __pragma(warning(default:1711))
298 #define OPENVDB_THREADSAFE_STATIC_ADDRESS(CODE) \
299 __pragma(warning(disable:1712)); CODE; __pragma(warning(default:1712))
303 #define OPENVDB_START_THREADSAFE_STATIC_REFERENCE
304 #define OPENVDB_FINISH_THREADSAFE_STATIC_REFERENCE
305 #define OPENVDB_START_THREADSAFE_STATIC_WRITE
306 #define OPENVDB_FINISH_THREADSAFE_STATIC_WRITE
307 #define OPENVDB_START_THREADSAFE_STATIC_ADDRESS
308 #define OPENVDB_FINISH_THREADSAFE_STATIC_ADDRESS
310 #define OPENVDB_START_NON_THREADSAFE_STATIC_REFERENCE
311 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_REFERENCE
312 #define OPENVDB_START_NON_THREADSAFE_STATIC_WRITE
313 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_WRITE
314 #define OPENVDB_START_NON_THREADSAFE_STATIC_ADDRESS
315 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_ADDRESS
317 #define OPENVDB_THREADSAFE_STATIC_REFERENCE(CODE) CODE
318 #define OPENVDB_THREADSAFE_STATIC_WRITE(CODE) CODE
319 #define OPENVDB_THREADSAFE_STATIC_ADDRESS(CODE) CODE