]> git.saurik.com Git - apple/libsystem.git/blame - xcodescripts/linker_arguments.sh
Libsystem-1238.60.2.tar.gz
[apple/libsystem.git] / xcodescripts / linker_arguments.sh
CommitLineData
2fbbb8fa 1#!/bin/bash -x
bdffa7b9
A
2
3if [ $# -ne 5 ]; then
4 echo "Usage: $0 <archs> <variants> <outputdir> <sdkroot> <srcroot>" 1>&2
5 exit 1
6fi
7
8ARCHS="$1"
9VARIANTS="$2"
10OUTPUTDIR="$3"
11SDKROOT="$4"
12SRCROOT="$5"
13
14LIBSYS="${SDKROOT}/usr/local/lib/system"
15LSYS="${SDKROOT}/usr/lib/system"
16
17mkdir -p "${OUTPUTDIR}"
18
19for arch in ${ARCHS}; do
20 for variant in ${VARIANTS}; do
21 OUTPUTFILE="${OUTPUTDIR}/linker_arguments.${arch}.${variant}.txt"
2fbbb8fa 22 OUTPUTCONFIG="${OUTPUTDIR}/config.${arch}.${variant}.h"
bdffa7b9
A
23 TEMPDIR="${OUTPUTDIR}/linker_arguments_tmp"
24
25 mkdir -p "${TEMPDIR}"
26
27 ACTUALLIBS="${TEMPDIR}/${arch}.${variant}.actuallibs"
28 ALLLIBS="${TEMPDIR}/${arch}.${variant}.alllibs"
29 FROMUSRLIBSYSTEM="${TEMPDIR}/${arch}.${variant}.fromusrlibsystem"
30 FROMUSRLOCALLIBSYSTEM="${TEMPDIR}/${arch}.${variant}.fromusrlocallibsystem"
31 INUSRLIBSYSTEM="${TEMPDIR}/${arch}.${variant}.inusrlibsystem"
32 INUSRLOCALLIBSYSTEM="${TEMPDIR}/${arch}.${variant}.inusrlocallibsystem"
33 MISSINGLIBS="${TEMPDIR}/${arch}.${variant}.missinglibs"
34 POSSIBLEUSRLOCALLIBSYSTEM="${TEMPDIR}/${arch}.${variant}.possibleusrlocallibsystem"
35 OPTIONALLIBS="${SRCROOT}/optionallibs"
36 REQUIREDLIBS="${SRCROOT}/requiredlibs"
37
38 if [ ${variant} = "normal" ]; then
39 SUFFIX=""
40 else
41 SUFFIX="_${variant}"
42 fi
43
44 rm -f "${OUTPUTFILE}"
45
46 cat ${REQUIREDLIBS} ${OPTIONALLIBS} | sort > ${ALLLIBS}
47
48 # Strip away variant information to do presence checks
49 # non-normal variants can always link against normal clients
50 cd ${LSYS} && ls lib*.dylib | sed -E -e 's/_(debug|profile|static)\././' | while read l; do
51 xcrun -sdk "${SDKROOT}" lipo "${LSYS}/${l}" -verify_arch "${arch}" 2>/dev/null
52 if [ $? -eq 0 ]; then
53 echo "${l}"
54 fi
55 done | sed -E -e 's/^lib//' -e 's/\..*$$//' | sort -u > ${INUSRLIBSYSTEM}
56 cd ${LIBSYS} && ls lib*.a | sed -E -e 's/_(debug|profile|static)\././' | while read l; do
57 xcrun -sdk "${SDKROOT}" lipo "${LIBSYS}/${l}" -verify_arch "${arch}" 2>/dev/null
58 if [ $? -eq 0 ]; then
59 echo "${l}"
60 fi
61 done | sed -E -e 's/^lib//' -e 's/\..*$$//' | sort -u > ${INUSRLOCALLIBSYSTEM}
2fbbb8fa
A
62
63 while read line ; do
64 for lib in ${line} ; do
65 egrep "^${lib}$" ${INUSRLIBSYSTEM} && break
66 done
67 done < ${ALLLIBS} > ${FROMUSRLIBSYSTEM}
68
69 while read line ; do
70 for lib in ${line} ; do
71 egrep "^${lib}$" ${INUSRLOCALLIBSYSTEM} && break
72 done
73 done < ${ALLLIBS} > ${POSSIBLEUSRLOCALLIBSYSTEM}
74
bdffa7b9
A
75 comm -13 ${FROMUSRLIBSYSTEM} ${POSSIBLEUSRLOCALLIBSYSTEM} > ${FROMUSRLOCALLIBSYSTEM}
76 cat ${FROMUSRLIBSYSTEM} ${FROMUSRLOCALLIBSYSTEM} | sort > ${ACTUALLIBS}
2fbbb8fa
A
77
78 while read line ; do
79 found=0
80 for lib in ${line} ; do
81 egrep -q "^${lib}$" ${ACTUALLIBS} && found=1
82 done
83 [[ $found == 0 ]] && echo ${line}
84 done < ${REQUIREDLIBS} > ${MISSINGLIBS}
bdffa7b9
A
85
86 if [ -s ${MISSINGLIBS} ]; then
87 echo '*** missing required libs ***'
88 cat ${MISSINGLIBS}
89 exit 1
90 fi
91
2fbbb8fa
A
92 cat ${FROMUSRLIBSYSTEM} | while read lib; do
93 echo "#define HAVE_"$(echo "${lib/_sim/}" | tr 'a-z' 'A-Z')" 1"
94 done >> "${OUTPUTCONFIG}"
95
bdffa7b9
A
96 cat ${FROMUSRLIBSYSTEM} | while read lib; do
97 echo "-Wl,-reexport-l${lib}"
98 done >> "${OUTPUTFILE}"
99
100 # Allow static archives to degrade to their non-variant versions
101 cat ${FROMUSRLOCALLIBSYSTEM} | while read lib; do
102 LPATH="${LIBSYS}/lib${lib}${SUFFIX}.a"
103 xcrun -sdk "${SDKROOT}" lipo "${LPATH}" -verify_arch "${arch}" 2>/dev/null
104 if [ $? -ne 0 ]; then
105 LPATH="${LIBSYS}/lib${lib}.a"
106 fi
107 echo "-Wl,-force_load,${LPATH}"
108 done >> "${OUTPUTFILE}"
109
110 echo "Final contents of ${OUTPUTFILE}:"
111 cat "${OUTPUTFILE}"
112 done
113done
114
115MARKERFILE="${OUTPUTDIR}/linker_arguments_changed.c"
116
117for arch in ${ARCHS}; do
118 for variant in ${VARIANTS}; do
119 OUTPUTFILE="${OUTPUTDIR}/linker_arguments.${arch}.${variant}.txt"
120 cat "${OUTPUTFILE}"
121 done
122done | shasum | sed 's,^,// ,' > "${MARKERFILE}"
123
124exit 0