Simple glibc-based external toolchain support

The current Buildroot works just well with sysrootable glibc
toolchains, using the external toolchain feature. The only thing that
needs to be customized is the set of libraries that must be compiled
to the target.

The following patch takes a simple approach to making it easier for
users to use glibc toolchains. It just adds a uClibc/glibc choice in
the external toolchain menu. Then, depending on that selection, the
configuration system will choose a sane default value for the library
files list.

The other advantage of having a uClibc/glibc choice is that in the
future, we'll be able to add checks verifying that the external
toolchain configuration matches the features selected in Buildroot (in
terms of IPv6, RPC, locales or large file support).

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
This commit is contained in:
Thomas Petazzoni 2009-05-29 18:37:41 +02:00
parent 220dca451e
commit 643aa232f0
2 changed files with 26 additions and 23 deletions

View File

@ -1,22 +1,17 @@
# #
if BR2_TOOLCHAIN_EXTERNAL if BR2_TOOLCHAIN_EXTERNAL
config BR2_TOOLCHAIN_EXTERNAL_LIB_C choice
string "The core C library from the external toolchain" prompt "External toolchain C library"
default "libc.so.0" default BR2_TOOLCHAIN_EXTERNAL_UCLIBC
help
Specify the core C shared library found in the external
toolchain. This is required in addition to any other
libraries to be copied.
config BR2_TOOLCHAIN_EXTERNAL_LIBS config BR2_TOOLCHAIN_EXTERNAL_UCLIBC
string "Libraries to copy from the external toolchain" bool "uClibc"
default "ld-uClibc.so.0 libcrypt.so.0 libdl.so.0 libgcc_s.so libm.so.0 libnsl.so.0 libpthread.so.0 libresolv.so.0 librt.so.0 libutil.so.0"
help config BR2_TOOLCHAIN_EXTERNAL_GLIBC
A space separated list of the shared libraries to be copied bool "glibc"
from the external toolchain into the root filesystem. Only
the top-level name is needed, i.e. libc.so, libpthread.so as endchoice
the actual shared library symlinked to will be copied also.
config BR2_TOOLCHAIN_EXTERNAL_STRIP config BR2_TOOLCHAIN_EXTERNAL_STRIP
bool bool

View File

@ -21,7 +21,6 @@ copy_toolchain_lib_root = \
for FILE in `find $${LIB_DIR} -maxdepth 1 -type l -name "$${LIB}*"`; do \ for FILE in `find $${LIB_DIR} -maxdepth 1 -type l -name "$${LIB}*"`; do \
LIB=`basename $${FILE}`; \ LIB=`basename $${FILE}`; \
while test \! -z "$${LIB}"; do \ while test \! -z "$${LIB}"; do \
echo "copy_toolchain_lib_root lib=$${LIB} dst=$${DST}"; \
rm -fr $(TARGET_DIR)$${DST}/$${LIB}; \ rm -fr $(TARGET_DIR)$${DST}/$${LIB}; \
mkdir -p $(TARGET_DIR)$${DST}; \ mkdir -p $(TARGET_DIR)$${DST}; \
if test -h $${LIB_DIR}/$${LIB}; then \ if test -h $${LIB_DIR}/$${LIB}; then \
@ -49,14 +48,23 @@ copy_toolchain_sysroot = \
if [ -n "$${SYSROOT_DIR}" ]; then cp -a $${SYSROOT_DIR}/* $(STAGING_DIR)/ ; \ if [ -n "$${SYSROOT_DIR}" ]; then cp -a $${SYSROOT_DIR}/* $(STAGING_DIR)/ ; \
find $(STAGING_DIR) -type d | xargs chmod 755; fi find $(STAGING_DIR) -type d | xargs chmod 755; fi
uclibc: dependencies $(TARGET_DIR)/lib/$(strip $(subst ",, $(BR2_TOOLCHAIN_EXTERNAL_LIB_C))) ifeq ($(BR2_TOOLCHAIN_EXTERNAL_UCLIBC),y)
EXTERNAL_LIBC=libc.so.0
EXTERNAL_LIBS=ld-uClibc.so.0 libcrypt.so.0 libdl.so.0 libgcc_s.so libm.so.0 libnsl.so.0 libpthread.so.0 libresolv.so.0 librt.so.0 libutil.so.0
else
EXTERNAL_LIBC=libc.so.6
EXTERNAL_LIBS=ld-linux.so.3 libcrypt.so.1 libdl.so.2 libgcc_s.so.1 libm.so.6 libnsl.so.1 libpthread.so.0 libresolv.so.2 librt.so.1 libutil.so.1 libnss_files.so.2
endif
$(TARGET_DIR)/lib/$(strip $(subst ",, $(BR2_TOOLCHAIN_EXTERNAL_LIB_C))):
#")) uclibc: dependencies $(TARGET_DIR)/lib/$(EXTERNAL_LIBC)
$(TARGET_DIR)/lib/$(EXTERNAL_LIBC):
mkdir -p $(TARGET_DIR)/lib mkdir -p $(TARGET_DIR)/lib
@$(call copy_toolchain_lib_root, $(strip $(subst ",, $(BR2_TOOLCHAIN_EXTERNAL_LIB_C))), /lib, $(BR2_TOOLCHAIN_EXTERNAL_STRIP)) @echo "Copy external toolchain libraries to target..."
#"))) @$(call copy_toolchain_lib_root, $(EXTERNAL_LIBC), /lib, $(BR2_TOOLCHAIN_EXTERNAL_STRIP))
for libs in $(strip $(subst ",, $(BR2_TOOLCHAIN_EXTERNAL_LIBS))); do \ @for libs in $(EXTERNAL_LIBS); do \
$(call copy_toolchain_lib_root, $$libs, /lib, $(BR2_TOOLCHAIN_EXTERNAL_STRIP)); \ $(call copy_toolchain_lib_root, $$libs, /lib, $(BR2_TOOLCHAIN_EXTERNAL_STRIP)); \
done done
$(call copy_toolchain_sysroot) @echo "Copy external toolchain sysroot to staging..."
@$(call copy_toolchain_sysroot)