at master 3.4 kB view raw
1# -*- shell-script -*- 2 3function extract 4{ 5 printf "extracting $(basename $1) ...\n" 6 local tarflags="xf" 7 8 case "$1" in 9 *.tar.xz) 10 xz -dc $1 | tar "$tarflags" - ;; 11 *) 12 printf "Make sure you give a iPhoneOS9.2.sdk.tar.xz file \n" ;; 13 esac 14} 15 16function verify_arch { 17 case "$1" in 18 # Our good arches. 19 armv7|arm64) ;; 20 *) 21 local 22 acc="armv7 | arm64" 23 error_message=$( 24 printf '%s is not an acceptable arch. Try one of %s' "$1" "$acc" 25 ) 26 printf "$error_message\n" 27 exit 28 esac 29} 30 31function verify_sdk_version { 32 sdk_version=$(basename "$1" | grep -P -o "[0-9].[0-9]+") 33 case "$sdk_version" in 34 # Make sure the SDK is correct. 35 [5-9].[0-9]) ;; 36 *) 37 printf 'No iPhone SDK version in file name\n' 38 esac 39} 40 41function do_build { 42 43 if [ $# -lt 2 ]; then 44 printf "usage: $0 iPhoneOS.sdk.tar* <target cpu>\n" 1>&2 45 printf "i.e. $0 /path/to/iPhoneOS.sdk.tar.xz armv7\n" 1>&2 46 exit 1 47 fi 48 49 mkdir -p $out 50 51 chmod -R 755 "$cctools_port" 52 53 pushd "$cctools_port"/usage_examples/ios_toolchain &> /dev/null 54 55 export LC_ALL=C 56 57 local 58 triple='%s-apple-darwin11' 59 target_dir="$PWD/target" 60 sdk_dir="$target_dir/SDK" 61 platform="$(uname -s)" 62 # Will be mutated by verify_sdk_version 63 sdk_version= 64 65 mkdir -p "$target_dir" 66 mkdir -p "$target_dir/bin" 67 mkdir -p "$sdk_dir" 68 69 verify_arch "$2" 70 verify_sdk_version "$1" 71 72 triple="$(printf "$triple" "$2")" 73 pushd "$sdk_dir" &>/dev/null 74 extract "$1" 75 76 local sys_lib=$( 77 find $sdk_dir -name libSystem.dylib -o -name libSystem.tbd | head -n1 78 ) 79 80 if [ -z "$sys_lib" ]; then 81 printf "SDK should contain libSystem{.dylib,.tbd}\n" 1>&2 82 exit 1 83 fi 84 85 local sys_root=$(readlink -f "$(dirname $sys_lib)/../..") 86 87 local sdk_unboxed=$(basename $sys_root) 88 89 mv -f "$sys_root"/* "$sdk_dir" || true 90 91 popd &>/dev/null 92 93 printf "\nbuilding wrapper\n" 94 95 printf "int main(){return 0;}" | clang -xc -O2 -o "$target_dir"/bin/dsymutil - 96 97 clang -O2 -std=c99 $alt_wrapper \ 98 -DTARGET_CPU=$(printf '"%s"' "$2") \ 99 -DNIX_APPLE_HDRS=$( 100 printf '"%s"' "-I$out/$sdk/usr/include" 101 ) \ 102 -DNIX_APPLE_FRAMEWORKS=$( 103 printf '"%s"' "$out/$sdk/System/Library/Frameworks" 104 ) \ 105 -DNIX_APPLE_PRIV_FRAMEWORKS=$( 106 printf '"%s"' "$out/$sdk/System/Library/PrivateFrameworks" 107 ) \ 108 -DOS_VER_MIN=$(printf '"%s"' "7.1") \ 109 -o "$target_dir/bin/$triple-clang" 110 111 pushd "$target_dir"/bin &>/dev/null 112 113 cp "$triple"-clang "$triple"-clang++ 114 115 popd &>/dev/null 116 117 printf "\nbuilding ldid\n" 118 119 mkdir -p tmp 120 pushd tmp &>/dev/null 121 pushd "$ldid" &>/dev/null 122 123 chmod -R 755 "$ldid" 124 125 make INSTALLPREFIX="$target_dir" -j4 install 126 popd &>/dev/null 127 popd &>/dev/null 128 129 printf "\nbuilding cctools / ld64\n" 130 131 pushd ../../cctools &>/dev/null 132 git clean -fdx . &>/dev/null || true 133 ./autogen.sh 134 ./configure --target="$triple" --prefix="$target_dir" 135 make -j4 136 make install &>/dev/null 137 138 popd &>/dev/null 139 140 local me=`whoami` 141 142 for d in bin libexec SDK; do 143 chown -R $me:$me target/$d 144 cp -R target/$d $out 145 done 146 147 # Crucial piece 148 rm -rf $out/$sdk 149 mv $out/SDK $out/$sdk 150} 151 152do_build $src armv7