Introduce target-specific LDFLAGS, the same way we have CFLAGS for the target.
It seems to be helping gcc somewhat into telling the correct endianness to ld that sticks with little endian even when the target is big (eg armeb-unknown-linux-uclibcgnueabi).
There's still work to do, especially finish the gcc part that is not in this commit.
/trunk/scripts/functions | 9 7 2 0 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
1 # This file adds the function to build the gcc C compiler
2 # Copyright 2007 Yann E. MORIN
3 # Licensed under the GPL v2. See COPYING in the root of this package
6 [ "${CT_CC}" = "gcc" ] || return 0
7 echo "gcc-${CT_CC_VERSION}"
12 # Ah! gcc folks are kind of 'different': they store the tarballs in
13 # subdirectories of the same name! That's because gcc is such /crap/ that
14 # it is such /big/ that it needs being splitted for distribution! Sad. :-(
15 # Arrgghh! Some of those versions does not follow this convention:
16 # gcc-3.3.3 lives in releases/gcc-3.3.3, while gcc-2.95.* isn't in a
17 # subdirectory! You bastard!
18 CT_GetFile "${CT_CC_FILE}" \
19 {ftp,http}://ftp.gnu.org/gnu/gcc{,{,/releases}/${CT_CC_FILE}}
24 CT_ExtractAndPatch "${CT_CC_FILE}"
27 #------------------------------------------------------------------------------
30 # In case we're NPTL, build the static core gcc;
31 # in any other case, do nothing.
32 case "${CT_THREADS}" in
33 nptl) do_cc_core_static;;
39 # In case we're NPTL, build the shared core gcc,
40 # in any other case, build the static core gcc.
41 case "${CT_THREADS}" in
42 nptl) do_cc_core_shared;;
43 *) do_cc_core_static;;
47 #------------------------------------------------------------------------------
48 # Build static core gcc
50 mkdir -p "${CT_BUILD_DIR}/build-cc-core-static"
51 cd "${CT_BUILD_DIR}/build-cc-core-static"
53 CT_DoStep INFO "Installing static core C compiler"
55 CT_DoLog EXTRA "Copying headers to install area of bootstrap gcc, so it can build libgcc2"
56 mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/include"
57 cp -r "${CT_HEADERS_DIR}"/* "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/include" 2>&1 |CT_DoLog DEBUG
59 CT_DoLog EXTRA "Configuring static core C compiler"
61 extra_config="${CT_ARCH_WITH_ARCH} ${CT_ARCH_WITH_ABI} ${CT_ARCH_WITH_CPU} ${CT_ARCH_WITH_TUNE} ${CT_ARCH_WITH_FPU} ${CT_ARCH_WITH_FLOAT}"
62 [ "${CT_CC_CXA_ATEXIT}" = "y" ] && extra_config="${extra_config} --enable-__cxa_atexit"
63 [ "${CT_CC_GCC_GMP_MPFR}" = "y" ] && extra_config="${extra_config} --with-gmp=${CT_PREFIX_DIR} --with-mpfr=${CT_PREFIX_DIR}"
65 CT_DoLog DEBUG "Extra config passed: '${extra_config}'"
67 # Use --with-local-prefix so older gccs don't look in /usr/local (http://gcc.gnu.org/PR10532)
68 CC_FOR_BUILD="${CT_CC_NATIVE}" \
69 CFLAGS="${CT_CFLAGS_FOR_HOST}" \
70 "${CT_SRC_DIR}/${CT_CC_FILE}/configure" \
73 --target=${CT_TARGET} \
74 --prefix="${CT_CC_CORE_STATIC_PREFIX_DIR}" \
75 --with-local-prefix="${CT_SYSROOT_DIR}" \
78 ${CC_CORE_SYSROOT_ARG} \
82 --enable-symvers=gnu \
83 --enable-languages=c \
85 --enable-target-optspace \
86 ${CT_CC_CORE_EXTRA_CONFIG} 2>&1 |CT_DoLog ALL
88 if [ "${CT_CANADIAN}" = "y" ]; then
89 CT_DoLog EXTRA "Building libiberty"
90 make ${PARALLELMFLAGS} all-build-libiberty 2>&1 |CT_DoLog ALL
93 CT_DoLog EXTRA "Building static core C compiler"
94 make ${PARALLELMFLAGS} all-gcc 2>&1 |CT_DoLog ALL
96 CT_DoLog EXTRA "Installing static core C compiler"
97 make install-gcc 2>&1 |CT_DoLog ALL
102 #------------------------------------------------------------------------------
103 # Build shared core gcc
104 do_cc_core_shared() {
105 mkdir -p "${CT_BUILD_DIR}/build-cc-core-shared"
106 cd "${CT_BUILD_DIR}/build-cc-core-shared"
108 CT_DoStep INFO "Installing shared core C compiler"
110 CT_DoLog EXTRA "Copying headers to install area of bootstrap gcc, so it can build libgcc2"
111 mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/include"
112 cp -r "${CT_HEADERS_DIR}"/* "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/include" 2>&1 |CT_DoLog DEBUG
114 CT_DoLog EXTRA "Configuring shared core C compiler"
116 extra_config="${CT_ARCH_WITH_ARCH} ${CT_ARCH_WITH_ABI} ${CT_ARCH_WITH_CPU} ${CT_ARCH_WITH_TUNE} ${CT_ARCH_WITH_FPU} ${CT_ARCH_WITH_FLOAT}"
117 [ "${CT_CC_CXA_ATEXIT}" = "y" ] && extra_config="${extra_config} --enable-__cxa_atexit"
118 [ "${CT_CC_GCC_GMP_MPFR}" = "y" ] && extra_config="${extra_config} --with-gmp=${CT_PREFIX_DIR} --with-mpfr=${CT_PREFIX_DIR}"
120 CT_DoLog DEBUG "Extra config passed: '${extra_config}'"
122 CC_FOR_BUILD="${CT_CC_NATIVE}" \
123 CFLAGS="${CT_CFLAGS_FOR_HOST}" \
124 "${CT_SRC_DIR}/${CT_CC_FILE}/configure" \
126 --target=${CT_TARGET} \
128 --prefix="${CT_CC_CORE_SHARED_PREFIX_DIR}" \
129 --with-local-prefix="${CT_SYSROOT_DIR}" \
131 ${CC_CORE_SYSROOT_ARG} \
134 --enable-symvers=gnu \
135 --enable-languages=c \
137 --enable-target-optspace \
138 ${CT_CC_CORE_EXTRA_CONFIG} 2>&1 |CT_DoLog ALL
140 # HACK: we need to override SHLIB_LC from gcc/config/t-slibgcc-elf-ver or
141 # gcc/config/t-libunwind so -lc is removed from the link for
142 # libgcc_s.so, as we do not have a target -lc yet.
143 # This is not as ugly as it appears to be ;-) All symbols get resolved
144 # during the glibc build, and we provide a proper libgcc_s.so for the
145 # cross toolchain during the final gcc build.
147 # As we cannot modify the source tree, nor override SHLIB_LC itself
148 # during configure or make, we have to edit the resultant
149 # gcc/libgcc.mk itself to remove -lc from the link.
150 # This causes us to have to jump through some hoops...
152 # To produce libgcc.mk to edit we firstly require libiberty.a,
153 # so we configure then build it.
154 # Next we have to configure gcc, create libgcc.mk then edit it...
155 # So much easier if we just edit the source tree, but hey...
156 if [ ! -f "${CT_SRC_DIR}/${CT_CC_FILE}/gcc/BASE-VER" ]; then
157 make configure-libiberty
158 make -C libiberty libiberty.a
160 make configure-libcpp
164 make configure-libcpp
165 make configure-build-libiberty
167 make all-build-libiberty
168 fi 2>&1 |CT_DoLog ALL
169 # HACK: gcc-4.2 uses libdecnumber to build libgcc.mk, so build it here.
170 if [ -d "${CT_SRC_DIR}/${CT_CC_FILE}/libdecnumber" ]; then
171 make configure-libdecnumber
172 make -C libdecnumber libdecnumber.a
173 fi 2>&1 |CT_DoLog ALL
174 make -C gcc libgcc.mk 2>&1 |CT_DoLog ALL
175 sed -r -i -e 's@-lc@@g' gcc/libgcc.mk
177 if [ "${CT_CANADIAN}" = "y" ]; then
178 CT_DoLog EXTRA "Building libiberty"
179 make ${PARALLELMFLAGS} all-build-libiberty 2>&1 |CT_DoLog ALL
182 CT_DoLog EXTRA "Building shared core C compiler"
183 make ${PARALLELMFLAGS} all-gcc 2>&1 |CT_DoLog ALL
185 CT_DoLog EXTRA "Installing shared core C compiler"
186 make install-gcc 2>&1 |CT_DoLog ALL
191 #------------------------------------------------------------------------------
194 CT_DoStep INFO "Installing final compiler"
196 mkdir -p "${CT_BUILD_DIR}/build-cc"
197 cd "${CT_BUILD_DIR}/build-cc"
199 CT_DoLog EXTRA "Configuring final compiler"
201 # Enable selected languages
203 [ "${CT_CC_LANG_CXX}" = "y" ] && lang_opt="${lang_opt},c++"
204 [ "${CT_CC_LANG_FORTRAN}" = "y" ] && lang_opt="${lang_opt},fortran"
205 [ "${CT_CC_LANG_ADA}" = "y" ] && lang_opt="${lang_opt},ada"
206 [ "${CT_CC_LANG_JAVA}" = "y" ] && lang_opt="${lang_opt},java"
207 [ "${CT_CC_LANG_OBJC}" = "y" ] && lang_opt="${lang_opt},objc"
208 [ "${CT_CC_LANG_OBJCXX}" = "y" ] && lang_opt="${lang_opt},obj-c++"
209 CT_Test "Building ADA language is not yet supported. Will try..." "${CT_CC_LANG_ADA}" = "y"
210 CT_Test "Building Objective-C language is not yet supported. Will try..." "${CT_CC_LANG_OBJC}" = "y"
211 CT_Test "Building Objective-C++ language is not yet supported. Will try..." "${CT_CC_LANG_OBJCXX}" = "y"
212 CT_Test "Building ${CT_CC_LANG_OTHERS//,/ } language(s) is not yet supported. Will try..." -n "${CT_CC_LANG_OTHERS}"
213 lang_opt=$(echo "${lang_opt},${CT_CC_LANG_OTHERS}" |sed -r -e 's/,+/,/g; s/,*$//;')
215 extra_config="--enable-languages=${lang_opt}"
216 extra_config="${extra_config} ${CT_ARCH_WITH_ARCH} ${CT_ARCH_WITH_ABI} ${CT_ARCH_WITH_CPU} ${CT_ARCH_WITH_TUNE} ${CT_ARCH_WITH_FPU} ${CT_ARCH_WITH_FLOAT}"
217 [ "${CT_SHARED_LIBS}" = "y" ] || extra_config="${extra_config} --disable-shared"
218 [ "${CT_CC_CXA_ATEXIT}" == "y" ] && extra_config="${extra_config} --enable-__cxa_atexit"
219 if [ "${CT_TARGET_MULTILIB}" = "y" ]; then
220 extra_config="${extra_config} --enable-multilib"
222 extra_config="${extra_config} --disable-multilib"
224 [ "${CT_CC_GCC_GMP_MPFR}" = "y" ] && extra_config="${extra_config} --with-gmp=${CT_PREFIX_DIR} --with-mpfr=${CT_PREFIX_DIR}"
226 CT_DoLog DEBUG "Extra config passed: '${extra_config}'"
228 # --enable-symvers=gnu really only needed for sh4 to work around a
229 # detection problem only matters for gcc-3.2.x and later, I think.
230 # --disable-nls to work around crash bug on ppc405, but also because
231 # embedded systems don't really need message catalogs...
232 CC_FOR_BUILD="${CT_CC_NATIVE}" \
233 CFLAGS="${CT_CFLAGS_FOR_HOST}" \
234 TARGET_CFLAGS="${CT_TARGET_CFLAGS}" \
235 "${CT_SRC_DIR}/${CT_CC_FILE}/configure" \
237 --target=${CT_TARGET} --host=${CT_HOST} \
238 --prefix="${CT_PREFIX_DIR}" \
241 --with-local-prefix="${CT_SYSROOT_DIR}" \
243 --enable-threads=posix \
244 --enable-symvers=gnu \
247 --enable-target-optspace \
248 ${CT_CC_EXTRA_CONFIG} 2>&1 |CT_DoLog ALL
250 if [ "${CT_CANADIAN}" = "y" ]; then
251 CT_DoLog EXTRA "Building libiberty"
252 make ${PARALLELMFLAGS} all-build-libiberty 2>&1 |CT_DoLog ALL
255 # Idea from <cort.dougan at gmail.com>:
256 # Fix lib/lib64 confusion for GCC 3.3.3 on PowerPC64 and x86_64.
257 # GCC 3.4.0 and up don't suffer from this confusion, and don't need this
259 # FIXME: we should patch gcc's source rather than uglify crosstool.sh.
260 # FIXME: is this needed for gcc-3.3.[56]?
261 case "${CT_CC_FILE}" in
263 case "${CT_TARGET}" in
264 powerpc64-unknown-linux-gnu|x86_64-unknown-linux-gnu)
265 for d in $(find "${CT_SYSROOT_DIR}" -name lib -type d -empty); do
266 if [ -d $(dirname "${d}")/lib64 ] ; then
268 ln -s $(dirname "${d}")/lib64 "${d}"
275 CT_DoLog EXTRA "Building final compiler"
276 make ${PARALLELMFLAGS} all 2>&1 |CT_DoLog ALL
278 CT_DoLog EXTRA "Installing final compiler"
279 make install 2>&1 |CT_DoLog ALL
281 # Create a symlink ${CT_TARGET}-cc to ${CT_TARGET}-gcc to always be able
282 # to call the C compiler with the same, somewhat canonical name.
283 ln "${CT_PREFIX_DIR}/bin/${CT_TARGET}"-{g,}cc
285 # gcc installs stuff in prefix/target/lib, when it would make better sense
286 # to install that into sysroot/usr/lib
287 CT_DoLog EXTRA "Moving improperly installed gcc libs to sysroot"
288 ( cd "${CT_PREFIX_DIR}/${CT_TARGET}/lib"; tar cf - . ) | ( cd "${CT_SYSROOT_DIR}/usr/lib"; tar xfv - )