Skip to content

Commit 2c0e750

Browse files
authored
xcode > 14.3 apple silicon use arm64 arch for ios simulation。 (#214)
1 parent 19f4bd5 commit 2c0e750

7 files changed

Lines changed: 39 additions & 19 deletions

File tree

.github/workflows/native-compile-platforms.yml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -483,8 +483,8 @@ jobs:
483483
echo "set(CC_USE_GLES3 OFF)" >> build-mac/proj/cfg.cmake
484484
echo "set(CC_USE_METAL ON)" >> build-mac/proj/cfg.cmake
485485
# Test JSVM v8 backend on macOS.
486-
echo "set(USE_SE_V8 OFF)" >> build-mac/proj/cfg.cmake
487-
echo "set(USE_SE_JSVM ON)" >> build-mac/proj/cfg.cmake
486+
echo "set(USE_SE_V8 ON)" >> build-mac/proj/cfg.cmake
487+
echo "set(USE_SE_JSVM OFF)" >> build-mac/proj/cfg.cmake
488488
echo "set(USE_WEBSOCKET_SERVER OFF)" >> build-mac/proj/cfg.cmake
489489
echo "set(CMAKE_CXX_STANDARD_REQUIRED ON)" >> build-mac/proj/cfg.cmake
490490
echo "set(CC_EXECUTABLE_NAME \"\")" >> build-mac/proj/cfg.cmake
@@ -493,7 +493,6 @@ jobs:
493493
RES_DIR=$GITHUB_WORKSPACE/templates/mac/build-mac
494494
cd build-mac
495495
cmake ../ -GXcode -DCMAKE_OSX_ARCHITECTURES=${{ matrix.config.arch }} -DRES_DIR=$RES_DIR -DCOCOS_X_PATH=$NATIVE_ROOT
496-
set +e
497496
cmake --build . --config Release -- -jobs $NUM_OF_CORES -arch ${{ matrix.config.arch }}
498497
echo "Compile MacOSX Release Done!"
499498
@@ -534,7 +533,7 @@ jobs:
534533
echo "set(CC_USE_VULKAN OFF)" >> build-ios/proj/cfg.cmake
535534
echo "set(CC_USE_GLES2 OFF)" >> build-ios/proj/cfg.cmake
536535
echo "set(CC_USE_METAL ON)" >> build-ios/proj/cfg.cmake
537-
echo "set(TARGET_IOS_VERSION 12.0)" >> build-ios/proj/cfg.cmake
536+
echo "set(TARGET_IOS_VERSION 13.0)" >> build-ios/proj/cfg.cmake
538537
echo "set(USE_WEBSOCKET_SERVER OFF)" >> build-ios/proj/cfg.cmake
539538
echo "set(USE_DRAGONBONES OFF)" >> build-ios/proj/cfg.cmake
540539
echo "set(CMAKE_CXX_STANDARD_REQUIRED OFF)" >> build-ios/proj/cfg.cmake
@@ -548,7 +547,6 @@ jobs:
548547
-DCMAKE_OSX_ARCHITECTURES=${{ matrix.config.arch }} \
549548
-DRES_DIR=$RES_DIR \
550549
-DCOCOS_X_PATH=$NATIVE_ROOT
551-
set +e
552550
#cmake --build . --config Debug -- -quiet -jobs $NUM_OF_CORES -allowProvisioningUpdates CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO
553551
cmake --build . --config Debug -- -jobs $NUM_OF_CORES CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO
554552
echo "Compile iOS Done!"

native/CMakeLists.txt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3725,9 +3725,14 @@ if(APPLE)
37253725
"$(inherited)"
37263726
${CC_EXTERNAL_LIBS}
37273727
)
3728+
if(CMAKE_OSX_ARCHITECTURES)
3729+
set(_CC_ENGINE_ARCHS "${CMAKE_OSX_ARCHITECTURES}")
3730+
else()
3731+
set(_CC_ENGINE_ARCHS "arm64;x86_64")
3732+
endif()
37283733
set_target_properties(${ENGINE_NAME} PROPERTIES
37293734
XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "YES"
3730-
OSX_ARCHITECTURES "arm64;x86_64"
3735+
OSX_ARCHITECTURES "${_CC_ENGINE_ARCHS}"
37313736
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/archives
37323737
)
37333738
if(MACOSX)
@@ -3739,9 +3744,9 @@ if(APPLE)
37393744
)
37403745
elseif(IOS)
37413746

3742-
if("${XCODE_VERSION}" VERSION_GREATER_EQUAL "15.0")
3743-
# For Xcode 15 and newer, add extra link flags to fix crash in __cxx_global_var_init.
3744-
message(STATUS "Using Xcode 15 or newer, adding extra link flags: -Wl,-ld_classic.")
3747+
if("${XCODE_VERSION}" VERSION_GREATER_EQUAL "15.0" AND "${XCODE_VERSION}" VERSION_LESS "15.1")
3748+
# Xcode 15.0 new linker crashes on weak symbols (114813650), fixed in 15.1.
3749+
message(STATUS "Xcode ${XCODE_VERSION}: adding -Wl,-ld_classic to work around weak symbol crash.")
37453750
target_link_options(${ENGINE_NAME} PUBLIC -Wl,-ld_classic)
37463751
endif()
37473752

