UltrafastSecp256k1/cmake/ios.toolchain.cmake
vano 7cd209e5dc feat: iOS support — SPM, CocoaPods, XCFramework, CI
iOS infrastructure:
- cmake/ios.toolchain.cmake: Cross-compilation for iOS 17+ ARM64
- scripts/build_xcframework.sh: Builds device + simulator .xcframework
- Package.swift: Swift Package Manager (C++20 target, ARM64 asm enabled)
- UltrafastSecp256k1.podspec: CocoaPods with C++20 and optimizations

Headers & module:
- cpu/include/module.modulemap: Clang module for SPM/Xcode integration
- cpu/include/UltrafastSecp256k1.hpp: Umbrella header (all public APIs)
- cpu/include/secp256k1/types.hpp: Forwarding header for SPM compat

CI/CD:
- iOS device + simulator build jobs (macos-14 runner)
- XCFramework artifact upload (30-day retention)

Build:
- .gitignore: !cmake/*.cmake exception for toolchain files

Existing 5/5 tests still pass (no behavior changes).
2026-02-15 05:11:53 +04:00

56 lines
2.0 KiB
CMake

# ============================================================================
# iOS Cross-Compilation Toolchain for UltrafastSecp256k1
# ============================================================================
#
# Usage (device):
# cmake -S . -B build-ios \
# -G Xcode \
# -DCMAKE_TOOLCHAIN_FILE=cmake/ios.toolchain.cmake
#
# Usage (simulator):
# cmake -S . -B build-ios-sim \
# -G Xcode \
# -DCMAKE_TOOLCHAIN_FILE=cmake/ios.toolchain.cmake \
# -DIOS_PLATFORM=SIMULATOR
#
# ============================================================================
set(CMAKE_SYSTEM_NAME iOS)
set(CMAKE_OSX_DEPLOYMENT_TARGET "17.0" CACHE STRING "Minimum iOS deployment target")
# Platform selection: OS (device arm64) or SIMULATOR (sim arm64)
if(NOT DEFINED IOS_PLATFORM)
set(IOS_PLATFORM "OS" CACHE STRING "iOS platform: OS (device) or SIMULATOR")
endif()
if(IOS_PLATFORM STREQUAL "SIMULATOR")
set(CMAKE_OSX_SYSROOT iphonesimulator CACHE STRING "iOS Simulator SDK")
else()
set(CMAKE_OSX_SYSROOT iphoneos CACHE STRING "iOS Device SDK")
endif()
# ARM64 only (iOS 17+ dropped 32-bit and x86_64 simulator)
set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "Target architecture")
# Disable code signing for library builds
set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO")
set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "")
# Build static library only
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
# C++20
set(CMAKE_CXX_STANDARD 20 CACHE STRING "C++ standard")
set(CMAKE_CXX_STANDARD_REQUIRED ON CACHE BOOL "Require C++ standard")
# Disable components not needed for iOS library
set(SECP256K1_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(SECP256K1_BUILD_BENCH OFF CACHE BOOL "" FORCE)
set(SECP256K1_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(SECP256K1_BUILD_CUDA OFF CACHE BOOL "" FORCE)
set(SECP256K1_BUILD_OPENCL OFF CACHE BOOL "" FORCE)
set(SECP256K1_INSTALL OFF CACHE BOOL "" FORCE)
# Enable ARM64 assembly (MUL/UMULH inline asm)
set(SECP256K1_USE_ASM ON CACHE BOOL "" FORCE)