diff --git a/Engine/source/CMakeLists.txt b/Engine/source/CMakeLists.txt index d439a06e2..2ca86a2f7 100644 --- a/Engine/source/CMakeLists.txt +++ b/Engine/source/CMakeLists.txt @@ -501,12 +501,23 @@ string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" ARCH) set(IS_X86 FALSE) set(IS_ARM FALSE) -if(ARCH MATCHES "x86_64|amd64|i[3-6]86") - set(IS_X86 TRUE) -endif() - -if(ARCH MATCHES "arm64|aarch64") - set(IS_ARM TRUE) +if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + # Use the CMAKE_OSX_ARCHITECTURES list for universal builds + foreach(arch IN LISTS CMAKE_OSX_ARCHITECTURES) + if(arch STREQUAL "x86_64") + set(IS_X86 TRUE) + elseif(arch STREQUAL "arm64") + set(IS_ARM TRUE) + endif() + endforeach() +else() + # Non-macOS detection + if(ARCH MATCHES "arm64|aarch64") + set(IS_ARM TRUE) + endif() + if(ARCH MATCHES "x86_64|amd64|i[3-6]86") + set(IS_X86 TRUE) + endif() endif() # always available diff --git a/Tools/CMake/torqueMacOSconfigs.cmake b/Tools/CMake/torqueMacOSconfigs.cmake index 793771c13..1d3ba7fbc 100644 --- a/Tools/CMake/torqueMacOSconfigs.cmake +++ b/Tools/CMake/torqueMacOSconfigs.cmake @@ -9,22 +9,22 @@ set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,") # minimum for multi arch build is 11. set(CMAKE_OSX_DEPLOYMENT_TARGET "11" CACHE STRING "" FORCE) -set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "" FORCE) +set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "Architectures to build" FORCE) set(CMAKE_XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET[arch=arm64] "11.0" CACHE STRING "arm 64 minimum deployment target" FORCE) -if(CMAKE_OSX_ARCHITECTURES MATCHES "((^|;|, )(arm64|arm64e|x86_64))+") - set(CMAKE_C_SIZEOF_DATA_PTR 8) - set(CMAKE_CXX_SIZEOF_DATA_PTR 8) - if(CMAKE_OSX_ARCHITECTURES MATCHES "((^|;|, )(arm64|arm64e))+") - set(CMAKE_SYSTEM_PROCESSOR "aarch64") - else() - set(CMAKE_SYSTEM_PROCESSOR "x86_64") - endif() -else() - set(CMAKE_C_SIZEOF_DATA_PTR 4) - set(CMAKE_CXX_SIZEOF_DATA_PTR 4) - set(CMAKE_SYSTEM_PROCESSOR "arm") -endif() +# if(CMAKE_OSX_ARCHITECTURES MATCHES "((^|;|, )(arm64|arm64e|x86_64))+") +# set(CMAKE_C_SIZEOF_DATA_PTR 8) +# set(CMAKE_CXX_SIZEOF_DATA_PTR 8) +# if(CMAKE_OSX_ARCHITECTURES MATCHES "((^|;|, )(arm64|arm64e))+") +# set(CMAKE_SYSTEM_PROCESSOR "aarch64") +# else() +# set(CMAKE_SYSTEM_PROCESSOR "x86_64") +# endif() +# else() +# set(CMAKE_C_SIZEOF_DATA_PTR 4) +# set(CMAKE_CXX_SIZEOF_DATA_PTR 4) +# set(CMAKE_SYSTEM_PROCESSOR "arm") +# endif() # Enable codesigning with secure timestamp when not in Debug configuration (required for Notarization) set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS[variant=Release] "--timestamp") diff --git a/Tools/CMake/torque_macros.cmake b/Tools/CMake/torque_macros.cmake index fe0cec4c6..ca1a65325 100644 --- a/Tools/CMake/torque_macros.cmake +++ b/Tools/CMake/torque_macros.cmake @@ -176,7 +176,27 @@ function(add_math_backend name compile_defs) elseif(name STREQUAL "avx2") target_compile_options(math_${name} PRIVATE -mavx2 -mfma) elseif(name STREQUAL "neon") - target_compile_options(math_${name} PRIVATE -march=armv8-a) + if(APPLE) + set_target_properties(math_${name} PROPERTIES OSX_ARCHITECTURES "arm64") + else() + target_compile_options(math_${name} PRIVATE -march=armv8-a) + endif() + endif() + endif() + + if(APPLE) + # ARM-only backend + if(name STREQUAL "neon") + set_target_properties(math_${name} PROPERTIES + OSX_ARCHITECTURES "arm64" + ) + endif() + + # x86-only backends + if(name MATCHES "sse2|sse41|avx|avx2") + set_target_properties(math_${name} PROPERTIES + OSX_ARCHITECTURES "x86_64" + ) endif() endif()