native/cmake/predefine.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ if("$ENV{COCOS_ENGINE_DEV}" EQUAL "1")
126126
set(WERROR_FLAGS "-Werror -Werror=return-type") # -Wshorten-64-to-32 -Werror=return-type
127127

128128
if(APPLE)
129-
set(WERROR_FLAGS " ${WERROR_FLAGS} -Wno-deprecated-declarations -Wno-deprecated-builtins -Wno-unqualified-std-cast-call")
129+
set(WERROR_FLAGS " ${WERROR_FLAGS} -Wno-deprecated-declarations -Wno-deprecated-builtins -Wno-unqualified-std-cast-call -Wno-nontrivial-memcall")
130130
elseif(LINUX)
131131
set(WERROR_FLAGS " ${WERROR_FLAGS} -Wno-nullability-completeness -Wno-deprecated-declarations")
132132
elseif(ANDROID)

native/external-config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
"type": "github",
44
"owner": "cocos",
55
"name": "cocos-engine-external",
6-
"checkout": "v4.0.0-4"
6+
"checkout": "v4.0.0-6"
77
}
88
}

templates/cmake/apple.cmake

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ macro(cc_ios_after_target _target_name)
8181
MACOSX_DEPLOYMENT_TARGET "${TARGET_IOS_VERSION}"
8282
XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "${TARGET_IOS_VERSION}"
8383
XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "${DEVELOPMENT_TEAM}"
84-
OSX_ARCHITECTURES "arm64;x86_64"
84+
OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}"
8585
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
8686
XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon"
8787
XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_LAUNCHSTORYBOARD_NAME "LaunchScreen"
@@ -95,12 +95,20 @@ macro(cc_ios_after_target _target_name)
9595

9696
cc_apple_set_launch_type(${CC_EXECUTABLE_NAME})
9797

98-
# # exclude arm64 arch and specify x86_64 for iphonesimulator by default, this will apply to both target.
99-
set(CMAKE_XCODE_ATTRIBUTE_EXCLUDED_ARCHS[sdk=iphonesimulator*] "arm64")
100-
set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "arm64")
101-
set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "x86_64")
102-
set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "arm64")
103-
set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "x86_64")
98+
# exclude arm64 arch and specify x86_64 for iphonesimulator by default, this will apply to both target.
99+
if(CMAKE_OSX_ARCHITECTURES STREQUAL "arm64")
100+
set(CMAKE_XCODE_ATTRIBUTE_EXCLUDED_ARCHS[sdk=iphonesimulator*] "")
101+
set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "arm64")
102+
set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "arm64")
103+
set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "arm64")
104+
set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "arm64")
105+
else()
106+
set(CMAKE_XCODE_ATTRIBUTE_EXCLUDED_ARCHS[sdk=iphonesimulator*] "arm64")
107+
set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "arm64")
108+
set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "x86_64")
109+
set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "arm64")
110+
set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "x86_64")
111+
endif()
104112

105113
set(CMAKE_XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2")
106114

templates/common/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ set(RES_DIR "" CACHE STRING "Resource path")
44
set(COCOS_X_PATH "" CACHE STRING "Path to engine/native/")
55

66
set(TARGET_OSX_VERSION "10.14" CACHE STRING "Target MacOSX version" FORCE)
7-
set(TARGET_IOS_VERSION "11.0" CACHE STRING "Target iOS version" FORCE)
7+
set(TARGET_IOS_VERSION "13.0" CACHE STRING "Target iOS version" FORCE)
88

99
set(CMAKE_CXX_STANDARD 17)
1010
option(CC_DEBUG_FORCE "Force enable CC_DEBUG in release mode" OFF)

templates/ios/CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,15 @@ set(APP_NAME "CocosGame" CACHE STRING "Project Name")
55

66
project(${APP_NAME} CXX)
77

8+
# Xcode 14.3+ no longer supports running under Rosetta on Apple Silicon,
9+
# so iOS Simulator must use arm64 instead of x86_64.
10+
# See: https://developer.apple.com/documentation/xcode-release-notes/xcode-14_3-release-notes
11+
if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64" AND "${XCODE_VERSION}" VERSION_GREATER_EQUAL "14.3")
12+
set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "" FORCE)
13+
else()
14+
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE)
15+
endif()
16+
817
set(CC_PROJECT_DIR ${CMAKE_CURRENT_LIST_DIR})
918
set(CC_UI_RESOURCES)
1019
set(CC_PROJ_SOURCES)

0 commit comments

Comments
 (0)