diff mbox

[OpenWrt-Devel,06/14] toolchain: Allow to set libc type for external toolchains

Message ID 1451800982-112057-7-git-send-email-openwrt@daniel.thecshore.com
State Changes Requested
Headers show

Commit Message

Daniel Dickinson Jan. 3, 2016, 6:02 a.m. UTC
From: Daniel Dickinson <openwrt@daniel.thecshore.com>

An external toolchain, if glibc, uclibc, or musl, can benefit
from enabling the appropriate USE_<libc> configure flags so that
packages compile correctly for the libc type

Signed-off-by: Daniel Dickinson <openwrt@daniel.thecshore.com>
---
 rules.mk                   |  2 +-
 toolchain/Config.in        | 21 +++++++++++++--------
 toolchain/glibc/Config.in  |  2 +-
 toolchain/musl/Config.in   |  2 +-
 toolchain/uClibc/Config.in |  2 +-
 5 files changed, 17 insertions(+), 12 deletions(-)

Comments

Felix Fietkau Jan. 3, 2016, 3:16 p.m. UTC | #1
On 2016-01-03 07:02, openwrt@daniel.thecshore.com wrote:
> From: Daniel Dickinson <openwrt@daniel.thecshore.com>
> 
> An external toolchain, if glibc, uclibc, or musl, can benefit
> from enabling the appropriate USE_<libc> configure flags so that
> packages compile correctly for the libc type
> 
> Signed-off-by: Daniel Dickinson <openwrt@daniel.thecshore.com>
> ---
>  rules.mk                   |  2 +-
>  toolchain/Config.in        | 21 +++++++++++++--------
>  toolchain/glibc/Config.in  |  2 +-
>  toolchain/musl/Config.in   |  2 +-
>  toolchain/uClibc/Config.in |  2 +-
>  5 files changed, 17 insertions(+), 12 deletions(-)
> 
> diff --git a/rules.mk b/rules.mk
> index 1e7549f..eb5665d 100644
> --- a/rules.mk
> +++ b/rules.mk
> @@ -89,7 +89,7 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
>    REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))
>    GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux
>    DIR_SUFFIX:=_$(LIBC)-$(LIBCV)$(if $(CONFIG_arm),_eabi)
> -  BIN_DIR:=$(BIN_DIR)$(if $(CONFIG_USE_MUSL),,-$(LIBC))
> +  BIN_DIR:=$(BIN_DIR)$(if $(CONFIG_USE_MUSL),$(if $(CONFIG_USE_EXTERNAL_LIBC),-$(LIBC)),-$(LIBC))
>    TARGET_DIR_NAME = target-$(ARCH)$(ARCH_SUFFIX)$(DIR_SUFFIX)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
>    TOOLCHAIN_DIR_NAME = toolchain-$(ARCH)$(ARCH_SUFFIX)_gcc-$(GCCV)$(DIR_SUFFIX)
>  else
> diff --git a/toolchain/Config.in b/toolchain/Config.in
> index c7072fc..1f6f753 100644
> --- a/toolchain/Config.in
> +++ b/toolchain/Config.in
> @@ -143,6 +143,11 @@ menuconfig TOOLCHAINOPTS
>  	bool "Toolchain Options"  if DEVEL
>  	depends on NEED_TOOLCHAIN
>  
> +menuconfig EXTERNAL_TOOLCHAIN_OPTS
> +	bool "Define external toolchain options" if DEVEL
> +	depends on !NEED_TOOLCHAIN
> +
> +
>  menuconfig EXTRA_TARGET_ARCH
>  	bool
>  	prompt "Enable an extra toolchain target architecture" if TOOLCHAINOPTS
Can you get rid of EXTERNAL_TOOLCHAIN_OPTS and check for NEED_TOOLCHAIN
in the right places instead?

