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