From a5914a83d0a5e04603ebfe2cf7d0956e984d57f2 Mon Sep 17 00:00:00 2001 From: Kimball Thurston Date: Thu, 18 Jul 2019 02:43:43 +1200 Subject: [PATCH] Fixes #95, compilation issue with mingw The tree now compiles using mingw to compile, tested by cross compiling for windows from linux Signed-off-by: Kimball Thurston --- OpenEXR/IlmImf/ImfSystemSpecific.h | 104 ++++++----------------------- OpenEXR/IlmImfTest/bswap_32.h | 2 +- 2 files changed, 22 insertions(+), 84 deletions(-) diff --git a/OpenEXR/IlmImf/ImfSystemSpecific.h b/OpenEXR/IlmImf/ImfSystemSpecific.h index 80dfe52f51..b34f65da6e 100644 --- a/OpenEXR/IlmImf/ImfSystemSpecific.h +++ b/OpenEXR/IlmImf/ImfSystemSpecific.h @@ -51,71 +51,41 @@ static unsigned long* systemEndianCheckPointer = &systemEndianCheckValue; static bool GLOBAL_SYSTEM_LITTLE_ENDIAN = (*(unsigned char*)systemEndianCheckPointer == 0x78 ? true : false); - -#ifdef IMF_HAVE_SSE2 - -#if defined(__GNUC__) -// Causes issues on certain gcc versions -//#define EXR_FORCEINLINE inline __attribute__((always_inline)) -#define EXR_FORCEINLINE inline -#define EXR_RESTRICT __restrict - -static void* EXRAllocAligned(size_t size, size_t alignment) +inline void* +EXRAllocAligned (size_t size, size_t alignment) { // GNUC is used for things like mingw to (cross-)compile for windows #ifdef _WIN32 - return _aligned_malloc(size, alignment); -#else + return _aligned_malloc (size, alignment); +#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC) + return _mm_malloc (size, alignment); +#elif defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L) void* ptr = 0; - posix_memalign(&ptr, alignment, size); + posix_memalign (&ptr, alignment, size); return ptr; +#else + return malloc(size); #endif } - -static void EXRFreeAligned(void* ptr) +inline void +EXRFreeAligned (void* ptr) { #ifdef _WIN32 - _aligned_free(ptr); + _aligned_free (ptr); +#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || \ + defined(__ECC) + _mm_free (ptr); #else - free(ptr); + free (ptr); #endif } -#elif defined _MSC_VER - -#define EXR_FORCEINLINE __forceinline -#define EXR_RESTRICT __restrict - -static void* EXRAllocAligned(size_t size, size_t alignment) -{ - return _aligned_malloc(size, alignment); -} - - -static void EXRFreeAligned(void* ptr) -{ - _aligned_free(ptr); -} - -#elif defined (__INTEL_COMPILER) || \ - defined(__ICL) || \ - defined(__ICC) || \ - defined(__ECC) - +#if defined(__GNUC__) || defined(__clang__) || defined(_MSC_VER) +// Causes issues on certain gcc versions +//#define EXR_FORCEINLINE inline __attribute__((always_inline)) #define EXR_FORCEINLINE inline -#define EXR_RESTRICT restrict - -static void* EXRAllocAligned(size_t size, size_t alignment) -{ - return _mm_malloc(size, alignment); -} - - -static void EXRFreeAligned(void* ptr) -{ - _mm_free(ptr); -} +#define EXR_RESTRICT __restrict #else @@ -123,39 +93,7 @@ static void EXRFreeAligned(void* ptr) #define EXR_FORCEINLINE inline #define EXR_RESTRICT -static void* EXRAllocAligned(size_t size, size_t alignment) -{ - return malloc(size); -} - - -static void EXRFreeAligned(void* ptr) -{ - free(ptr); -} - -#endif // compiler switch - - -#else // IMF_HAVE_SSE2 - - -#define EXR_FORCEINLINE inline -#define EXR_RESTRICT - -static void* EXRAllocAligned(size_t size, size_t alignment) -{ - return malloc(size); -} - - -static void EXRFreeAligned(void* ptr) -{ - free(ptr); -} - - -#endif // IMF_HAVE_SSE2 +#endif // // Simple CPUID based runtime detection of various capabilities diff --git a/OpenEXR/IlmImfTest/bswap_32.h b/OpenEXR/IlmImfTest/bswap_32.h index 42962629cd..cc7be65c84 100644 --- a/OpenEXR/IlmImfTest/bswap_32.h +++ b/OpenEXR/IlmImfTest/bswap_32.h @@ -3,7 +3,7 @@ // Copyright Contributors to the OpenEXR Project. See LICENSE file for details. // -#ifdef _MSC_VER +#if defined(_WIN32) || defined(_WIN64) #include #define bswap_32(x) _byteswap_ulong(x) #elif defined(__APPLE__)