16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-17 22:39:17 +02:00

Add macOS ARM64 build support

Three small source tweaks that let the OpenGL renderer build and run
on Apple Silicon without affecting the Windows/Linux paths:

- stdafx.h: use GLM_FORCE_NEON on ARM64 instead of GLM_FORCE_AVX2.
  AVX2 pulls <immintrin.h>, which clang on ARM64 rejects because
  the x86 intrinsics are unimplemented.
- utilities/utilities.cpp: provide an Apple libc++ fallback for
  Now() using localtime_r + strftime, since
  std::chrono::current_zone() is not yet implemented there.
- audio/audio.h: prefer Khronos-style <AL/al.h> headers when they
  are on the include path (brew openal-soft) and fall back to the
  deprecated Apple OpenAL.framework's <OpenAL/al.h> only otherwise.
This commit is contained in:
Mateusz Włodarczyk
2026-05-19 10:45:18 +02:00
parent df5a8a897f
commit dd412894bb
3 changed files with 14 additions and 1 deletions

View File

@@ -9,7 +9,7 @@ http://mozilla.org/MPL/2.0/.
#pragma once #pragma once
#ifdef __APPLE__ #if defined(__APPLE__) && !__has_include(<AL/al.h>)
#include <OpenAL/al.h> #include <OpenAL/al.h>
#include <OpenAL/alc.h> #include <OpenAL/alc.h>
#else #else

View File

@@ -89,7 +89,11 @@
#define glfwFocusWindow(w) #define glfwFocusWindow(w)
#endif #endif
#if defined(__aarch64__) || defined(__arm64__)
#define GLM_FORCE_NEON
#else
#define GLM_FORCE_AVX2 #define GLM_FORCE_AVX2
#endif
#define GLM_FORCE_SWIZZLE #define GLM_FORCE_SWIZZLE
#define GLM_ENABLE_EXPERIMENTAL #define GLM_ENABLE_EXPERIMENTAL
#define GLM_FORCE_CTOR_INIT #define GLM_FORCE_CTOR_INIT

View File

@@ -39,9 +39,18 @@ bool DebugTractionFlag = false;
std::string Now() std::string Now()
{ {
#if defined(__APPLE__)
auto t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
std::tm tm{};
localtime_r(&t, &tm);
char buf[64];
std::strftime(buf, sizeof(buf), "%c", &tm);
return std::string(buf);
#else
auto now = std::chrono::system_clock::now(); auto now = std::chrono::system_clock::now();
auto local = std::chrono::current_zone()->to_local(now); auto local = std::chrono::current_zone()->to_local(now);
return std::format("{:%c}", local); return std::format("{:%c}", local);
#endif
} }
// zwraca różnicę czasu // zwraca różnicę czasu