build-ios.sh (2725B)
1 #!/bin/bash 2 set -eu 3 4 if [ -z ${2+x} ]; then 5 echo "usage: $0 <SDK> <ABI>" 6 echo "example: $0 iphoneos arm64" 7 echo "example: $0 iphonesimulator arm64" 8 echo "example: $0 m arm64" 9 exit 1 10 fi 11 12 SDK=$1 13 ABI=$2 14 15 case $ABI in 16 arm64) 17 ARCH="arm64" 18 CPU_FAMILY=aarch64 19 CPU=armv8 20 ENDIAN=little 21 ;; 22 x86_64) 23 ARCH="x86_64" 24 CPU_FAMILY=x86_64 25 CPU=x86_64 26 ENDIAN=little 27 ;; 28 *) 29 echo unknown ABI 30 exit 1 31 ;; 32 esac 33 34 case $SDK in 35 iphoneos) 36 MIN_OS_VERSION=${MIN_SDK_VERSION:-15.0} 37 TARGET_TRIPLE=$ARCH-apple-ios${MIN_OS_VERSION} 38 SDK_NAME="iPhoneOS" 39 SYSTEM='ios' 40 ;; 41 iphonesimulator) 42 MIN_OS_VERSION=${MIN_SDK_VERSION:-15.0} 43 TARGET_TRIPLE=$ARCH-apple-ios${MIN_OS_VERSION}-simulator 44 SDK_NAME="iPhoneSimulator" 45 SYSTEM='ios' 46 ;; 47 macosx) 48 MIN_OS_VERSION=${MIN_SDK_VERSION:-11.0} 49 TARGET_TRIPLE=$ARCH-macosx${MIN_OS_VERSION} 50 SDK_NAME="MacOSX" 51 SYSTEM='darwin' 52 ;; 53 *) 54 echo unknown SDK 55 exit 1 56 ;; 57 esac 58 59 PLATFORM_PATH="$(xcrun --sdk ${SDK} --show-sdk-platform-path)" 60 SDK_VERSION="$(xcrun --sdk ${SDK} --show-sdk-version)" 61 SDK_ROOT="${PLATFORM_PATH}/Developer/SDKs/${SDK_NAME}${SDK_VERSION}.sdk" 62 SYS_ROOT="${SDK_ROOT}" 63 LIB_PATH="${SYS_ROOT}/usr/lib" 64 INC_PATH="${SYS_ROOT}/usr/include" 65 66 CROSSFILE=cross/ios-$SDK-$ABI.cross.txt 67 MIN_OS_FLAG=-m${SDK}-version-min=$MIN_OS_VERSION 68 69 cat > $CROSSFILE <<EOF 70 [binaries] 71 c = ['xcrun', '--sdk', '$SYS_ROOT', 'clang'] 72 cpp = ['xcrun', '--sdk', '$SYS_ROOT', 'clang++'] 73 objc = ['xcrun', '--sdk', '$SYS_ROOT', 'clang'] 74 objcpp = ['xcrun', '--sdk', '$SYS_ROOT', 'clang++'] 75 ld = ['clang'] 76 ar = 'ar' 77 strip = 'strip' 78 cmake = 'cmake' 79 80 [built-in options] 81 c_args = ['$MIN_OS_FLAG', '-target', '$TARGET_TRIPLE', '-arch', '$ARCH', '-isysroot', '$SYS_ROOT'] 82 cpp_args = ['$MIN_OS_FLAG', '-target', '$TARGET_TRIPLE', '-arch', '$ARCH', '-isysroot', '$SYS_ROOT'] 83 c_link_args = ['$MIN_OS_FLAG', '-target', '$TARGET_TRIPLE', '-arch', '$ARCH', '-isysroot', '$SYS_ROOT'] 84 cpp_link_args = ['$MIN_OS_FLAG', '-target', '$TARGET_TRIPLE', '-arch', '$ARCH', '-isysroot', '$SYS_ROOT'] 85 objc_args = ['$MIN_OS_FLAG', '-target', '$TARGET_TRIPLE', '-arch', '$ARCH', '-isysroot', '$SYS_ROOT'] 86 objcpp_args = ['$MIN_OS_FLAG', '-target', '$TARGET_TRIPLE', '-arch', '$ARCH', '-isysroot', '$SYS_ROOT'] 87 88 [properties] 89 root = '$SDK_ROOT' 90 has_function_printf = true 91 has_function_hfkerhisadf = false 92 93 [host_machine] 94 cpu_family = '$CPU_FAMILY' 95 cpu = '$CPU' 96 endian = '$ENDIAN' 97 system = '$SYSTEM' 98 99 [cmake] 100 CMAKE_OSX_SYSROOT='${SDK}' 101 EOF 102 103 BUILD_DIR=build-ios/${SDK}-${ARCH} 104 mkdir -p "${BUILD_DIR}" 105 106 meson setup --errorlogs \ 107 -Doptimization=3 \ 108 --includedir=${INC_PATH} \ 109 --libdir=${LIB_PATH} \ 110 --cross-file $CROSSFILE \ 111 --build.cmake-prefix-path=${SYS_ROOT} \ 112 ${BUILD_DIR} . 113 114 ninja -v -C ${BUILD_DIR}