source: scripts/scripts/cross-scripts/cross-gcc-static-no-thread.sh @ ad31873f

clfs-1.2clfs-2.1clfs-3.0.0-systemdclfs-3.0.0-sysvinitsystemdsysvinit
Last change on this file since ad31873f was ad31873f, checked in by Jim Gifford <clfs@…>, 18 years ago

r2539@server (orig r1260): ryan | 2006-03-10 06:07:41 -0800

r1336@rei: lfs | 2006-03-11 01:06:05 +1100
Add GCC PR20425 fixes to 4.1.0 release.
This fixes a multitude of sins, most noticably with libtool on multilib systems.
Iterative path searches the gcc driver performs should now search multilib directories first.


Submitted By: Ryan Oliver <ryan at pha dot com dot au>
Date: 2006-03-10
Initial Package Version: 4.1.0
Origin: GCC SVN Revision 108635 (diffed against 4.1.0 release)
Upstream Status: In GCC trunk
Description: Fix for PR20425


From http://gcc.gnu.org/ml/gcc-patches/2005-12/msg00818.html
---------------------------------8<------------------------------------
This gives the gcc driver a new path iteration function, for_each_path,
and uses it everywhere, making path iteration a little more consistent.
for_each_path uses the same path ordering as the existing find_file
function. I've also tweaked some of the existing find_a_file calls for
consistency, and uncovered and fixed some other bugs..


Functional changes are:


o %D library paths are printed in the same order as gcc uses elsewhere

when searching library directories, ie. all multilib paths are first.
http://gcc.gnu.org/ml/gcc-patches/2005-03/msg02044.html effectively
reverted by the rewrite because I believe the same speedup is gained
by searching the right dirs first.


o gcc -print-search-dirs prints library multilib paths followed by

non-multilib paths where before we just printed non-multilib paths.


o LIBRARY_PATH_ENV similarly includes multilib directories.


o All searches of startfile_prefixes now look in multilib dirs first

followed by non-multilib dirs. This changes the dirs we search for
spec files, and %include and %include_noerr in specs. Previously
we only searched the non-multilib dirs for specs files. I think this
change is worthwhile just for consistency, and the extension is
reasonable. For instance, it would allow different spec files to be
used for gcc -m64 vs. gcc -m32. However, if others think this wrong,
I won't argue. Consistency isn't everything.


o Some attempt made to prevent searching of duplicate paths. The old

find_file would search some paths twice (when multilib_dir was NULL
but multilib_os_dir non-NULL). We still search twice in some cases,
eg. /usr/lib/../lib and /usr/lib are considered different paths.


o find_a_file with last param (do_multi) true now searches both

multilib and non-multilib paths. Before, do_multi (well, the old
param name was multilib) meant just search multilib paths. This
isn't a user-visible change as the only place where find_a_file was
invoked with the last param true was from find_file, where we
immediately followed with a non-multilib find_a_file.


o Memory leaks fixed in is_directory.


o LIBRARY_PATH_ENV and COMPILER_PATH now only have existing

directories, making LIBRARY_PATH_ENV closer to %D paths. The
following lines (which I remove) in is_directory meant that
is_directory didn't do much for LIBRARY_PATH_ENV, except on
SMALL_ARG_MAX machines.


4278 ian #ifndef SMALL_ARG_MAX
4278 ian if (! linker)
4278 ian return 1;
4278 ian #endif


I'll also remove mention of SMALL_ARG_MAX in config and doc files
when I commit this change as this is the only place it is used.


o gcc -Bnon-dir-prefix- now works properly. The previously mentioned

is_directory peculiarity affected the following code.


