]>
Commit | Line | Data |
---|---|---|
2fbbb8fa | 1 | #!/bin/bash -x |
bdffa7b9 A |
2 | |
3 | if [ $# -ne 5 ]; then | |
4 | echo "Usage: $0 <archs> <variants> <outputdir> <sdkroot> <srcroot>" 1>&2 | |
5 | exit 1 | |
6 | fi | |
7 | ||
8 | ARCHS="$1" | |
9 | VARIANTS="$2" | |
10 | OUTPUTDIR="$3" | |
11 | SDKROOT="$4" | |
12 | SRCROOT="$5" | |
13 | ||
14 | LIBSYS="${SDKROOT}/usr/local/lib/system" | |
15 | LSYS="${SDKROOT}/usr/lib/system" | |
16 | ||
17 | mkdir -p "${OUTPUTDIR}" | |
18 | ||
19 | for 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 | |
113 | done | |
114 | ||
115 | MARKERFILE="${OUTPUTDIR}/linker_arguments_changed.c" | |
116 | ||
117 | for arch in ${ARCHS}; do | |
118 | for variant in ${VARIANTS}; do | |
119 | OUTPUTFILE="${OUTPUTDIR}/linker_arguments.${arch}.${variant}.txt" | |
120 | cat "${OUTPUTFILE}" | |
121 | done | |
122 | done | shasum | sed 's,^,// ,' > "${MARKERFILE}" | |
123 | ||
124 | exit 0 |