diff options
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/ios-cross-compile/9.2_builder.sh')
-rw-r--r-- | nixpkgs/pkgs/development/compilers/ios-cross-compile/9.2_builder.sh | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/compilers/ios-cross-compile/9.2_builder.sh b/nixpkgs/pkgs/development/compilers/ios-cross-compile/9.2_builder.sh new file mode 100644 index 000000000000..4604b1fdea72 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/ios-cross-compile/9.2_builder.sh @@ -0,0 +1,153 @@ +# -*- shell-script -*- +source $stdenv/setup + +function extract +{ + printf "extracting $(basename $1) ...\n" + local tarflags="xf" + + case "$1" in + *.tar.xz) + xz -dc $1 | tar "$tarflags" - ;; + *) + printf "Make sure you give a iPhoneOS9.2.sdk.tar.xz file \n" ;; + esac +} + +function verify_arch { + case "$1" in + # Our good arches. + armv7|arm64) ;; + *) + local + acc="armv7 | arm64" + error_message=$( + printf '%s is not an acceptable arch. Try one of %s' "$1" "$acc" + ) + printf "$error_message\n" + exit + esac +} + +function verify_sdk_version { + sdk_version=$(basename "$1" | grep -P -o "[0-9].[0-9]+") + case "$sdk_version" in + # Make sure the SDK is correct. + [5-9].[0-9]) ;; + *) + printf 'No iPhone SDK version in file name\n' + esac +} + +function do_build { + + if [ $# -lt 2 ]; then + printf "usage: $0 iPhoneOS.sdk.tar* <target cpu>\n" 1>&2 + printf "i.e. $0 /path/to/iPhoneOS.sdk.tar.xz armv7\n" 1>&2 + exit 1 + fi + + mkdir -p $out + + chmod -R 755 "$cctools_port" + + pushd "$cctools_port"/usage_examples/ios_toolchain &> /dev/null + + export LC_ALL=C + + local + triple='%s-apple-darwin11' + target_dir="$PWD/target" + sdk_dir="$target_dir/SDK" + platform="$(uname -s)" + # Will be mutated by verify_sdk_version + sdk_version= + + mkdir -p "$target_dir" + mkdir -p "$target_dir/bin" + mkdir -p "$sdk_dir" + + verify_arch "$2" + verify_sdk_version "$1" + + triple="$(printf "$triple" "$2")" + pushd "$sdk_dir" &>/dev/null + extract "$1" + + local sys_lib=$( + find $sdk_dir -name libSystem.dylib -o -name libSystem.tbd | head -n1 + ) + + if [ -z "$sys_lib" ]; then + printf "SDK should contain libSystem{.dylib,.tbd}\n" 1>&2 + exit 1 + fi + + local sys_root=$(readlink -f "$(dirname $sys_lib)/../..") + + local sdk_unboxed=$(basename $sys_root) + + mv -f "$sys_root"/* "$sdk_dir" || true + + popd &>/dev/null + + printf "\nbuilding wrapper\n" + + printf "int main(){return 0;}" | clang -xc -O2 -o "$target_dir"/bin/dsymutil - + + clang -O2 -std=c99 $alt_wrapper \ + -DTARGET_CPU=$(printf '"%s"' "$2") \ + -DNIX_APPLE_HDRS=$( + printf '"%s"' "-I$out/$sdk/usr/include" + ) \ + -DNIX_APPLE_FRAMEWORKS=$( + printf '"%s"' "$out/$sdk/System/Library/Frameworks" + ) \ + -DNIX_APPLE_PRIV_FRAMEWORKS=$( + printf '"%s"' "$out/$sdk/System/Library/PrivateFrameworks" + ) \ + -DOS_VER_MIN=$(printf '"%s"' "7.1") \ + -o "$target_dir/bin/$triple-clang" + + pushd "$target_dir"/bin &>/dev/null + + cp "$triple"-clang "$triple"-clang++ + + popd &>/dev/null + + printf "\nbuilding ldid\n" + + mkdir -p tmp + pushd tmp &>/dev/null + pushd "$ldid" &>/dev/null + + chmod -R 755 "$ldid" + + make INSTALLPREFIX="$target_dir" -j4 install + popd &>/dev/null + popd &>/dev/null + + printf "\nbuilding cctools / ld64\n" + + pushd ../../cctools &>/dev/null + git clean -fdx . &>/dev/null || true + ./autogen.sh + ./configure --target="$triple" --prefix="$target_dir" + make -j4 + make install &>/dev/null + + popd &>/dev/null + + local me=`whoami` + + for d in bin libexec SDK; do + chown -R $me:$me target/$d + cp -R target/$d $out + done + + # Crucial piece + rm -rf $out/$sdk + mv $out/SDK $out/$sdk +} + +do_build $src armv7 |