43664 nickc /* Catch the case where the user has forgotten to append a
46063 jsm28 directory separator to the path. Note, they may be using
43664 nickc -B to add an executable name prefix, eg "i386-elf-", in
43664 nickc order to distinguish between multiple installations of
43664 nickc GCC in the same directory. Hence we must check to see
43664 nickc if appending a directory separator actually makes a
43664 nickc valid directory name. */
43664 nickc if (! IS_DIR_SEPARATOR (value [len - 1])
43664 nickc && is_directory (value, "", 0))
43664 nickc {
43767 ghazi char *tmp = xmalloc (len + 2);
43767 ghazi strcpy (tmp, value);
43767 ghazi tmp[len] = DIR_SEPARATOR;
43767 ghazi tmp[++ len] = 0;
43767 ghazi value = tmp;
43664 nickc }


Bootstrapped and regression tested powerpc64-linux and powerpc-linux on
a previous iteration of this patch missing is_directory fixes.
Currently running tests on this patch.



  • Property mode set to 100755
File size: 4.9 KB
Line 
1#!/bin/bash
2
3# cross-lfs cross-gcc w static libgcc (no threads) build
4# ------------------------------------------------------
5# $LastChangedBy$
6# $LastChangedDate$
7# $LastChangedRevision$
8# $HeadURL$
9#
10
11cd ${SRC}
12
13LOG="gcc-cross-static-no-threads.log"
14
15if [ "Y" = "${MULTIARCH}" ]; then
16   vendor_os=`echo ${TARGET} | sed 's@\([^-]*\)-\(.*\)@\2@'`
17   case ${TGT_ARCH} in
18      x86_64 )
19      ;;
20      sparc* )
21         TARGET=sparc64-${vendor_os}
22      ;;
23      powerpc* | ppc* )
24         TARGET=powerpc64-${vendor_os}
25      ;;
26      s390* )
27         TARGET=s390x-${vendor_os}
28      ;;
29      mips*el* )
30         TARGET=mips64el-${vendor_os}
31      ;;
32      * )
33         # TODO: add some error messages etc
34         barf
35      ;;
36   esac
37
38else
39   # If we are not bi-arch, disable multilib
40   extra_conf="--enable-multilib=no"
41
42   # HACK: this sets abi to n32 with mips... this should be handled
43   # by the multiarch funcs somehow... and set according to DEFAULTENV
44   case ${TGT_ARCH} in
45      mips* )
46         extra_conf="${extra_conf} --with-abi=${DEFAULTENV}"
47      ;;
48   esac
49fi
50
51# if target is same as build host, adjust host slightly to
52# trick configure so we do not produce native tools
53if [ "${TARGET}" = "${BUILD}" ]; then
54   althost=`echo ${BUILD} | sed 's@\([_a-zA-Z0-9]*\)\(-[_a-zA-Z0-9]*\)\(.*\)@\1\2x\3@'`
55   extra_conf="--host=${althost} ${extra_conf}"
56fi
57
58unpack_tarball gcc-${GCC_VER}
59
60#3.0 20030427
61# Cannot trust ${GCC_VER} to supply us with the correct
62# gcc version (especially if cvs).
63# Grab it straight from version.c
64cd ${SRC}/${PKGDIR}
65target_gcc_ver=`grep version_string gcc/version.c | \
66                sed 's@.* = \(\|"\)\([0-9.]*\).*@\2@g'`
67# As of gcc4, the above doesn't cut it... check gcc/BASE-VER
68if [ -z "${target_gcc_ver}" -a -f gcc/BASE-VER ]; then
69   target_gcc_ver=`cat gcc/BASE-VER`
70fi
71
72# Apply linkonce patch for gcc (should be fixed come gcc 3.4.4)
73cd ${SRC}/${PKGDIR}
74case ${target_gcc_ver} in
75   3.4.3 )
76      apply_patch gcc-3.4.3-linkonce-1
77      apply_patch gcc-3.4.0-arm-bigendian
78      apply_patch gcc-3.4.0-arm-nolibfloat
79      apply_patch gcc-3.4.0-arm-lib1asm
80      apply_patch gcc-3.4.3-clean_exec_and_lib_search_paths_when_cross-1
81   ;;
82   4.0.0 )
83      apply_patch gcc-4.0.0-fix_tree_optimisation_PR21173
84      apply_patch gcc-4.0.0-reload_check_uninitialized_pseudos_PR20973
85      apply_patch gcc-4.0.0-clean_exec_and_lib_search_paths_when_cross-1
86   ;;
87   4.1.0 )
88      apply_patch gcc-4.0.0-clean_exec_and_lib_search_paths_when_cross-1
89      apply_patch gcc-4.1.0-fix_PR20425
90   ;;
91   4.0.* | 4.1.* )
92      apply_patch gcc-4.0.0-clean_exec_and_lib_search_paths_when_cross-1
93   ;;
94esac
95
96# if we are using gcc-3.4x, set libexecdir to */${libdirname}
97case ${target_gcc_ver} in
98   3.4* | 4.* )
99      extra_conf="${extra_conf} --libexecdir=${HST_TOOLS}/${libdirname}"
100   ;;
101esac
102
103# for some reason the build breaks in the absence of any target glibc headers if
104# a sysroot is used.
105if [ ! "${USE_SYSROOT}" = "Y" ]; then
106   # LFS style build
107   #----------------
108
109   # source functions for required gcc modifications
110   . ${SCRIPTS}/funcs/cross_gcc-funcs.sh
111
112   # Alter the generated specs file to
113   #  o set dynamic linker to be under ${TGT_TOOLS}/lib{,32,64}
114   #  o set startfile_prefix_spec so we search for startfiles
115   #    under ${TGT_TOOLS}/lib/lib{,32,64}
116   gcc_specs_mod
117
118   # Set cpp's default include search path, and the header search path
119   # used by fixincludes to be ${TGT_TOOLS}/include
120   cpp_set_cross_system_header_dir
121fi
122
123test -d ${SRC}/gcc-${GCC_VER}-cross-static-no-threads &&
124   rm -rf ${SRC}/gcc-${GCC_VER}-cross-static-no-threads
125
126mkdir -p ${SRC}/gcc-${GCC_VER}-cross-static-no-threads &&
127cd ${SRC}/gcc-${GCC_VER}-cross-static-no-threads
128
129# initial run does not produce a libgcc_eh.a, nor
130# libgcc_s.so, gcc_eh objects are packed into the standard libgcc.a .
131# We'd need crt[i1n].o to build these.
132#
133# Unfortunately glibc requires we have libgcc_eh.a for building against
134#
135
136# NOTE:
137# Some errors occur on solaris where bash syntax is used with a
138# standard /bin/sh ( ie: expecting $(command) to be evaluated )
139# To avoid this issue we override make's default shell with
140# /bin/bash
141# This is done via passing CONFIG_SHELL=/bin/bash to
142# configure, which uses this when it specifies SHELL in
143# the Makefiles.
144 
145max_log_init Gcc ${GCC_VER} cross-pt1 ${CONFLOGS} ${LOG}
146#CONFIG_SHELL=/bin/bash \
147CFLAGS="-O2 ${HOST_CFLAGS} -pipe" \
148../${PKGDIR}/configure --prefix=${HST_TOOLS} \
149   --target=${TARGET} ${extra_conf} \
150   --with-local-prefix=${TGT_TOOLS} --enable-languages=c \
151   --disable-nls --disable-shared --disable-threads \
152   >> ${LOGFILE} 2>&1 &&
153echo " o Configure OK" || barf
154
155min_log_init ${BUILDLOGS} &&
156#make ${PMFLAGS} BOOT_CFLAGS="-O2 ${HOST_CFLAGS} -pipe" \
157 #  STAGE1_CFLAGS="-O ${HOST_CFLAGS} -pipe" all-gcc \
158make all-gcc \
159   >> ${LOGFILE} 2>&1 &&
160echo " o Build OK" || barf
161
162min_log_init ${INSTLOGS} &&
163make install-gcc \
164   >> ${LOGFILE} 2>&1 &&
165echo " o Install OK" || barf
166
Note: See TracBrowser for help on using the repository browser.