diff options
Diffstat (limited to 'toolchain/toolchain-external')
-rw-r--r-- | toolchain/toolchain-external/Config.in | 12 | ||||
-rw-r--r-- | toolchain/toolchain-external/toolchain-external.mk | 18 |
2 files changed, 29 insertions, 1 deletions
diff --git a/toolchain/toolchain-external/Config.in b/toolchain/toolchain-external/Config.in index c53577ef60..89c799e3d5 100644 --- a/toolchain/toolchain-external/Config.in +++ b/toolchain/toolchain-external/Config.in @@ -860,6 +860,10 @@ config BR2_TOOLCHAIN_EXTERNAL_UCLIBC bool select BR2_TOOLCHAIN_USES_UCLIBC +config BR2_TOOLCHAIN_EXTERNAL_MUSL + bool + select BR2_TOOLCHAIN_USES_MUSL + if BR2_TOOLCHAIN_EXTERNAL_CUSTOM choice @@ -882,6 +886,13 @@ config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC eglibc configured to exclude key features may cause build failures to some packages. +config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL + bool "musl" + select BR2_TOOLCHAIN_EXTERNAL_MUSL + help + Select this option if your external toolchain uses the + 'musl' C library, available from http://www.musl-libc.org/. + endchoice if BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC @@ -952,6 +963,7 @@ endif # BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC config BR2_TOOLCHAIN_EXTERNAL_INET_RPC bool "Toolchain has RPC support?" select BR2_TOOLCHAIN_HAS_NATIVE_RPC + depends on !BR2_TOOLCHAIN_EXTERNAL_MUSL default y if BR2_TOOLCHAIN_EXTERNAL_GLIBC help Select this option if your external toolchain supports diff --git a/toolchain/toolchain-external/toolchain-external.mk b/toolchain/toolchain-external/toolchain-external.mk index 2bfe64a888..b2266b6ac0 100644 --- a/toolchain/toolchain-external/toolchain-external.mk +++ b/toolchain/toolchain-external/toolchain-external.mk @@ -68,6 +68,10 @@ ifeq ($(BR2_TOOLCHAIN_EXTERNAL_GLIBC),y) LIB_EXTERNAL_LIBS+=libnss_files.so.* libnss_dns.so.* endif +ifeq ($(BR2_TOOLCHAIN_EXTERNAL_MUSL),y) +LIB_EXTERNAL_LIBS += libc.so libgcc_s.so.* +endif + ifeq ($(BR2_INSTALL_LIBSTDCPP),y) USR_LIB_EXTERNAL_LIBS+=libstdc++.so.* endif @@ -353,7 +357,7 @@ endif define TOOLCHAIN_EXTERNAL_CONFIGURE_CMDS $(Q)$(call check_cross_compiler_exists,$(TOOLCHAIN_EXTERNAL_CC)) $(Q)LIBC_A_LOCATION=`readlink -f $$(LANG=C $(TOOLCHAIN_EXTERNAL_CC) -print-file-name=libc.a)` ; \ - SYSROOT_DIR=`echo $${LIBC_A_LOCATION} | sed -r -e 's:usr/lib(32|64)?/(.*/)?libc\.a::'` ; \ + SYSROOT_DIR=`echo $${LIBC_A_LOCATION} | sed -r -e 's:(usr/)?lib(32|64)?/(.*/)?libc\.a::'` ; \ if test -z "$${SYSROOT_DIR}" ; then \ @echo "External toolchain doesn't support --sysroot. Cannot use." ; \ exit 1 ; \ @@ -368,11 +372,23 @@ define TOOLCHAIN_EXTERNAL_CONFIGURE_CMDS fi ; \ if test "$(BR2_TOOLCHAIN_EXTERNAL_UCLIBC)" = "y" ; then \ $(call check_uclibc,$${SYSROOT_DIR}) ; \ + elif test "$(BR2_TOOLCHAIN_EXTERNAL_MUSL)" = "y" ; then \ + $(call check_musl,$${SYSROOT_DIR}) ; \ else \ $(call check_glibc,$${SYSROOT_DIR}) ; \ fi endef +# With the musl C library, the libc.so library directly plays the role +# of the dynamic library loader. We just need to create a symbolic +# link to libc.so with the appropriate name. +ifeq ($(BR2_TOOLCHAIN_EXTERNAL_MUSL),y) +define TOOLCHAIN_EXTERNAL_MUSL_LD_LINK + ln -sf libc.so $(TARGET_DIR)/lib/ld-musl-$(ARCH).so.1 +endef +TOOLCHAIN_EXTERNAL_POST_INSTALL_STAGING_HOOKS += TOOLCHAIN_EXTERNAL_MUSL_LD_LINK +endif + # Integration of the toolchain into Buildroot: find the main sysroot # and the variant-specific sysroot, then copy the needed libraries to # the $(TARGET_DIR) and copy the whole sysroot (libraries and headers) |