> @@ -178,7 +183,7 @@ menuconfig EXTRA_TARGET_ARCH
>  
>  
>  	choice
> -		prompt "MIPS64 user-land ABI" if TOOLCHAINOPTS && (mips64 || mips64el)
> +		prompt "MIPS64 user-land ABI" if ( TOOLCHAINOPTS || EXTERNAL_TOOLCHAIN_OPTS ) && (mips64 || mips64el)
>  		default MIPS64_ABI_N64
>  		help
>  		   MIPS64 supports 3 different user-land ABIs: o32 (legacy),
> @@ -209,7 +214,7 @@ comment "C Library"
>  	depends on TOOLCHAINOPTS
>  
>  choice
> -	prompt "C Library implementation" if TOOLCHAINOPTS
> +	prompt "C Library implementation" if ( TOOLCHAINOPTS || EXTERNAL_TOOLCHAIN_OPTS )
>  	default LIBC_USE_GLIBC if mips64 || mips64el
>  	default LIBC_USE_UCLIBC if arc
>  	default LIBC_USE_MUSL
> @@ -281,15 +286,15 @@ source "toolchain/musl/Config.version"
>  
>  config LIBC
>  	string
> -	default "glibc"   if USE_GLIBC
> -	default "uClibc"  if USE_UCLIBC
> -	default "musl"	  if USE_MUSL
> +	default "glibc"   if ( USE_GLIBC && !EXTERNAL_TOOLCHAIN )
> +	default "uClibc"  if ( USE_UCLIBC && !EXTERNAL_TOOLCHAIN )
> +	default "musl"	  if ( USE_MUSL && !EXTERNAL_TOOLCHAIN )
>  
>  config LIBC_VERSION
>  	string
> -	default GLIBC_VERSION   if USE_GLIBC
> -	default UCLIBC_VERSION  if USE_UCLIBC
> -	default MUSL_VERSION	if USE_MUSL
> +	default GLIBC_VERSION   if ( USE_GLIBC && !EXTERNAL_TOOLCHAIN )
> +	default UCLIBC_VERSION  if ( USE_UCLIBC && !EXTERNAL_TOOLCHAIN )
> +	default MUSL_VERSION	if ( USE_MUSL && !EXTERNAL_TOOLCHAIN )
>  
>  config TARGET_SUFFIX
>  	string
> diff --git a/toolchain/glibc/Config.in b/toolchain/glibc/Config.in
> index 66ff2f4..fcda4c9 100644
> --- a/toolchain/glibc/Config.in
> +++ b/toolchain/glibc/Config.in
> @@ -16,6 +16,6 @@ choice
>  endchoice
>  
>  menu "eglibc configuration"
> -	depends on TOOLCHAINOPTS && USE_GLIBC && EGLIBC_USE_VERSION_2_19
> +	depends on TOOLCHAINOPTS && USE_GLIBC && EGLIBC_USE_VERSION_2_19 && !EXTERNAL_TOOLCHAIN
>  	source toolchain/glibc/config/Config.in
>  endmenu
You can simplify a lot of this by adding this around blocks of
code/includes:

if TOOLCHAINOPTS
...
endif

- Felix
diff mbox

Patch

diff --git a/rules.mk b/rules.mk
index 1e7549f..eb5665d 100644
--- a/rules.mk
+++ b/rules.mk
@@ -89,7 +89,7 @@  ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
   REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))
   GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux
   DIR_SUFFIX:=_$(LIBC)-$(LIBCV)$(if $(CONFIG_arm),_eabi)
-  BIN_DIR:=$(BIN_DIR)$(if $(CONFIG_USE_MUSL),,-$(LIBC))
+  BIN_DIR:=$(BIN_DIR)$(if $(CONFIG_USE_MUSL),$(if $(CONFIG_USE_EXTERNAL_LIBC),-$(LIBC)),-$(LIBC))
   TARGET_DIR_NAME = target-$(ARCH)$(ARCH_SUFFIX)$(DIR_SUFFIX)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
   TOOLCHAIN_DIR_NAME = toolchain-$(ARCH)$(ARCH_SUFFIX)_gcc-$(GCCV)$(DIR_SUFFIX)
 else
diff --git a/toolchain/Config.in b/toolchain/Config.in
index c7072fc..1f6f753 100644
--- a/toolchain/Config.in
+++ b/toolchain/Config.in
@@ -143,6 +143,11 @@  menuconfig TOOLCHAINOPTS
 	bool "Toolchain Options"  if DEVEL
 	depends on NEED_TOOLCHAIN
 
