about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/compilers/ios-cross-compile/9.2_builder.sh
diff options
context:
space:
mode:
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.sh153
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