From db9923749fb6d24d84a0e6fc7ee875db8fa361af Mon Sep 17 00:00:00 2001 From: Luke Street Date: Sat, 23 May 2026 16:54:15 -0600 Subject: [PATCH] Adjust provider arch detection for CMAKE_OSX_ARCHITECTURES --- cmake/AuroraDawnProvider.cmake | 34 ++++++++++++++++---------------- cmake/AuroraNodProvider.cmake | 19 +++++++++++------- cmake/AuroraSDL3Provider.cmake | 9 +++++++-- cmake/AuroraTargetPlatform.cmake | 19 ++++++++++++++++++ 4 files changed, 55 insertions(+), 26 deletions(-) create mode 100644 cmake/AuroraTargetPlatform.cmake diff --git a/cmake/AuroraDawnProvider.cmake b/cmake/AuroraDawnProvider.cmake index eb9bbe5..2b42832 100644 --- a/cmake/AuroraDawnProvider.cmake +++ b/cmake/AuroraDawnProvider.cmake @@ -1,4 +1,5 @@ include_guard(GLOBAL) +include("${CMAKE_CURRENT_LIST_DIR}/AuroraTargetPlatform.cmake") # Resolve Dawn/WebGPU dependency based on AURORA_DAWN_PROVIDER and AURORA_DAWN_LINKAGE. # @@ -46,24 +47,19 @@ function(_aurora_dawn_set_platform_backends) endif () endfunction() +aurora_get_target_arch(_dawn_target_arch) +string(TOLOWER "${CMAKE_SYSTEM_NAME}" _dawn_system) +string(TOLOWER "${_dawn_target_arch}" _dawn_arch) +set(_has_dawn_package FALSE) +if ("${_dawn_system}-${_dawn_arch}" MATCHES "^(windows-(amd64|arm64)|linux-(x86_64|aarch64)|darwin-(arm64|x86_64)|ios-arm64|android-aarch64)$") + set(_has_dawn_package TRUE) +endif () + # ── Auto: resolve provider based on platform availability ── set(_aurora_dawn_provider "${AURORA_DAWN_PROVIDER}") if (_aurora_dawn_provider STREQUAL "auto") - # Prebuilt Dawn packages available for: windows-{amd64,arm64}, linux-{x86_64,aarch64}, darwin-{arm64,x86_64}, ios-arm64, android-arm64 - set(_has_package FALSE) - if (CMAKE_SYSTEM_NAME STREQUAL "Windows" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(AMD64|ARM64)$") - set(_has_package TRUE) - elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|aarch64)$") - set(_has_package TRUE) - elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|x86_64)$") - set(_has_package TRUE) - elseif (CMAKE_SYSTEM_NAME STREQUAL "iOS" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") - set(_has_package TRUE) - elseif (CMAKE_SYSTEM_NAME STREQUAL "Android" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64") - set(_has_package TRUE) - endif () - - if (_has_package) + # Prebuilt Dawn packages available for: windows-{amd64,arm64}, linux-{x86_64,aarch64}, darwin-{arm64,x86_64}, ios-arm64, android-aarch64 + if (_has_dawn_package) set(_aurora_dawn_provider "package") else () set(CMAKE_FIND_PACKAGE_TARGETS_GLOBAL ON) @@ -150,8 +146,12 @@ elseif (_aurora_dawn_provider STREQUAL "system") elseif (_aurora_dawn_provider STREQUAL "package") # ── Package: download prebuilt Dawn install tree ── if (NOT AURORA_DAWN_PACKAGE_URL) - string(TOLOWER "${CMAKE_SYSTEM_NAME}" _dawn_system) - string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" _dawn_arch) + if (NOT _has_dawn_package) + message(FATAL_ERROR + "AURORA_DAWN_PROVIDER=package requires AURORA_DAWN_PACKAGE_URL on this platform.\n" + "No prebuilt Dawn package is available for ${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR}" + " with CMAKE_OSX_ARCHITECTURES='${CMAKE_OSX_ARCHITECTURES}'.") + endif () set(AURORA_DAWN_PACKAGE_URL "https://github.com/encounter/dawn-build/releases/download/${AURORA_DAWN_VERSION}/dawn-${_dawn_system}-${_dawn_arch}.tar.gz") endif () diff --git a/cmake/AuroraNodProvider.cmake b/cmake/AuroraNodProvider.cmake index 2870b30..4f474f5 100644 --- a/cmake/AuroraNodProvider.cmake +++ b/cmake/AuroraNodProvider.cmake @@ -1,4 +1,5 @@ include_guard(GLOBAL) +include("${CMAKE_CURRENT_LIST_DIR}/AuroraTargetPlatform.cmake") # Resolve nod dependency based on AURORA_NOD_PROVIDER. # @@ -13,12 +14,13 @@ include_guard(GLOBAL) set(_aurora_nod_provider "${AURORA_NOD_PROVIDER}") if (_aurora_nod_provider STREQUAL "auto") # Prebuilt nod packages available for: windows-x86_64, linux-x86_64, macos-arm64 + aurora_get_target_arch(_target_arch) set(_has_package FALSE) - if (WIN32 AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(AMD64)$") + if (WIN32 AND _target_arch STREQUAL "AMD64") set(_has_package TRUE) - elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64)$") + elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND _target_arch STREQUAL "x86_64") set(_has_package TRUE) - elseif (APPLE AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64)$") + elseif (APPLE AND _target_arch STREQUAL "arm64") set(_has_package TRUE) endif () @@ -101,13 +103,16 @@ elseif (_aurora_nod_provider STREQUAL "system") elseif (_aurora_nod_provider STREQUAL "package") # ── Package: download prebuilt nod library ── if (NOT AURORA_NOD_PACKAGE_URL) - if (WIN32 AND CMAKE_SIZEOF_VOID_P EQUAL 8) + aurora_get_target_arch(_target_arch) + set(_nod_platform "") + if (WIN32 AND _target_arch STREQUAL "AMD64") set(_nod_platform "windows-x86_64") - elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64|amd64)$") + elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND _target_arch STREQUAL "x86_64") set(_nod_platform "linux-x86_64") - elseif (APPLE AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64|ARM64)$") + elseif (APPLE AND _target_arch STREQUAL "arm64") set(_nod_platform "macos-arm64") - else () + endif () + if (NOT _nod_platform) message(FATAL_ERROR "AURORA_NOD_PROVIDER=package requires AURORA_NOD_PACKAGE_URL on this platform.\n" "Prebuilt packages: https://github.com/encounter/nod/releases") diff --git a/cmake/AuroraSDL3Provider.cmake b/cmake/AuroraSDL3Provider.cmake index c040432..4a474bf 100644 --- a/cmake/AuroraSDL3Provider.cmake +++ b/cmake/AuroraSDL3Provider.cmake @@ -1,4 +1,5 @@ include_guard(GLOBAL) +include("${CMAKE_CURRENT_LIST_DIR}/AuroraTargetPlatform.cmake") # Resolve SDL3 dependency based on AURORA_SDL3_PROVIDER and AURORA_SDL3_LINKAGE. # @@ -68,8 +69,12 @@ elseif (_aurora_sdl3_provider STREQUAL "package") if (NOT AURORA_SDL3_PACKAGE_URL) if (WIN32) # We have custom builds of SDL3 for Win32 x86/AMD64 with libusb support included - if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(AMD64|x86)$") - string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" _sdl3_arch) + aurora_get_target_arch(_target_arch) + set(_sdl3_arch "") + if (_target_arch MATCHES "^(AMD64|x86)$") + string(TOLOWER "${_target_arch}" _sdl3_arch) + endif () + if (_sdl3_arch) set(AURORA_SDL3_PACKAGE_URL "https://github.com/encounter/sdl3-build/releases/download/v${AURORA_SDL3_VERSION}/SDL3-windows-${_sdl3_arch}.tar.gz") else () diff --git a/cmake/AuroraTargetPlatform.cmake b/cmake/AuroraTargetPlatform.cmake new file mode 100644 index 0000000..7a3158a --- /dev/null +++ b/cmake/AuroraTargetPlatform.cmake @@ -0,0 +1,19 @@ +include_guard(GLOBAL) + +function(aurora_get_target_arch out_var) + set(_arch "${CMAKE_SYSTEM_PROCESSOR}") + + if (APPLE AND DEFINED CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_OSX_ARCHITECTURES STREQUAL "") + set(_osx_archs ${CMAKE_OSX_ARCHITECTURES}) + list(REMOVE_DUPLICATES _osx_archs) + list(LENGTH _osx_archs _osx_arch_count) + if (_osx_arch_count EQUAL 1) + list(GET _osx_archs 0 _arch) + else () + set(_arch "") + endif () + endif () + + set(${out_var} "${_arch}" PARENT_SCOPE) +endfunction() +