+menuconfig EXTERNAL_TOOLCHAIN_OPTS
+	bool "Define external toolchain options" if DEVEL
+	depends on !NEED_TOOLCHAIN
+
+
 menuconfig EXTRA_TARGET_ARCH
 	bool
 	prompt "Enable an extra toolchain target architecture" if TOOLCHAINOPTS
@@ -178,7 +183,7 @@  menuconfig EXTRA_TARGET_ARCH
 
 
 	choice
-		prompt "MIPS64 user-land ABI" if TOOLCHAINOPTS && (mips64 || mips64el)
+		prompt "MIPS64 user-land ABI" if ( TOOLCHAINOPTS || EXTERNAL_TOOLCHAIN_OPTS ) && (mips64 || mips64el)
 		default MIPS64_ABI_N64
 		help
 		   MIPS64 supports 3 different user-land ABIs: o32 (legacy),
@@ -209,7 +214,7 @@  comment "C Library"
 	depends on TOOLCHAINOPTS
 
 choice
-	prompt "C Library implementation" if TOOLCHAINOPTS
+	prompt "C Library implementation" if ( TOOLCHAINOPTS || EXTERNAL_TOOLCHAIN_OPTS )
 	default LIBC_USE_GLIBC if mips64 || mips64el
 	default LIBC_USE_UCLIBC if arc
 	default LIBC_USE_MUSL
@@ -281,15 +286,15 @@  source "toolchain/musl/Config.version"
 
 config LIBC
 	string
-	default "glibc"   if USE_GLIBC
-	default "uClibc"  if USE_UCLIBC
-	default "musl"	  if USE_MUSL
+	default "glibc"   if ( USE_GLIBC && !EXTERNAL_TOOLCHAIN )
+	default "uClibc"  if ( USE_UCLIBC && !EXTERNAL_TOOLCHAIN )
+	default "musl"	  if ( USE_MUSL && !EXTERNAL_TOOLCHAIN )
 
 config LIBC_VERSION
 	string
-	default GLIBC_VERSION   if USE_GLIBC
-	default UCLIBC_VERSION  if USE_UCLIBC
-	default MUSL_VERSION	if USE_MUSL
+	default GLIBC_VERSION   if ( USE_GLIBC && !EXTERNAL_TOOLCHAIN )
+	default UCLIBC_VERSION  if ( USE_UCLIBC && !EXTERNAL_TOOLCHAIN )
+	default MUSL_VERSION	if ( USE_MUSL && !EXTERNAL_TOOLCHAIN )
 
 config TARGET_SUFFIX
 	string
diff --git a/toolchain/glibc/Config.in b/toolchain/glibc/Config.in
index 66ff2f4..fcda4c9 100644
--- a/toolchain/glibc/Config.in
+++ b/toolchain/glibc/Config.in
@@ -16,6 +16,6 @@  choice
 endchoice
 
 menu "eglibc configuration"
-	depends on TOOLCHAINOPTS && USE_GLIBC && EGLIBC_USE_VERSION_2_19
+	depends on TOOLCHAINOPTS && USE_GLIBC && EGLIBC_USE_VERSION_2_19 && !EXTERNAL_TOOLCHAIN
 	source toolchain/glibc/config/Config.in
 endmenu
diff --git a/toolchain/musl/Config.in b/toolchain/musl/Config.in
index 05caa6a..50cac24 100644
--- a/toolchain/musl/Config.in
+++ b/toolchain/musl/Config.in
@@ -2,5 +2,5 @@ 
 
 config MUSL_ENABLE_DEBUG
 	bool "Build with debug information"
-	depends on TOOLCHAINOPTS && USE_MUSL
+	depends on TOOLCHAINOPTS && USE_MUSL && !EXTERNAL_TOOLCHAIN
 	default n
diff --git a/toolchain/uClibc/Config.in b/toolchain/uClibc/Config.in
index 5793bb7..3bcb003 100644
--- a/toolchain/uClibc/Config.in
+++ b/toolchain/uClibc/Config.in
@@ -2,5 +2,5 @@ 
 
 config UCLIBC_ENABLE_DEBUG
 	bool "Build with debug information"
-	depends on TOOLCHAINOPTS && USE_UCLIBC
+	depends on TOOLCHAINOPTS && USE_UCLIBC && !EXTERNAL_TOOLCHAIN
 	default n