eglibc: enable support in the Buildroot toolchain backend
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Sun, 30 Jun 2013 19:29:12 +0000 (21:29 +0200)
committerPeter Korsgaard <jacmet@sunsite.dk>
Thu, 4 Jul 2013 09:08:27 +0000 (11:08 +0200)
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>
package/gcc/Config.in.host
package/gcc/gcc-final/gcc-final.mk
package/gcc/gcc-intermediate/gcc-intermediate.mk
package/uclibc/Config.in
toolchain/Config.in
toolchain/toolchain-buildroot.mk
toolchain/toolchain-buildroot/Config.in

index 7ecf2fb1172a32dfe2d5495849f135ce53b69731..0e26a80182661341f6de20f210f6887bd1eea020 100644 (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
index 998c928f611802cef98c32e3191f8f26a505d6ae..f99f1a37895270a3d045d5a296d69c5254fa0911 100644 (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)
 
index 3a71671961a1476e52df5062b151c615956032bf..5460000976da5726be3de67792dd2253849d4112 100644 (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)
 
index 410326bf5d104561c6630f2ae4994da4e438586a..f309243c092a917e0ea8b96caa04cf936dbc9f5b 100644 (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
index 448bccc796f90e93454c952799c177d37db87518..53d25736c2f0f3ef0f7274f0623714a406df17ce 100644 (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"
index e7241bfcf485b5244addf8b3c3a62eb49a710540..3a0580066efb1387210ce519645ecc5019e7a2ae 100644 (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
index 416695b1a74f367f2e9930a6e655168519ef3b0f..396a434ac0b4b0711387c3a025e3977038963ff1 100644 (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