diff --git a/CMakeLists.txt b/CMakeLists.txt index e2976bbc..440a8bab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -431,9 +431,18 @@ if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang|GNU|Intel") endif() endif() +# Compiler and architecture specific flags if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang|GNU|Intel" AND NOT CMAKE_SYSTEM_NAME MATCHES "Haiku") if(MI_OPT_ARCH) - if(MI_ARCH STREQUAL "x64") + if(APPLE AND CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND CMAKE_OSX_ARCHITECTURES) # to support multi-arch binaries (#999) + set(MI_OPT_ARCH_FLAGS "") + if("arm64" IN_LIST CMAKE_OSX_ARCHITECTURES) + list(APPEND MI_OPT_ARCH_FLAGS "-Xarch_arm64;-march=armv8.1-a;-mtune=native") + endif() + if("x86_64" IN_LIST CMAKE_OSX_ARCHITECTURES) + list(APPEND MI_OPT_ARCH_FLAGS "-Xarch_x86_64;-march=haswell;-Xarch_x86_64;-mavx2") + endif() + elseif(MI_ARCH STREQUAL "x64") set(MI_OPT_ARCH_FLAGS "-march=haswell;-mavx2;-mtune=native") # fast bit scan (since 2013) elseif(MI_ARCH STREQUAL "arm64") set(MI_OPT_ARCH_FLAGS "-march=armv8.1-a;-mtune=native") # fast atomics (since 2016) diff --git a/src/prim/windows/prim.c b/src/prim/windows/prim.c index 0916a7ea..f91925fc 100644 --- a/src/prim/windows/prim.c +++ b/src/prim/windows/prim.c @@ -127,9 +127,11 @@ void _mi_prim_mem_init( mi_os_mem_config_t* config ) config->has_partial_free = false; config->has_virtual_reserve = true; // windows version - const DWORD win_version = GetVersion(); - win_major_version = (DWORD)(LOBYTE(LOWORD(win_version))); - win_minor_version = (DWORD)(HIBYTE(LOWORD(win_version))); + OSVERSIONINFOW version{sizeof(version)}; + if (GetVersionExW(&version)) { + win_major_version = version.dwMajorVersion; + win_minor_version = version.dwMinorVersion; + } // get the page size SYSTEM_INFO si; GetSystemInfo(&si);