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)
73 #if !defined(OPENVDB_OPENEXR_STATICLIB) && !defined(OPENEXR_DLL)
80 #if defined(__clang__)
81 #define OPENVDB_UBSAN_SUPPRESS(X) __attribute__((no_sanitize(X)))
83 #define OPENVDB_UBSAN_SUPPRESS(X)
88 #if defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER)
90 #define OPENVDB_LIKELY(x) (__builtin_expect(static_cast<bool>(x), true))
91 #define OPENVDB_UNLIKELY(x) (__builtin_expect(static_cast<bool>(x), false))
93 #define OPENVDB_LIKELY(x) (__builtin_expect((x), 1))
94 #define OPENVDB_UNLIKELY(x) (__builtin_expect((x), 0))
97 #define OPENVDB_LIKELY(x) (x)
98 #define OPENVDB_UNLIKELY(x) (x)
104 #if defined(__GNUC__)
105 #define OPENVDB_FORCE_INLINE __attribute__((always_inline)) inline
106 #elif defined(_MSC_VER)
107 #define OPENVDB_FORCE_INLINE __forceinline
109 #define OPENVDB_FORCE_INLINE inline
127 #if defined(__INTEL_COMPILER)
131 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_BEGIN \
132 _Pragma("warning (push)") \
133 _Pragma("warning (disable:111)") \
134 _Pragma("warning (disable:128)") \
135 _Pragma("warning (disable:185)") \
136 _Pragma("warning (disable:280)")
137 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_END \
138 _Pragma("warning (pop)")
139 #elif defined(__clang__)
140 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_BEGIN \
141 PRAGMA(clang diagnostic push) \
142 PRAGMA(clang diagnostic ignored "-Wunreachable-code")
143 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_END \
144 PRAGMA(clang diagnostic pop)
146 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_BEGIN
147 #define OPENVDB_NO_UNREACHABLE_CODE_WARNING_END
152 #ifndef OPENVDB_NO_DEPRECATION_WARNINGS
153 #define OPENVDB_DEPRECATED [[deprecated]]
154 #define OPENVDB_DEPRECATED_MESSAGE(msg) [[deprecated(msg)]]
156 #define OPENVDB_DEPRECATED
157 #define OPENVDB_DEPRECATED_MESSAGE(msg)
174 #if defined __INTEL_COMPILER
175 #define OPENVDB_NO_DEPRECATION_WARNING_BEGIN \
176 _Pragma("warning (push)") \
177 _Pragma("warning (disable:1478)")
178 #define OPENVDB_NO_DEPRECATION_WARNING_END \
179 _Pragma("warning (pop)")
180 #elif defined __clang__
181 #define OPENVDB_NO_DEPRECATION_WARNING_BEGIN \
182 _Pragma("clang diagnostic push") \
183 _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
185 #define OPENVDB_NO_DEPRECATION_WARNING_END \
186 _Pragma("clang diagnostic pop")
187 #elif defined __GNUC__
188 #define OPENVDB_NO_DEPRECATION_WARNING_BEGIN \
189 _Pragma("GCC diagnostic push") \
190 _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
191 #define OPENVDB_NO_DEPRECATION_WARNING_END \
192 _Pragma("GCC diagnostic pop")
193 #elif defined _MSC_VER
194 #define OPENVDB_NO_DEPRECATION_WARNING_BEGIN \
195 __pragma(warning(push)) \
196 __pragma(warning(disable : 4996))
197 #define OPENVDB_NO_DEPRECATION_WARNING_END \
198 __pragma(warning(pop))
200 #define OPENVDB_NO_DEPRECATION_WARNING_BEGIN
201 #define OPENVDB_NO_DEPRECATION_WARNING_END
215 #if defined __INTEL_COMPILER
216 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_BEGIN
217 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_END
218 #elif defined __GNUC__
220 #if OPENVDB_CHECK_GCC(4, 9)
221 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_BEGIN \
222 _Pragma("GCC diagnostic push") \
223 _Pragma("GCC diagnostic ignored \"-Wconversion\"") \
224 _Pragma("GCC diagnostic ignored \"-Wfloat-conversion\"")
226 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_BEGIN \
227 _Pragma("GCC diagnostic push") \
228 _Pragma("GCC diagnostic ignored \"-Wconversion\"")
230 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_END \
231 _Pragma("GCC diagnostic pop")
233 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_BEGIN
234 #define OPENVDB_NO_TYPE_CONVERSION_WARNING_END
238 #ifdef OPENVDB_EXPORT
239 #undef OPENVDB_EXPORT
241 #ifdef OPENVDB_IMPORT
242 #undef OPENVDB_IMPORT
246 #define OPENVDB_EXPORT __declspec(dllexport)
247 #define OPENVDB_IMPORT __declspec(dllimport)
249 #define OPENVDB_EXPORT
250 #define OPENVDB_IMPORT
252 #elif defined(__GNUC__)
253 #define OPENVDB_EXPORT __attribute__((visibility("default")))
254 #define OPENVDB_IMPORT __attribute__((visibility("default")))
258 #if defined(_WIN32) && defined(OPENVDB_DLL)
259 #ifdef OPENVDB_PRIVATE
260 #define OPENVDB_TEMPLATE_EXPORT OPENVDB_EXPORT
261 #define OPENVDB_TEMPLATE_IMPORT
263 #define OPENVDB_TEMPLATE_EXPORT
264 #define OPENVDB_TEMPLATE_IMPORT OPENVDB_IMPORT
267 #define OPENVDB_TEMPLATE_IMPORT
268 #define OPENVDB_TEMPLATE_EXPORT
277 #ifdef OPENVDB_PRIVATE
278 #define OPENVDB_API OPENVDB_EXPORT
280 #define OPENVDB_API OPENVDB_IMPORT
282 #ifdef OPENVDB_HOUDINI_API
283 #undef OPENVDB_HOUDINI_API
285 #ifdef OPENVDB_HOUDINI_PRIVATE
286 #define OPENVDB_HOUDINI_API OPENVDB_EXPORT
288 #define OPENVDB_HOUDINI_API OPENVDB_IMPORT
291 #ifdef OPENVDB_AX_DLL
292 #ifdef OPENVDB_AX_API
293 #undef OPENVDB_AX_API
295 #ifdef OPENVDB_AX_PRIVATE
296 #define OPENVDB_AX_API OPENVDB_EXPORT
298 #define OPENVDB_AX_API OPENVDB_IMPORT
301 #define OPENVDB_AX_API
302 #endif // OPENVDB_AX_DLL
308 #define OPENVDB_START_THREADSAFE_STATIC_REFERENCE __pragma(warning(disable:1710))
309 #define OPENVDB_FINISH_THREADSAFE_STATIC_REFERENCE __pragma(warning(default:1710))
310 #define OPENVDB_START_THREADSAFE_STATIC_WRITE __pragma(warning(disable:1711))
311 #define OPENVDB_FINISH_THREADSAFE_STATIC_WRITE __pragma(warning(default:1711))
312 #define OPENVDB_START_THREADSAFE_STATIC_ADDRESS __pragma(warning(disable:1712))
313 #define OPENVDB_FINISH_THREADSAFE_STATIC_ADDRESS __pragma(warning(default:1712))
317 #define OPENVDB_START_NON_THREADSAFE_STATIC_REFERENCE __pragma(warning(disable:1710))
318 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_REFERENCE __pragma(warning(default:1710))
319 #define OPENVDB_START_NON_THREADSAFE_STATIC_WRITE __pragma(warning(disable:1711))
320 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_WRITE __pragma(warning(default:1711))
321 #define OPENVDB_START_NON_THREADSAFE_STATIC_ADDRESS __pragma(warning(disable:1712))
322 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_ADDRESS __pragma(warning(default:1712))
325 #define OPENVDB_THREADSAFE_STATIC_REFERENCE(CODE) \
326 __pragma(warning(disable:1710)); CODE; __pragma(warning(default:1710))
327 #define OPENVDB_THREADSAFE_STATIC_WRITE(CODE) \
328 __pragma(warning(disable:1711)); CODE; __pragma(warning(default:1711))
329 #define OPENVDB_THREADSAFE_STATIC_ADDRESS(CODE) \
330 __pragma(warning(disable:1712)); CODE; __pragma(warning(default:1712))
332 #else // GCC does not support these compiler warnings
334 #define OPENVDB_START_THREADSAFE_STATIC_REFERENCE
335 #define OPENVDB_FINISH_THREADSAFE_STATIC_REFERENCE
336 #define OPENVDB_START_THREADSAFE_STATIC_WRITE
337 #define OPENVDB_FINISH_THREADSAFE_STATIC_WRITE
338 #define OPENVDB_START_THREADSAFE_STATIC_ADDRESS
339 #define OPENVDB_FINISH_THREADSAFE_STATIC_ADDRESS
341 #define OPENVDB_START_NON_THREADSAFE_STATIC_REFERENCE
342 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_REFERENCE
343 #define OPENVDB_START_NON_THREADSAFE_STATIC_WRITE
344 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_WRITE
345 #define OPENVDB_START_NON_THREADSAFE_STATIC_ADDRESS
346 #define OPENVDB_FINISH_NON_THREADSAFE_STATIC_ADDRESS
348 #define OPENVDB_THREADSAFE_STATIC_REFERENCE(CODE) CODE
349 #define OPENVDB_THREADSAFE_STATIC_WRITE(CODE) CODE
350 #define OPENVDB_THREADSAFE_STATIC_ADDRESS(CODE) CODE
352 #endif // defined(__ICC)
354 #endif // OPENVDB_PLATFORM_HAS_BEEN_INCLUDED