build-ios.sh (2709B)
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 79 [built-in options] 80 c_args = ['$MIN_OS_FLAG', '-target', '$TARGET_TRIPLE', '-arch', '$ARCH', '-isysroot', '$SYS_ROOT'] 81 cpp_args = ['$MIN_OS_FLAG', '-target', '$TARGET_TRIPLE', '-arch', '$ARCH', '-isysroot', '$SYS_ROOT'] 82 c_link_args = ['$MIN_OS_FLAG', '-target', '$TARGET_TRIPLE', '-arch', '$ARCH', '-isysroot', '$SYS_ROOT'] 83 cpp_link_args = ['$MIN_OS_FLAG', '-target', '$TARGET_TRIPLE', '-arch', '$ARCH', '-isysroot', '$SYS_ROOT'] 84 objc_args = ['$MIN_OS_FLAG', '-target', '$TARGET_TRIPLE', '-arch', '$ARCH', '-isysroot', '$SYS_ROOT'] 85 objcpp_args = ['$MIN_OS_FLAG', '-target', '$TARGET_TRIPLE', '-arch', '$ARCH', '-isysroot', '$SYS_ROOT'] 86 87 [properties] 88 root = '$SDK_ROOT' 89 has_function_printf = true 90 has_function_hfkerhisadf = false 91 92 [host_machine] 93 cpu_family = '$CPU_FAMILY' 94 cpu = '$CPU' 95 endian = '$ENDIAN' 96 system = '$SYSTEM' 97 98 [cmake] 99 CMAKE_OSX_SYSROOT='${SDK}' 100 EOF 101 102 BUILD_DIR=build-ios/${SDK}-${ARCH} 103 mkdir -p "${BUILD_DIR}" 104 105 meson setup --errorlogs \ 106 -Doptimization=3 \ 107 --includedir=${INC_PATH} \ 108 --libdir=${LIB_PATH} \ 109 --cross-file $CROSSFILE \ 110 --build.cmake-prefix-path=${SYS_ROOT} \ 111 ${BUILD_DIR} . 112 113 ninja -v -C ${BUILD_DIR}