mirror of
https://github.com/godotengine/godot.git
synced 2024-11-21 19:42:43 +00:00
[Windows/ARM64] Fix raycast/embree ARM64 build with LLVM/MinGW.
This commit is contained in:
parent
b75f0485ba
commit
04d70c11fc
@ -1,6 +1,6 @@
|
|||||||
def can_build(env, platform):
|
def can_build(env, platform):
|
||||||
# Supported architectures and platforms depend on the Embree library.
|
# Supported architectures and platforms depend on the Embree library.
|
||||||
if env["arch"] == "arm64" and platform == "windows":
|
if env["arch"] == "arm64" and platform == "windows" and env.msvc:
|
||||||
return False
|
return False
|
||||||
if env["arch"] in ["x86_64", "arm64", "wasm32"]:
|
if env["arch"] in ["x86_64", "arm64", "wasm32"]:
|
||||||
return True
|
return True
|
||||||
|
@ -678,6 +678,7 @@ def configure_mingw(env: "SConsEnvironment"):
|
|||||||
env["CXX"] = mingw_bin_prefix + "clang++"
|
env["CXX"] = mingw_bin_prefix + "clang++"
|
||||||
if try_cmd("as --version", env["mingw_prefix"], env["arch"]):
|
if try_cmd("as --version", env["mingw_prefix"], env["arch"]):
|
||||||
env["AS"] = mingw_bin_prefix + "as"
|
env["AS"] = mingw_bin_prefix + "as"
|
||||||
|
env.Append(ASFLAGS=["-c"])
|
||||||
if try_cmd("ar --version", env["mingw_prefix"], env["arch"]):
|
if try_cmd("ar --version", env["mingw_prefix"], env["arch"]):
|
||||||
env["AR"] = mingw_bin_prefix + "ar"
|
env["AR"] = mingw_bin_prefix + "ar"
|
||||||
if try_cmd("ranlib --version", env["mingw_prefix"], env["arch"]):
|
if try_cmd("ranlib --version", env["mingw_prefix"], env["arch"]):
|
||||||
|
18
thirdparty/embree/common/simd/arm/sse2neon.h
vendored
18
thirdparty/embree/common/simd/arm/sse2neon.h
vendored
@ -102,7 +102,9 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#if defined(_WIN32)
|
// -- GODOT start --
|
||||||
|
#if defined(_WIN32) && !defined(__MINGW32__)
|
||||||
|
// -- GODOT end --
|
||||||
/* Definitions for _mm_{malloc,free} are provided by <malloc.h>
|
/* Definitions for _mm_{malloc,free} are provided by <malloc.h>
|
||||||
* from both MinGW-w64 and MSVC.
|
* from both MinGW-w64 and MSVC.
|
||||||
*/
|
*/
|
||||||
@ -1888,7 +1890,13 @@ FORCE_INLINE __m128 _mm_div_ss(__m128 a, __m128 b)
|
|||||||
#if !defined(SSE2NEON_ALLOC_DEFINED)
|
#if !defined(SSE2NEON_ALLOC_DEFINED)
|
||||||
FORCE_INLINE void _mm_free(void *addr)
|
FORCE_INLINE void _mm_free(void *addr)
|
||||||
{
|
{
|
||||||
|
// -- GODOT start --
|
||||||
|
#if defined(_WIN32)
|
||||||
|
_aligned_free(addr);
|
||||||
|
#else
|
||||||
free(addr);
|
free(addr);
|
||||||
|
#endif
|
||||||
|
// -- GODOT end --
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -2080,8 +2088,16 @@ FORCE_INLINE void *_mm_malloc(size_t size, size_t align)
|
|||||||
return malloc(size);
|
return malloc(size);
|
||||||
if (align == 2 || (sizeof(void *) == 8 && align == 4))
|
if (align == 2 || (sizeof(void *) == 8 && align == 4))
|
||||||
align = sizeof(void *);
|
align = sizeof(void *);
|
||||||
|
// -- GODOT start --
|
||||||
|
#if defined(_WIN32)
|
||||||
|
ptr = _aligned_malloc(size, align);
|
||||||
|
if (ptr)
|
||||||
|
return ptr;
|
||||||
|
#else
|
||||||
if (!posix_memalign(&ptr, align, size))
|
if (!posix_memalign(&ptr, align, size))
|
||||||
return ptr;
|
return ptr;
|
||||||
|
#endif
|
||||||
|
// -- GODOT end --
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
46
thirdparty/embree/patches/mingw-llvm-arm64.diff
vendored
Normal file
46
thirdparty/embree/patches/mingw-llvm-arm64.diff
vendored
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
diff --git a/thirdparty/embree/common/simd/arm/sse2neon.h b/thirdparty/embree/common/simd/arm/sse2neon.h
|
||||||
|
index b18d41e783..c54d0b7951 100644
|
||||||
|
--- a/thirdparty/embree/common/simd/arm/sse2neon.h
|
||||||
|
+++ b/thirdparty/embree/common/simd/arm/sse2neon.h
|
||||||
|
@@ -102,7 +102,9 @@
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
-#if defined(_WIN32)
|
||||||
|
+// -- GODOT start --
|
||||||
|
+#if defined(_WIN32) && !defined(__MINGW32__)
|
||||||
|
+// -- GODOT end --
|
||||||
|
/* Definitions for _mm_{malloc,free} are provided by <malloc.h>
|
||||||
|
* from both MinGW-w64 and MSVC.
|
||||||
|
*/
|
||||||
|
@@ -2080,8 +2082,16 @@ FORCE_INLINE void *_mm_malloc(size_t size, size_t align)
|
||||||
|
return malloc(size);
|
||||||
|
if (align == 2 || (sizeof(void *) == 8 && align == 4))
|
||||||
|
align = sizeof(void *);
|
||||||
|
- if (!posix_memalign(&ptr, align, size))
|
||||||
|
+// -- GODOT start --
|
||||||
|
+#if defined(_WIN32)
|
||||||
|
+ ptr = _aligned_malloc(size, align);
|
||||||
|
+ if (ptr)
|
||||||
|
return ptr;
|
||||||
|
+#else
|
||||||
|
+ if (!posix_memalign(&ptr, align, size))
|
||||||
|
+ return ptr;
|
||||||
|
+#endif
|
||||||
|
+// -- GODOT end --
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@@ -1890,7 +1890,13 @@ FORCE_INLINE __m128 _mm_div_ss(__m128 a, __m128 b)
|
||||||
|
#if !defined(SSE2NEON_ALLOC_DEFINED)
|
||||||
|
FORCE_INLINE void _mm_free(void *addr)
|
||||||
|
{
|
||||||
|
+// -- GODOT start --
|
||||||
|
+#if defined(_WIN32)
|
||||||
|
+ _aligned_free(addr);
|
||||||
|
+#else
|
||||||
|
free(addr);
|
||||||
|
+#endif
|
||||||
|
+// -- GODOT end --
|
||||||
|
}
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user