Go to the documentation of this file.
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 // kept for backward compatibility
41 #if __cplusplus >= 202002L
42 #define OPENVDB_HAS_CXX20
46 #if defined(OPENVDB_USE_SSE42) || defined(OPENVDB_USE_AVX)
49 #elif defined(__GNUC__)
50 #if defined(__x86_64__) || defined(__i386__)
51 #include <x86intrin.h>
52 #elif defined(__ARM_NEON__)
67 #if defined(_DLL) && !defined(OPENVDB_STATICLIB) && !defined(OPENVDB_DLL)
74 #if defined(__clang__)
75 #define OPENVDB_UBSAN_SUPPRESS(X) __attribute__((no_sanitize(X)))
77 #define OPENVDB_UBSAN_SUPPRESS(X)
82 #if defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER)
84 #define OPENVDB_LIKELY(x) (__builtin_expect(static_cast<bool>(x), true))
85 #define OPENVDB_UNLIKELY(x) (__builtin_expect(static_cast<bool>(x), false))
87 #define OPENVDB_LIKELY(x) (__builtin_expect((x), 1))
88 #define OPENVDB_UNLIKELY(x) (__builtin_expect((x), 0))
91 #define OPENVDB_LIKELY(x) (x)
92 #define OPENVDB_UNLIKELY(x) (x)
98 #ifdef __has_cpp_attribute
99 #if __has_cpp_attribute(assume) >= 202207L
100 #define OPENVDB_ASSUME(...) [[assume(__VA_ARGS__)]]
103 #ifndef OPENVDB_ASSUME
104 #if defined(__clang__)
105 #define OPENVDB_ASSUME(...) __builtin_assume(__VA_ARGS__);
106 #elif defined(_MSC_VER)
107 #define OPENVDB_ASSUME(...) __assume(__VA_ARGS__);
108 #elif defined(__GNUC__)
110 #define OPENVDB_ASSUME(...) __attribute__((__assume__(__VA_ARGS__)))
114 #ifndef OPENVDB_ASSUME
115 #define OPENVDB_ASSUME(...)
121 #if defined(__GNUC__)
122 #define OPENVDB_FORCE_INLINE __attribute__((always_inline)) inline
123 #elif defined(_MSC_VER)
124 #define OPENVDB_FORCE_INLINE __forceinline
126 #define OPENVDB_FORCE_INLINE inline
144 #if defined(__INTEL_COMPILER)
148 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_BEGIN \
149 _Pragma("warning (push)") \
150 _Pragma("warning (disable:111)") \
151 _Pragma("warning (disable:128)") \
152 _Pragma("warning (disable:185)") \
153 _Pragma("warning (disable:280)")
154 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_END \
155 _Pragma("warning (pop)")
156 #elif defined(__clang__)
157 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_BEGIN \
158 PRAGMA(clang diagnostic push) \
159 PRAGMA(clang diagnostic ignored "-Wunreachable-code")
160 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_END \
161 PRAGMA(clang diagnostic pop)
163 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_BEGIN
164 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_END
169 #ifndef OPENVDB_NO_DEPRECATION_WARNINGS
170 #define OPENVDB_DEPRECATED [[deprecated]]
171 #define OPENVDB_DEPRECATED_MESSAGE(msg) [[deprecated(msg)]]
173 #define OPENVDB_DEPRECATED
174 #define OPENVDB_DEPRECATED_MESSAGE(msg)
191 #if defined __INTEL_COMPILER
192 #define OPENVDB_NO_DEPRECATION_WARNING_BEGIN \
193 _Pragma("warning (push)") \
194 _Pragma("warning (disable:1478)")
195 #define OPENVDB_NO_DEPRECATION_WARNING_END \
196 _Pragma("warning (pop)")
197 #elif defined __clang__
198 #define OPENVDB_NO_DEPRECATION_WARNING_BEGIN \
199 _Pragma("clang diagnostic push") \
200 _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
202 #define OPENVDB_NO_DEPRECATION_WARNING_END \
203 _Pragma("clang diagnostic pop")
204 #elif defined __GNUC__
205 #define OPENVDB_NO_DEPRECATION_WARNING_BEGIN \
206 _Pragma("GCC diagnostic push") \
207 _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
208 #define OPENVDB_NO_DEPRECATION_WARNING_END \
209 _Pragma("GCC diagnostic pop")
210 #elif defined _MSC_VER
211 #define OPENVDB_NO_DEPRECATION_WARNING_BEGIN \
212 __pragma(warning(push)) \
213 __pragma(warning(disable : 4996))
214 #define OPENVDB_NO_DEPRECATION_WARNING_END \
215 __pragma(warning(pop))
217 #define OPENVDB_NO_DEPRECATION_WARNING_BEGIN
218 #define OPENVDB_NO_DEPRECATION_WARNING_END
232 #if defined __INTEL_COMPILER
233 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_BEGIN
234 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_END
235 #elif defined __GNUC__
237 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_BEGIN \
238 _Pragma("GCC diagnostic push") \
239 _Pragma("GCC diagnostic ignored \"-Wconversion\"") \
240 _Pragma("GCC diagnostic ignored \"-Wfloat-conversion\"")
241 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_END \
242 _Pragma("GCC diagnostic pop")
244 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_BEGIN
245 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_END
249 #ifdef OPENVDB_EXPORT
250 #undef OPENVDB_EXPORT
252 #ifdef OPENVDB_IMPORT
253 #undef OPENVDB_IMPORT
257 #define OPENVDB_EXPORT __declspec(dllexport)
258 #define OPENVDB_IMPORT __declspec(dllimport)
260 #define OPENVDB_EXPORT
261 #define OPENVDB_IMPORT
263 #elif defined(__GNUC__)
264 #define OPENVDB_EXPORT __attribute__((visibility("default")))
265 #define OPENVDB_IMPORT __attribute__((visibility("default")))
269 #if defined(_WIN32) && defined(OPENVDB_DLL)
270 #ifdef OPENVDB_PRIVATE
271 #define OPENVDB_TEMPLATE_EXPORT OPENVDB_EXPORT
272 #define OPENVDB_TEMPLATE_IMPORT
274 #define OPENVDB_TEMPLATE_EXPORT
275 #define OPENVDB_TEMPLATE_IMPORT OPENVDB_IMPORT
278 #define OPENVDB_TEMPLATE_IMPORT
279 #define OPENVDB_TEMPLATE_EXPORT
288 #ifdef OPENVDB_PRIVATE
289 #define OPENVDB_API OPENVDB_EXPORT
291 #define OPENVDB_API OPENVDB_IMPORT
293 #ifdef OPENVDB_HOUDINI_API
294 #undef OPENVDB_HOUDINI_API
296 #ifdef OPENVDB_HOUDINI_PRIVATE
297 #define OPENVDB_HOUDINI_API OPENVDB_EXPORT
299 #define OPENVDB_HOUDINI_API OPENVDB_IMPORT
302 #ifdef OPENVDB_AX_DLL
303 #ifdef OPENVDB_AX_API
304 #undef OPENVDB_AX_API
306 #ifdef OPENVDB_AX_PRIVATE
307 #define OPENVDB_AX_API OPENVDB_EXPORT
309 #define OPENVDB_AX_API OPENVDB_IMPORT
312 #define OPENVDB_AX_API
313 #endif // OPENVDB_AX_DLL
319 #define OPENVDB_START_THREADSAFE_STATIC_REFERENCE __pragma(warning(disable:1710))
320 #define OPENVDB_FINISH_THREADSAFE_STATIC_REFERENCE __pragma(warning(default:1710))
321 #define OPENVDB_START_THREADSAFE_STATIC_WRITE __pragma(warning(disable:1711))
322 #define OPENVDB_FINISH_THREADSAFE_STATIC_WRITE __pragma(warning(default:1711))
323 #define OPENVDB_START_THREADSAFE_STATIC_ADDRESS __pragma(warning(disable:1712))
324 #define OPENVDB_FINISH_THREADSAFE_STATIC_ADDRESS __pragma(warning(default:1712))
328 #define OPENVDB_START_NON_THREADSAFE_STATIC_REFERENCE __pragma(warning(disable:1710))
329 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_REFERENCE __pragma(warning(default:1710))
330 #define OPENVDB_START_NON_THREADSAFE_STATIC_WRITE __pragma(warning(disable:1711))
331 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_WRITE __pragma(warning(default:1711))
332 #define OPENVDB_START_NON_THREADSAFE_STATIC_ADDRESS __pragma(warning(disable:1712))
333 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_ADDRESS __pragma(warning(default:1712))
336 #define OPENVDB_THREADSAFE_STATIC_REFERENCE(CODE) \
337 __pragma(warning(disable:1710)); CODE; __pragma(warning(default:1710))
338 #define OPENVDB_THREADSAFE_STATIC_WRITE(CODE) \
339 __pragma(warning(disable:1711)); CODE; __pragma(warning(default:1711))
340 #define OPENVDB_THREADSAFE_STATIC_ADDRESS(CODE) \
341 __pragma(warning(disable:1712)); CODE; __pragma(warning(default:1712))
343 #else // GCC does not support these compiler warnings
345 #define OPENVDB_START_THREADSAFE_STATIC_REFERENCE
346 #define OPENVDB_FINISH_THREADSAFE_STATIC_REFERENCE
347 #define OPENVDB_START_THREADSAFE_STATIC_WRITE
348 #define OPENVDB_FINISH_THREADSAFE_STATIC_WRITE
349 #define OPENVDB_START_THREADSAFE_STATIC_ADDRESS
350 #define OPENVDB_FINISH_THREADSAFE_STATIC_ADDRESS
352 #define OPENVDB_START_NON_THREADSAFE_STATIC_REFERENCE
353 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_REFERENCE
354 #define OPENVDB_START_NON_THREADSAFE_STATIC_WRITE
355 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_WRITE
356 #define OPENVDB_START_NON_THREADSAFE_STATIC_ADDRESS
357 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_ADDRESS
359 #define OPENVDB_THREADSAFE_STATIC_REFERENCE(CODE) CODE
360 #define OPENVDB_THREADSAFE_STATIC_WRITE(CODE) CODE
361 #define OPENVDB_THREADSAFE_STATIC_ADDRESS(CODE) CODE
363 #endif // defined(__ICC)
365 #endif // OPENVDB_PLATFORM_HAS_BEEN_INCLUDED