cc/gcc: add option to compile against static libstdc++, for gcc-4.4 and newer

Idea and know-how taken from CodeSourcery build script.

Normal build:
  $ ldd arm-unknown-linux-uclibcgnueabi-gcc
	linux-gate.so.1 =>  (0xb77f3000)
	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb76e8000)
	libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb75a1000)
	libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb757a000)
	/lib/ld-linux.so.2 (0xb77f4000)
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb755c000)

CC_STATIC_LIBSTDCXX=y:
  $ ldd arm-unknown-linux-uclibcgnueabi-gcc
	linux-gate.so.1 =>  (0xb7843000)
	libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb76e6000)
	/lib/ld-linux.so.2 (0xb7844000)

I made CC_STATIC_LIBSTDCXX default=y since I think
it is always desirable.

Signed-off-by: Johannes Stezenbach <js@sig21.net>
This commit is contained in:
Johannes Stezenbach 2010-07-29 19:47:16 +02:00
parent 8bd0034057
commit 143f02e0ce
2 changed files with 22 additions and 4 deletions

View File

@ -7,6 +7,18 @@ config CC_GCC_ENABLE_TARGET_OPTSPACE
This will compile crossgcc's libs with -Os. This will compile crossgcc's libs with -Os.
config CC_STATIC_LIBSTDCXX
bool
prompt "Link libstdc++ statically into the gcc binary"
default y
depends on CC_GCC_4_4_or_later
help
Newer gcc versions use the PPL library which is C++ code. Statically
linking libstdc++ increases the likeliness that the gcc binary will
run on machines other than the one which it was built on, without
having to worry about distributing the matching version of libstdc++
along with it.
comment "Misc. obscure options." comment "Misc. obscure options."
config CC_CXA_ATEXIT config CC_CXA_ATEXIT

View File

@ -347,10 +347,16 @@ do_cc() {
extra_config+=(--disable-libmudflap) extra_config+=(--disable-libmudflap)
fi fi
# When companion libraries are build static (eg !shared), if [ "${CT_CC_STATIC_LIBSTDCXX}" = "y" ]; then
# the libstdc++ is not pulled automatically, although it # this is from CodeSourcery arm-2010q1-202-arm-none-linux-gnueabi.src.tar.bz2
# is needed. Shoe-horn it in our LDFLAGS # build script
if [ "${CT_COMPLIBS_SHARED}" != "y" ]; then # FIXME: if the host gcc is gcc-4.5 then presumably we could use -static-libstdc++,
# see http://gcc.gnu.org/ml/gcc-patches/2009-06/msg01635.html
extra_config+=("--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm")
elif [ "${CT_COMPLIBS_SHARED}" != "y" ]; then
# When companion libraries are build static (eg !shared),
# the libstdc++ is not pulled automatically, although it
# is needed. Shoe-horn it in our LDFLAGS
final_LDFLAGS='-lstdc++' final_LDFLAGS='-lstdc++'
fi fi
if [ "${CT_CC_GCC_USE_GMP_MPFR}" = "y" ]; then if [ "${CT_CC_GCC_USE_GMP_MPFR}" = "y" ]; then