nixpkgs/pkgs/development/compilers/ios-cross-compile/9.2_builder.sh
2016-02-22 11:16:11 -08:00

153 lines
3.2 KiB
Bash

# -*- 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