]> git.wh0rd.org Git - patches.git/blob - blackfin-simpler-gcc-lib-install.patch
initial import
[patches.git] / blackfin-simpler-gcc-lib-install.patch
1 Index: BuildToolChain
2 ===================================================================
3 --- BuildToolChain      (revision 1707)
4 +++ BuildToolChain      (working copy)
5 @@ -792,205 +792,41 @@
6      rm -f $3/bin/tclsh* $3/bin/wish*
7  }
8  
9 -# If $1 is newer than $2, return 1. Otherwise, return 0.
10 -
11 -is_newer ()
12 -{
13 -    MAJOR1=`echo $1 | sed 's/\([0-9]*\).*/\1/'`
14 -    MINOR1=`echo $1 | sed 's/[0-9]*.\([0-9]*\).*/\1/'`
15 -    PATCH1=`echo $1 | sed 's/[0-9]*.[0-9]*.\([0-9]*\).*/\1/'`
16 -    MAJOR2=`echo $2 | sed 's/\([0-9]*\).*/\1/'`
17 -    MINOR2=`echo $2 | sed 's/[0-9]*.\([0-9]*\).*/\1/'`
18 -    PATCH2=`echo $2 | sed 's/[0-9]*.[0-9]*.\([0-9]*\).*/\1/'`
19 -
20 -    if [ -z "$MAJOR1" -o -z "$MINOR1" -o -z "$PATCH1" -o -z "$MAJOR2" -o -z "$MINOR2" -o -z "$PATCH2" ]; then
21 -       return 0;
22 -    fi
23 -
24 -    if [ "$MAJOR1" -lt "$MAJOR2" ]; then
25 -       return 0;
26 -    elif [ "$MAJOR1" -gt "$MAJOR2" ]; then
27 -       return 1;
28 -    elif [ "$MINOR1" -lt "$MINOR2" ]; then
29 -       return 0;
30 -    elif [ "$MINOR1" -gt "$MINOR2" ]; then
31 -       return 1;
32 -    elif [ "$PATCH1" -lt "$PATCH2" ]; then
33 -       return 0;
34 -    elif [ "$PATCH1" -gt "$PATCH2" ]; then
35 -       return 1;
36 -    else
37 -       return 0;
38 -    fi
39 -}
40 -
41 -# If $1 is compatible with $2, return 1. Otherwise, return 0.
42 -
43 -is_compat ()
44 -{
45 -    MAJOR1=`echo $1 | sed 's/\([0-9]*\).*/\1/'`
46 -    MINOR1=`echo $1 | sed 's/[0-9]*.\([0-9]*\).*/\1/'`
47 -    PATCH1=`echo $1 | sed 's/[0-9]*.[0-9]*.\([0-9]*\).*/\1/'`
48 -    MAJOR2=`echo $2 | sed 's/\([0-9]*\).*/\1/'`
49 -    MINOR2=`echo $2 | sed 's/[0-9]*.\([0-9]*\).*/\1/'`
50 -    PATCH2=`echo $2 | sed 's/[0-9]*.[0-9]*.\([0-9]*\).*/\1/'`
51 -
52 -    if [ -z "$MAJOR1" -o -z "$MINOR1" -o -z "$PATCH1" -o -z "$MAJOR2" -o -z "$MINOR2" -o -z "$PATCH2" ]; then
53 -       return 0;
54 -    fi
55 -
56 -    if [ "$MAJOR1" -eq "$MAJOR2" -a "$MINOR1" -eq "$MINOR2" ]; then
57 -       return 1;
58 -    else
59 -       return 0;
60 -    fi
61 -}
62 -
63 -# Install shared libstdc++ libraries into sysroot direcotory
64 +# Install shared libraries into sysroot direcotory
65  # 1st argument is the toolchain install directory
66  # 2nd argument is the toolchain name
67  
68 -install_libstdcpps ()
69 +install_gcc_libs ()
70  {
71 -    GCCS=`find $1 -name bfin-linux-uclibc-gcc-* | tr '\n' ' '`
72 +    pushd $1/lib/gcc/$2 > /dev/null
73  
74 -    while [ -n "$GCCS" ]; do
75 -       GCCS2=""
76 -       COMPAT_GCCS=""
77 -       NEWEST_VERSION=""
78 -       NEWEST_GCC=""
79 +    # install the libraries from the latest version of the toolchain
80 +    GCC_VER=$(echo * | tr ' ' '\n' | LC_ALL=C sort | tail -n 1)
81 +    cd "${GCC_VER}"
82  
83 -       for GCC in $GCCS; do
84 -           LIBSTDCPP=`$GCC --print-file-name=libstdc++.so`
85 -           LIBSTDCPP=`readlink -f $LIBSTDCPP`
86 -           LIBSTDCPP_DIR=`dirname $LIBSTDCPP`
87 -           LIBSTDCPP_NAME=`basename $LIBSTDCPP`
88 -           LIBSTDCPP_VERSION=`echo $LIBSTDCPP_NAME | sed 's/libstdc++.so.\([0-9]*.[0-9]*.[0-9]*\).*/\1/'`
89 -       
90 -           if [ -z "$NEWEST_VERSION" ]; then
91 -               NEWEST_VERSION=$LIBSTDCPP_VERSION
92 -               NEWEST_GCC=$GCC
93 -               COMPAT_GCCS=$GCC
94 -               continue
95 -           fi
96 +    # walk each multilib version
97 +    for l in $(find -name 'lib*.so') ; do
98 +        echo "Installing shared ${l} from gcc dir into runtime sysroot"
99  
100 -           is_compat $LIBSTDCPP_VERSION $NEWEST_VERSION
101 -           if [ $? -eq 1 ]; then
102 -               COMPAT_GCCS="$COMPAT_GCCS $GCC"
103 +        DIRNAME=$(dirname ${l})
104 +        SONAME=$(readelf -d ${l} | sed -n '/SONAME/s:.*\[\(.*\)\]:\1:p')
105 +        FULLNAME=$(basename $(readlink ${l}))
106 +        DESTDIR="../../../../$2/runtime/${DIRNAME}/lib"
107  
108 -               is_newer $LIBSTDCPP_VERSION $NEWEST_VERSION
109 -               if [ $? -eq 1 ]; then
110 -                   NEWEST_VERSION=$LIBSTDCPP_VERSION
111 -                   NEWEST_GCC=$GCC
112 -               fi
113 -           else
114 -               GCCS2="$GCCS2 $GCC"
115 -           fi
116 -       done
117 +        # move the soname and the full versioned one (if it exists)
118 +        # aka libstdc.so.x and libstdc.so.x.y.z
119 +        mv ${DIRNAME}/${FULLNAME} ${DESTDIR}/${FULLNAME}
120 +        if [ "${FULLNAME}" != "${SONAME}" ] ; then
121 +            ln -s ${FULLNAME} ${DESTDIR}/${SONAME}
122 +        fi
123  
124 -       echo "Installing shared libstdc++ from $NEWEST_GCC"
125 -
126 -       MULTILIBS=`$NEWEST_GCC --print-multi-lib`
127 -
128 -       for ml in $MULTILIBS; do
129 -
130 -           dir=`echo ${ml} | sed -e 's/;.*$//'`
131 -           flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`
132 -           if [ "$dir" = "." ]; then
133 -               dir2=
134 -           else
135 -               dir2=`echo ${dir} | sed -e 's|[^/]*|..|g'`/
136 -           fi
137 -
138 -           LIBSTDCPP=`$NEWEST_GCC $flags --print-file-name=libstdc++.so`
139 -           LIBSTDCPP=`readlink -f $LIBSTDCPP`
140 -           LIBSTDCPP_DIR=`dirname $LIBSTDCPP`
141 -           LIBSTDCPP_NAME=`basename $LIBSTDCPP`
142 -           LIBSTDCPP_VERSION=`echo $LIBSTDCPP_NAME | sed 's/libstdc++.so.\([0-9]*.[0-9]*.[0-9]*\).*/\1/'`
143 -           MAJOR_NUM=`echo $LIBSTDCPP_VERSION | sed 's/\([0-9]*\).*/\1/'`
144 -
145 -           cp $LIBSTDCPP $1/$2/runtime/$dir/lib
146 -           ln -s $LIBSTDCPP_NAME $1/$2/runtime/$dir/lib/libstdc++.so.$MAJOR_NUM 
147 -
148 -           for G in $COMPAT_GCCS; do
149 -               L=`$G $flags --print-file-name=libstdc++.so`
150 -               rm -f `dirname $L`/libstdc++.so*
151 -               ln -s ../../../../$dir2$2/runtime/$dir/lib/$LIBSTDCPP_NAME `dirname $L`/libstdc++.so
152 -           done
153 -
154 -       done
155 -
156 -       GCCS=$GCCS2
157 +        # create a symlink here from the linkable lib to
158 +        # the full versioned one so gcc can still find it
159 +        rm -f ${l} ${DIRNAME}/${SONAME}
160 +        ln -s ${DESTDIR}/${FULLNAME} ${l}
161      done
162 -}
163  
164 -# Install shared libgcc libraries into sysroot direcotory
165 -# 1st argument is the toolchain install directory
166 -# 2nd argument is the toolchain name
167 -# FIXME: Only libgcc_s.so.1 is handled
168 -
169 -install_libgccs ()
170 -{
171 -    GCCS=`find $1 -name bfin-linux-uclibc-gcc-* | tr '\n' ' '`
172 -
173 -    NEWEST_VERSION=""
174 -    NEWEST_GCC=""
175 -    for GCC in $GCCS; do
176 -       LIBGCC=`$GCC --print-file-name=libgcc_s.so`
177 -       LIBGCC_DIR=`dirname $LIBGCC`
178 -       GCC_VERSION=`basename $LIBGCC_DIR`
179 -       
180 -       if [ -z "$NEWEST_VERSION" ]; then
181 -          NEWEST_VERSION=$GCC_VERSION
182 -          NEWEST_GCC=$GCC
183 -          continue
184 -       fi
185 -
186 -       is_newer $GCC_VERSION $NEWEST_VERSION
187 -       if [ $? -eq 1 ]; then
188 -           NEWEST_VERSION=$GCC_VERSION
189 -           NEWEST_GCC=$GCC
190 -       fi
191 -    done
192 -
193 -    echo "Installing libgcc_s from $NEWEST_GCC"
194 -
195 -    MULTILIBS=`$NEWEST_GCC --print-multi-lib`
196 -
197 -    for ml in $MULTILIBS; do
198 -
199 -       dir=`echo ${ml} | sed -e 's/;.*$//'`
200 -       flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`
201 -
202 -       LIBGCC=`$NEWEST_GCC $flags --print-file-name=libgcc_s_$dir.so`
203 -       if [ ! -e $LIBGCC ]; then
204 -           LIBGCC=`$NEWEST_GCC $flags --print-file-name=libgcc_s.so`
205 -       fi
206 -       if [ ! -e $LIBGCC ]; then
207 -            echo "No libgcc_s.so for $NEWEST_GCC - report an error"
208 -            tail -10 $ACTUAL_LOGFILE
209 -            exit 1
210 -       fi
211 -           
212 -       LIBGCC=`readlink -f $LIBGCC`
213 -       LIBGCC_DIR=`dirname $LIBGCC`
214 -       LIBGCC_NAME=`basename $LIBGCC`
215 -
216 -       cp $LIBGCC $1/$2/runtime/$dir/lib
217 -
218 -       for G in $GCCS; do
219 -           L=`$G $flags --print-file-name=libgcc_s_$dir.so`
220 -           dir2=
221 -           if [ ! -e $L ]; then
222 -               L=`$G $flags --print-file-name=libgcc_s.so`
223 -               if [ "$dir" != "." ]; then
224 -                   dir2=`echo ${dir} | sed -e 's|[^/]*|..|g'`/
225 -               fi
226 -           fi
227 -           rm -f $L*
228 -           ln -s ../../../../$dir2$2/runtime/$dir/lib/$LIBGCC_NAME $L
229 -       done
230 -    done
231 +    popd > /dev/null
232  }
233  
234  run_tests ()
235 @@ -1667,8 +1503,7 @@
236      done
237      rm -f $DIR_LINUX_OUTPUT/bfin-linux-uclibc/sys-include
238  
239 -    install_libstdcpps $DIR_LINUX_OUTPUT bfin-linux-uclibc
240 -    install_libgccs $DIR_LINUX_OUTPUT bfin-linux-uclibc
241 +    install_gcc_libs $DIR_LINUX_OUTPUT bfin-linux-uclibc
242  
243      ##################### Test bfin-linux-uclibc #####################
244