eglibc: enable support in the Buildroot toolchain backend

Using the newly introduced 'eglibc' package, this commit enables the
option of building a toolchain using the eglibc C library in the
Buildroot toolchain backend.

In details, this commit:

 * Creates a choice to select uClibc or eglibc in the Buildroot
   toolchain backend (in toolchain/toolchain-buildroot/Config.in), and
   removes the fact that the Buildroot toolchain backend forcefully
   enables uClibc (toolchain/Config.in).

 * Creates a BUILDROOT_LIBC variables, which points to the package
   implementing the C library (i.e either 'uclibc' or 'eglibc').

 * Modifies the gcc-final and gcc-intermediate makefiles to use the
   BUILDROOT_LIBC variable instead of hardcoding the use of uclibc.

 * Ensures that TLS support is always enabled when building eglibc.

[Peter: fix commit text to refer to BUILDROOT_LIBC]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
This commit is contained in:
Thomas Petazzoni 2013-06-30 21:29:12 +02:00 committed by Peter Korsgaard
parent 413ecfa80f
commit 8d29893893
7 changed files with 52 additions and 5 deletions

View File

@ -114,9 +114,9 @@ config BR2_GCC_SHARED_LIBGCC
Build/install a shared libgcc library
config BR2_GCC_ENABLE_TLS
bool "Enable compiler tls support"
bool "Enable compiler tls support" if BR2_TOOLCHAIN_BUILDROOT_UCLIBC
default y
depends on BR2_PTHREADS_NATIVE
depends on BR2_PTHREADS_NATIVE || BR2_TOOLCHAIN_BUILDROOT_EGLIBC
help
Enable the compiler to generate code for accessing
thread local storage variables

View File

@ -10,7 +10,7 @@ GCC_FINAL_SOURCE = $(GCC_SOURCE)
HOST_GCC_FINAL_DEPENDENCIES = \
$(HOST_GCC_COMMON_DEPENDENCIES) \
uclibc
$(BUILDROOT_LIBC)
HOST_GCC_FINAL_EXTRACT_CMDS = $(HOST_GCC_EXTRACT_CMDS)

View File

@ -10,7 +10,7 @@ GCC_INTERMEDIATE_SOURCE = $(GCC_SOURCE)
HOST_GCC_INTERMEDIATE_DEPENDENCIES = \
$(HOST_GCC_COMMON_DEPENDENCIES) \
uclibc-configure
$(BUILDROOT_LIBC)-configure
HOST_GCC_INTERMEDIATE_EXTRACT_CMDS = $(HOST_GCC_EXTRACT_CMDS)

View File

@ -1,3 +1,5 @@
if BR2_TOOLCHAIN_BUILDROOT_UCLIBC
comment "uClibc Options"
choice
@ -241,3 +243,5 @@ config BR2_UCLIBC_X86_TYPE
default PENTIUMIII if BR2_x86_pentium3
default PENTIUM4 if BR2_x86_pentium4 || BR2_x86_pentium_m || \
BR2_x86_nocona || BR2_x86_core2
endif # BR2_TOOLCHAIN_BUILDROOT_UCLIBC

View File

@ -27,7 +27,6 @@ config BR2_TOOLCHAIN_BUILDROOT
bool "Buildroot toolchain"
depends on !BR2_microblaze && !BR2_aarch64
select BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS
select BR2_TOOLCHAIN_USES_UCLIBC
config BR2_TOOLCHAIN_EXTERNAL
bool "External toolchain"

View File

@ -2,4 +2,8 @@
# build of binutils, uClibc, kernel headers and all the intermediate
# gcc steps.
include toolchain/helpers.mk
BUILDROOT_LIBC = $(call qstrip,$(BR2_TOOLCHAIN_BUILDROOT_LIBC))
toolchain-buildroot: host-gcc-final

View File

@ -2,7 +2,47 @@
if BR2_TOOLCHAIN_BUILDROOT
source "package/linux-headers/Config.in.host"
choice
prompt "C library"
config BR2_TOOLCHAIN_BUILDROOT_UCLIBC
bool "uClibc"
select BR2_TOOLCHAIN_USES_UCLIBC
help
This option selects uClibc as the C library for the
cross-compilation toolchain.
http://uclibc.org
config BR2_TOOLCHAIN_BUILDROOT_EGLIBC
bool "eglibc (experimental)"
depends on BR2_arm || BR2_armeb || BR2_aarch64 || \
BR2_i386 || BR2_mips || BR2_mipsel || \
BR2_mips64 || BR2_mips64el || BR2_powerpc || \
BR2_sh || BR2_sh64 || BR2_sparc || \
BR2_x86_64
select BR2_TOOLCHAIN_USES_GLIBC
# our eglibc.mk enables RPC support
select BR2_TOOLCHAIN_HAS_NATIVE_RPC
help
This option selects eglibc as the C library for the
cross-compilation toolchain.
The eglibc support in the Buildroot toolchain backend is
very recent, and therefore marked experimental.
http://eglibc.org
endchoice
config BR2_TOOLCHAIN_BUILDROOT_LIBC
string
default "uclibc" if BR2_TOOLCHAIN_BUILDROOT_UCLIBC
default "eglibc" if BR2_TOOLCHAIN_BUILDROOT_EGLIBC
source "package/uclibc/Config.in"
source "package/binutils/Config.in.host"
source "package/gcc/Config.in.host"
endif