From 8cecab561f2899a74d8a403bc63f1fc35c33d333 Mon Sep 17 00:00:00 2001 From: Ivan Nador Date: Thu, 27 Feb 2025 13:08:06 +0100 Subject: [PATCH 1/2] Added watchOS simulator combined build (arm64, i386) --- README.md | 2 ++ ios.toolchain.cmake | 35 ++++++++++++++++++++++++++++++----- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 9c71bf5..7fa2122 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ A CMake toolchain file for iOS (+ Catalyst), watchOS, tvOS and macOS development * _SIMULATOR_ - to build for iOS simulator 32 bit (i386) -- **DEPRECATED** * _SIMULATOR64_ - to build for iOS simulator 64 bit (x86_64) * _SIMULATORARM64_ - to build for iOS simulator 64 bit (arm64) +* _SIMULATOR64COMBINED_ - to build for iOS simulator 64 bit (FAT lib) (arm64, x86_64) * _VISIONOS_ - to build for visionOS (arm64) -- **Apple Silicon Required** * _VISIONOSCOMBINED_ - to build for visionOS & visionOS Simulator (FAT lib) (arm64) -- **Apple Silicon Required** * _SIMULATOR_VISIONOS_ - to build for visionOS Simulator (arm64) -- **Apple Silicon Required** @@ -27,6 +28,7 @@ A CMake toolchain file for iOS (+ Catalyst), watchOS, tvOS and macOS development * _WATCHOSCOMBINED_ - to build for watchOS & Simulator (armv7k, arm64_32, i386) * _SIMULATOR_WATCHOS_ - to build for watchOS Simulator (i386) * _SIMULATORARM64_WATCHOS_ = to build for watchOS Simulator (arm64) +* _SIMULATOR_WATCHOSCOMBINED_ = to build for watchOS Simulator (FAT lib) (arm64, i386) * _MAC_ - to build for macOS (x86_64) * _MAC_ARM64_ - to build for macOS on Apple Silicon (arm64) * _MAC_UNIVERSAL_ - to build for macOS on x86_64 and Apple Silicon (arm64) combined diff --git a/ios.toolchain.cmake b/ios.toolchain.cmake index a235cd0..dd6985b 100644 --- a/ios.toolchain.cmake +++ b/ios.toolchain.cmake @@ -74,6 +74,7 @@ # WATCHOSCOMBINED = Build for armv7k arm64_32 x86_64 watchOS + watchOS Simulator. Combined into FAT STATIC lib (only supported on 3.14+ of CMake with "-G Xcode" argument in combination with the "cmake --install" CMake build step) # SIMULATOR_WATCHOS = Build for x86_64 for watchOS Simulator. # SIMULATORARM64_WATCHOS = Build for arm64 for watchOS Simulator. +# SIMULATOR_WATCHOSCOMBINED = Build for arm64 for watchOS Simulator. # MAC = Build for x86_64 macOS. # MAC_ARM64 = Build for Apple Silicon macOS. # MAC_UNIVERSAL = Combined build for x86_64 and Apple Silicon on macOS. @@ -166,9 +167,9 @@ set(ENV{_IOS_TOOLCHAIN_HAS_RUN} true) list(APPEND _supported_platforms "OS" "OS64" "OS64COMBINED" "SIMULATOR" "SIMULATOR64" "SIMULATORARM64" "SIMULATOR64COMBINED" "TVOS" "TVOSCOMBINED" "SIMULATOR_TVOS" "SIMULATORARM64_TVOS" - "WATCHOS" "WATCHOSCOMBINED" "SIMULATOR_WATCHOS" "SIMULATORARM64_WATCHOS" + "WATCHOS" "WATCHOSCOMBINED" "SIMULATOR_WATCHOS" "SIMULATORARM64_WATCHOS" "SIMULATOR_WATCHOSCOMBINED" "MAC" "MAC_ARM64" "MAC_UNIVERSAL" - "VISIONOS" "SIMULATOR_VISIONOS" "VISIONOSCOMBINED" + "VISIONOS" "SIMULATOR_VISIONOS" "VISIONOSCOMBINED" "MAC_CATALYST" "MAC_CATALYST_ARM64" "MAC_CATALYST_UNIVERSAL") # Cache what generator is used @@ -316,7 +317,7 @@ if(PLATFORM_INT STREQUAL "OS") set(ARCHS armv7 armv7s arm64) set(APPLE_TARGET_TRIPLE_INT arm-apple-ios${DEPLOYMENT_TARGET}) else() - set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}) + set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}) endif() elseif(PLATFORM_INT STREQUAL "OS64") set(SDK_NAME iphoneos) @@ -497,6 +498,30 @@ elseif(PLATFORM_INT STREQUAL "SIMULATORARM64_WATCHOS") else() set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-watchos${DEPLOYMENT_TARGET}-simulator) endif() +elseif(PLATFORM_INT STREQUAL "SIMULATOR_WATCHOSCOMBINED") + set(SDK_NAME watchsimulator) + if(MODERN_CMAKE) + if(NOT ARCHS) + if (XCODE_VERSION_INT VERSION_GREATER 12.0) + set(ARCHS arm64 i386) + set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchos*] "") + set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchsimulator*] "i386 arm64") + set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchos*] "") + set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchsimulator*] "i386 arm64") + else() + set(ARCHS arm64 i386) + set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchos*] "") + set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchsimulator*] "i386") + set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchos*] "") + set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchsimulator*] "i386") + endif() + set(APPLE_TARGET_TRIPLE_INT arm64_i386-apple-watchos${DEPLOYMENT_TARGET}-simulator) + else() + set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-watchos${DEPLOYMENT_TARGET}-simulator) + endif() + else() + message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the SIMULATOR_WATCHOSCOMBINED setting work") + endif() elseif(PLATFORM_INT STREQUAL "SIMULATOR_VISIONOS") set(SDK_NAME xrsimulator) if(NOT ARCHS) @@ -1049,7 +1074,7 @@ set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES ) if(NAMED_LANGUAGE_SUPPORT_INT) - list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES + list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES CMAKE_OBJC_FLAGS CMAKE_OBJC_DEBUG CMAKE_OBJC_MINSIZEREL @@ -1087,7 +1112,7 @@ IF(NOT DEFINED CMAKE_FIND_FRAMEWORK) ENDIF(NOT DEFINED CMAKE_FIND_FRAMEWORK) # Set up the default search directories for frameworks. -if(PLATFORM_INT MATCHES "^MAC_CATALYST") +if(PLATFORM_INT MATCHES "^MAC_CATALYST") set(CMAKE_FRAMEWORK_PATH ${CMAKE_DEVELOPER_ROOT}/Library/PrivateFrameworks ${CMAKE_OSX_SYSROOT_INT}/System/Library/Frameworks From 588f6e349c6148b198897a0f78298a6454860351 Mon Sep 17 00:00:00 2001 From: Ivan Nador Date: Thu, 27 Feb 2025 13:45:58 +0100 Subject: [PATCH 2/2] Architecture fixes, added CI workflows --- .github/workflows/combined.yml | 19 +++++++++++++++++-- .github/workflows/watchos.yml | 19 ++++++++++++++++--- README.md | 6 +++--- ios.toolchain.cmake | 28 +++++++++++++++++----------- 4 files changed, 53 insertions(+), 19 deletions(-) diff --git a/.github/workflows/combined.yml b/.github/workflows/combined.yml index 9e92b85..1fac312 100644 --- a/.github/workflows/combined.yml +++ b/.github/workflows/combined.yml @@ -6,7 +6,7 @@ on: pull_request: types: [ opened, synchronize ] -jobs: +jobs: build_with_latest_OS64COMBINED: name: "Latest Xcode, Target iOS Combined [x86_64, arm64] Target SDK 14.0" runs-on: macos-latest @@ -37,6 +37,21 @@ jobs: xcode-version: '15.0.1' - name: Build run: ./.github/build.sh + build_with_15_0_1_SIMULATOR_WATCHOSCOMBINED: + name: "Xcode version 15.0.1, Target watchOS Simulator Combined [arm64, x86_64] Target SDK 10.0" + runs-on: macos-13 + env: + PLATFORM: SIMULATOR_WATCHOSCOMBINED + USE_NEW_BUILD: 1 + DEPLOYMENT_TARGET: 10.0 + USE_XCODE: 1 + steps: + - uses: actions/checkout@v2 + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '15.0.1' + - name: Build + run: ./.github/build.sh build_with_15_0_1_TVOSCOMBINED: name: "Xcode version 15.0.1, Target tvOS Combined [arm64, x86_64] Target SDK 16.0" runs-on: macos-13 @@ -66,4 +81,4 @@ jobs: with: xcode-version: '15.0.1' - name: Build - run: ./.github/build.sh \ No newline at end of file + run: ./.github/build.sh diff --git a/.github/workflows/watchos.yml b/.github/workflows/watchos.yml index 0476ef9..8692d5b 100644 --- a/.github/workflows/watchos.yml +++ b/.github/workflows/watchos.yml @@ -8,7 +8,7 @@ on: jobs: build_with_15_4_WATCHOS: - name: "Xcode version 15.4, Target tvOS [armv7k, arm64_32] Target SDK 10.5" + name: "Xcode version 15.4, Target watchOS [armv7k, arm64_32] Target SDK 10.5" runs-on: macos-14 env: PLATFORM: WATCHOS @@ -21,7 +21,7 @@ jobs: - name: Build run: ./.github/build.sh build_with_15_0_1_SIMULATOR_WATCHOS: - name: "Xcode version 15.0.1, Target tvOS [x86_64] Target SDK 10.0" + name: "Xcode version 15.0.1, Target watchOS Simulator [x86_64] Target SDK 10.0" runs-on: macos-13 env: PLATFORM: SIMULATOR_WATCHOS @@ -32,4 +32,17 @@ jobs: with: xcode-version: '15.0.1' - name: Build - run: ./.github/build.sh \ No newline at end of file + run: ./.github/build.sh + build_with_15_0_1_SIMULATORARM64_WATCHOS: + name: "Xcode version 15.0.1, Target watchOS Simulator [arm64] Target SDK 10.0" + runs-on: macos-13 + env: + PLATFORM: SIMULATORARM64_WATCHOS + DEPLOYMENT_TARGET: 10.0 + steps: + - uses: actions/checkout@v2 + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '15.0.1' + - name: Build + run: ./.github/build.sh diff --git a/README.md b/README.md index 7fa2122..f3b9850 100644 --- a/README.md +++ b/README.md @@ -25,10 +25,10 @@ A CMake toolchain file for iOS (+ Catalyst), watchOS, tvOS and macOS development * _SIMULATOR_TVOS_ - to build for tvOS Simulator (x86_64) * _SIMULATORARM64_TVOS_ = to build for tvOS Simulator (arm64) * _WATCHOS_ - to build for watchOS (armv7k, arm64_32) -* _WATCHOSCOMBINED_ - to build for watchOS & Simulator (armv7k, arm64_32, i386) -* _SIMULATOR_WATCHOS_ - to build for watchOS Simulator (i386) +* _WATCHOSCOMBINED_ - to build for watchOS & Simulator (armv7k, arm64_32, x86_64) +* _SIMULATOR_WATCHOS_ - to build for watchOS Simulator (x86_64) * _SIMULATORARM64_WATCHOS_ = to build for watchOS Simulator (arm64) -* _SIMULATOR_WATCHOSCOMBINED_ = to build for watchOS Simulator (FAT lib) (arm64, i386) +* _SIMULATOR_WATCHOSCOMBINED_ = to build for watchOS Simulator (FAT lib) (arm64, x86_64) * _MAC_ - to build for macOS (x86_64) * _MAC_ARM64_ - to build for macOS on Apple Silicon (arm64) * _MAC_UNIVERSAL_ - to build for macOS on x86_64 and Apple Silicon (arm64) combined diff --git a/ios.toolchain.cmake b/ios.toolchain.cmake index dd6985b..9046fd7 100644 --- a/ios.toolchain.cmake +++ b/ios.toolchain.cmake @@ -74,7 +74,7 @@ # WATCHOSCOMBINED = Build for armv7k arm64_32 x86_64 watchOS + watchOS Simulator. Combined into FAT STATIC lib (only supported on 3.14+ of CMake with "-G Xcode" argument in combination with the "cmake --install" CMake build step) # SIMULATOR_WATCHOS = Build for x86_64 for watchOS Simulator. # SIMULATORARM64_WATCHOS = Build for arm64 for watchOS Simulator. -# SIMULATOR_WATCHOSCOMBINED = Build for arm64 for watchOS Simulator. +# SIMULATOR_WATCHOSCOMBINED = Build for arm64 x86_64 for watchOS Simulator. Combined into FAT STATIC lib (supported on 3.14+ of CMakewith "-G Xcode" argument ONLY) # MAC = Build for x86_64 macOS. # MAC_ARM64 = Build for Apple Silicon macOS. # MAC_UNIVERSAL = Combined build for x86_64 and Apple Silicon on macOS. @@ -462,12 +462,12 @@ elseif(PLATFORM_INT STREQUAL "WATCHOSCOMBINED") if(MODERN_CMAKE) if(NOT ARCHS) if (XCODE_VERSION_INT VERSION_GREATER 10.0) - set(ARCHS armv7k arm64_32 i386) - set(APPLE_TARGET_TRIPLE_INT arm64_32-i386-apple-watchos${DEPLOYMENT_TARGET}) + set(ARCHS armv7k arm64_32 x86_64) + set(APPLE_TARGET_TRIPLE_INT arm64_32-x86_64-apple-watchos${DEPLOYMENT_TARGET}) set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchos*] "armv7k arm64_32") - set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchsimulator*] "i386") + set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchsimulator*] "x86_64") set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchos*] "armv7k arm64_32") - set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchsimulator*] "i386") + set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchsimulator*] "x86_64") else() set(ARCHS armv7k i386) set(APPLE_TARGET_TRIPLE_INT arm-i386-apple-watchos${DEPLOYMENT_TARGET}) @@ -485,8 +485,13 @@ elseif(PLATFORM_INT STREQUAL "WATCHOSCOMBINED") elseif(PLATFORM_INT STREQUAL "SIMULATOR_WATCHOS") set(SDK_NAME watchsimulator) if(NOT ARCHS) - set(ARCHS i386) - set(APPLE_TARGET_TRIPLE_INT i386-apple-watchos${DEPLOYMENT_TARGET}-simulator) + if (XCODE_VERSION_INT VERSION_GREATER 10.0) + set(ARCHS x86_64) + set(APPLE_TARGET_TRIPLE_INT x86_64-apple-watchos${DEPLOYMENT_TARGET}-simulator) + else() + set(ARCHS i386) + set(APPLE_TARGET_TRIPLE_INT i386-apple-watchos${DEPLOYMENT_TARGET}-simulator) + endif() else() set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-watchos${DEPLOYMENT_TARGET}-simulator) endif() @@ -503,19 +508,20 @@ elseif(PLATFORM_INT STREQUAL "SIMULATOR_WATCHOSCOMBINED") if(MODERN_CMAKE) if(NOT ARCHS) if (XCODE_VERSION_INT VERSION_GREATER 12.0) - set(ARCHS arm64 i386) + set(ARCHS arm64 x86_64) set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchos*] "") - set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchsimulator*] "i386 arm64") + set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchsimulator*] "arm64 x86_64") set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchos*] "") - set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchsimulator*] "i386 arm64") + set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchsimulator*] "arm64 x86_64") + set(APPLE_TARGET_TRIPLE_INT arm64_x86_64-apple-watchos${DEPLOYMENT_TARGET}-simulator) else() set(ARCHS arm64 i386) set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchos*] "") set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchsimulator*] "i386") set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchos*] "") set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchsimulator*] "i386") + set(APPLE_TARGET_TRIPLE_INT arm64_i386-apple-watchos${DEPLOYMENT_TARGET}-simulator) endif() - set(APPLE_TARGET_TRIPLE_INT arm64_i386-apple-watchos${DEPLOYMENT_TARGET}-simulator) else() set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-watchos${DEPLOYMENT_TARGET}-simulator) endif()