home-assistant: 2025.2.0 -> 2025.2.1 (#380183)
[NixPkgs.git] / pkgs / development / compilers / ios-cross-compile / 9.2_builder.sh
blob551db285a98f7681bcaecb4f11de82405f6a8354
1 # -*- shell-script -*-
3 function extract
5 printf "extracting $(basename $1) ...\n"
6 local tarflags="xf"
8 case "$1" in
9 *.tar.xz)
10 xz -dc $1 | tar "$tarflags" - ;;
12 printf "Make sure you give a iPhoneOS9.2.sdk.tar.xz file \n" ;;
13 esac
16 function verify_arch {
17 case "$1" in
18 # Our good arches.
19 armv7|arm64) ;;
21 local
22 acc="armv7 | arm64"
23 error_message=$(
24 printf '%s is not an acceptable arch. Try one of %s' "$1" "$acc"
26 printf "$error_message\n"
27 exit
28 esac
31 function 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]) ;;
37 printf 'No iPhone SDK version in file name\n'
38 esac
41 function do_build {
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
49 mkdir -p $out
51 chmod -R 755 "$cctools_port"
53 pushd "$cctools_port"/usage_examples/ios_toolchain &> /dev/null
55 export LC_ALL=C
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=
65 mkdir -p "$target_dir"
66 mkdir -p "$target_dir/bin"
67 mkdir -p "$sdk_dir"
69 verify_arch "$2"
70 verify_sdk_version "$1"
72 triple="$(printf "$triple" "$2")"
73 pushd "$sdk_dir" &>/dev/null
74 extract "$1"
76 local sys_lib=$(
77 find $sdk_dir -name libSystem.dylib -o -name libSystem.tbd | head -n1
80 if [ -z "$sys_lib" ]; then
81 printf "SDK should contain libSystem{.dylib,.tbd}\n" 1>&2
82 exit 1
85 local sys_root=$(readlink -f "$(dirname $sys_lib)/../..")
87 local sdk_unboxed=$(basename $sys_root)
89 mv -f "$sys_root"/* "$sdk_dir" || true
91 popd &>/dev/null
93 printf "\nbuilding wrapper\n"
95 printf "int main(){return 0;}" | clang -xc -O2 -o "$target_dir"/bin/dsymutil -
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"
102 -DNIX_APPLE_FRAMEWORKS=$(
103 printf '"%s"' "$out/$sdk/System/Library/Frameworks"
105 -DNIX_APPLE_PRIV_FRAMEWORKS=$(
106 printf '"%s"' "$out/$sdk/System/Library/PrivateFrameworks"
108 -DOS_VER_MIN=$(printf '"%s"' "7.1") \
109 -o "$target_dir/bin/$triple-clang"
111 pushd "$target_dir"/bin &>/dev/null
113 cp "$triple"-clang "$triple"-clang++
115 popd &>/dev/null
117 printf "\nbuilding ldid\n"
119 mkdir -p tmp
120 pushd tmp &>/dev/null
121 pushd "$ldid" &>/dev/null
123 chmod -R 755 "$ldid"
125 make INSTALLPREFIX="$target_dir" -j4 install
126 popd &>/dev/null
127 popd &>/dev/null
129 printf "\nbuilding cctools / ld64\n"
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
138 popd &>/dev/null
140 local me=`whoami`
142 for d in bin libexec SDK; do
143 chown -R $me:$me target/$d
144 cp -R target/$d $out
145 done
147 # Crucial piece
148 rm -rf $out/$sdk
149 mv $out/SDK $out/$sdk
152 do_build $src armv7