Parcourir la source

Build a universal binary for x86/ARM when building with XCode on macOS (#620)

See #619
Jorrit Rouwe il y a 2 ans
Parent
commit
314aab8bb3
3 fichiers modifiés avec 9 ajouts et 6 suppressions
  1. 5 4
      Build/CMakeLists.txt
  2. 1 1
      Build/cmake_xcode_macos.sh
  3. 3 1
      Jolt/Jolt.cmake

+ 5 - 4
Build/CMakeLists.txt

@@ -190,8 +190,8 @@ set(PHYSICS_REPO_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../)
 
 # Make Jolt Library
 include(${PHYSICS_REPO_ROOT}/Jolt/Jolt.cmake)
-if (IOS)
-	# Ensure that we enable SSE4.2 for the x86_64 build, CMAKE_SYSTEM_PROCESSOR is not set for iOS
+if (XCODE)
+	# Ensure that we enable SSE4.2 for the x86_64 build, XCode builds multiple architectures
 	set_property(TARGET Jolt PROPERTY XCODE_ATTRIBUTE_OTHER_CPLUSPLUSFLAGS[arch=x86_64] "$(inherited) -msse4.2 -mpopcnt") 
 endif()
 
@@ -228,8 +228,9 @@ if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
 			# Set the bundle information
 			set_property(TARGET UnitTests PROPERTY MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/iOS/UnitTestsInfo.plist")
 			set_property(TARGET UnitTests PROPERTY XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.joltphysics.unittests")
-
-			# Ensure that we enable SSE4.2 for the x86_64 build, CMAKE_SYSTEM_PROCESSOR is not set for iOS
+		endif()
+		if (XCODE)
+			# Ensure that we enable SSE4.2 for the x86_64 build, XCode builds multiple architectures
 			set_property(TARGET UnitTests PROPERTY XCODE_ATTRIBUTE_OTHER_CPLUSPLUSFLAGS[arch=x86_64] "$(inherited) -msse4.2 -mpopcnt")
 		endif()
 

+ 1 - 1
Build/cmake_xcode_macos.sh

@@ -1,4 +1,4 @@
 #!/bin/sh
 
-cmake -S . -B XCode_MacOS -GXcode
+cmake -S . -B XCode_MacOS -GXcode -D"CMAKE_OSX_ARCHITECTURES=x86_64;arm64"
 open XCode_MacOS/JoltPhysics.xcodeproj

+ 3 - 1
Jolt/Jolt.cmake

@@ -537,7 +537,9 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
 		EMIT_X86_INSTRUCTION_SET_DEFINITIONS()
 	endif()
 else()
-	if (CROSS_COMPILE_ARM OR CMAKE_OSX_ARCHITECTURES MATCHES "arm64" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
+	if (XCODE)
+		# XCode builds for multiple architectures, we can't set global flags
+	elseif (CROSS_COMPILE_ARM OR CMAKE_OSX_ARCHITECTURES MATCHES "arm64" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
 		# ARM64 uses no special commandline flags
 	elseif ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64")
 		# x64