diff mbox

[LEDE-DEV] toolchain: Rework external toolchain libc selection

Message ID 20160902215758.26397-1-f.fainelli@gmail.com
State Changes Requested
Headers show

Commit Message

Florian Fainelli Sept. 2, 2016, 9:57 p.m. UTC
Make it a choice menu which offers the 3 C libraries we know about: glibc,
uClibc and musl. While at it, make it possible for the external toolchain libc
to select USE_GLIBC, USE_UCLIBC or USE_MUSL which is used by several packages
to conditionally include specific CFLAGS (e.g: iproute2).

Because USE_GLIBC et al. can now be selected by external toolchains, we need to
restrict the per-libc menus to check on !EXTERNAL_TOOLCHAIN.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
 toolchain/Config.in        | 22 +++++++++++++++++++---
 toolchain/glibc/Config.in  |  2 +-
 toolchain/uClibc/Config.in |  2 +-
 3 files changed, 21 insertions(+), 5 deletions(-)

Comments

Felix Fietkau Sept. 3, 2016, 11:54 a.m. UTC | #1
On 2016-09-02 23:57, Florian Fainelli wrote:
> Make it a choice menu which offers the 3 C libraries we know about: glibc,
> uClibc and musl. While at it, make it possible for the external toolchain libc
> to select USE_GLIBC, USE_UCLIBC or USE_MUSL which is used by several packages
> to conditionally include specific CFLAGS (e.g: iproute2).
> 
> Because USE_GLIBC et al. can now be selected by external toolchains, we need to
> restrict the per-libc menus to check on !EXTERNAL_TOOLCHAIN.
> 
> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
> ---
>  toolchain/Config.in        | 22 +++++++++++++++++++---
>  toolchain/glibc/Config.in  |  2 +-
>  toolchain/uClibc/Config.in |  2 +-
>  3 files changed, 21 insertions(+), 5 deletions(-)
> 
> diff --git a/toolchain/Config.in b/toolchain/Config.in
> index 75dc5361a682..8bb2d9be51e2 100644
> --- a/toolchain/Config.in
> +++ b/toolchain/Config.in
> @@ -96,17 +96,33 @@ menuconfig EXTERNAL_TOOLCHAIN
>  		default "/opt/cross/powerpc-unknown-linux-gnu"  if powerpc
>  		default "/opt/cross/x86_64-unknown-linux-gnu"   if x86_64
>  
> -	config TOOLCHAIN_LIBC
> -		string
> +	choice TOOLCHAIN_LIBC
>  		prompt "Toolchain libc"  if DEVEL
>  		depends on EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
> -		default "uclibc"
> +		default EXTERNAL_TOOLCHAIN_LIBC_USE_UCLIBC
>  		help
>  		  Specify the libc type used by the external toolchain. The given value
>  		  is passed as -m flag to all gcc and g++ invocations. This is mainly
>  		  intended for multilib toolchains which support glibc and uclibc at
>  		  the same time. If no value is specified, no -m flag is passed.
>  
> +		config EXTERNAL_TOOLCHAIN_LIBC_USE_GLIBC
> +			bool "glibc"
> +			select USE_GLIBC
> +
> +		config EXTERNAL_TOOLCHAIN_LIBC_USE_UCLIBC
> +			bool "uClibc"
> +			select USE_UCLIBC
> +			depends on !(aarch64 || aarch64_be)
> +
> +		config EXTERNAL_TOOLCHAIN_LIBC_USE_MUSL
> +			bool "musl"
> +			select USE_MUSL
> +			depends on BROKEN
Why mark musl as broken? And what about the uclibc vs uClibc difference?
And while you're changing the code, I think it's time to make musl the
default, since it's been the default for the built-in toolchain for a
long time now.

- Felix
Florian Fainelli Sept. 6, 2016, 5:11 p.m. UTC | #2
On 09/03/2016 04:54 AM, Felix Fietkau wrote:
> On 2016-09-02 23:57, Florian Fainelli wrote:
>> Make it a choice menu which offers the 3 C libraries we know about: glibc,
>> uClibc and musl. While at it, make it possible for the external toolchain libc
>> to select USE_GLIBC, USE_UCLIBC or USE_MUSL which is used by several packages
>> to conditionally include specific CFLAGS (e.g: iproute2).
>>
>> Because USE_GLIBC et al. can now be selected by external toolchains, we need to
>> restrict the per-libc menus to check on !EXTERNAL_TOOLCHAIN.
>>
>> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
>> ---
>>  toolchain/Config.in        | 22 +++++++++++++++++++---
>>  toolchain/glibc/Config.in  |  2 +-
>>  toolchain/uClibc/Config.in |  2 +-
>>  3 files changed, 21 insertions(+), 5 deletions(-)
>>
>> diff --git a/toolchain/Config.in b/toolchain/Config.in
>> index 75dc5361a682..8bb2d9be51e2 100644
>> --- a/toolchain/Config.in
>> +++ b/toolchain/Config.in
>> @@ -96,17 +96,33 @@ menuconfig EXTERNAL_TOOLCHAIN
>>  		default "/opt/cross/powerpc-unknown-linux-gnu"  if powerpc
>>  		default "/opt/cross/x86_64-unknown-linux-gnu"   if x86_64
>>  
>> -	config TOOLCHAIN_LIBC
>> -		string
>> +	choice TOOLCHAIN_LIBC
>>  		prompt "Toolchain libc"  if DEVEL
>>  		depends on EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
>> -		default "uclibc"
>> +		default EXTERNAL_TOOLCHAIN_LIBC_USE_UCLIBC
>>  		help
>>  		  Specify the libc type used by the external toolchain. The given value
>>  		  is passed as -m flag to all gcc and g++ invocations. This is mainly
>>  		  intended for multilib toolchains which support glibc and uclibc at
>>  		  the same time. If no value is specified, no -m flag is passed.
>>  
>> +		config EXTERNAL_TOOLCHAIN_LIBC_USE_GLIBC
>> +			bool "glibc"
>> +			select USE_GLIBC
>> +
>> +		config EXTERNAL_TOOLCHAIN_LIBC_USE_UCLIBC
>> +			bool "uClibc"
>> +			select USE_UCLIBC
>> +			depends on !(aarch64 || aarch64_be)
>> +
>> +		config EXTERNAL_TOOLCHAIN_LIBC_USE_MUSL
>> +			bool "musl"
>> +			select USE_MUSL
>> +			depends on BROKEN
> Why mark musl as broken?

No particular reason I guess.

> And what about the uclibc vs uClibc difference?

That is to be consistent with the rest of the file where the C is
capitalized.

> And while you're changing the code, I think it's time to make musl the
> default, since it's been the default for the built-in toolchain for a
> long time now.

Sure, that makes sense.

Thanks!
diff mbox

Patch

diff --git a/toolchain/Config.in b/toolchain/Config.in
index 75dc5361a682..8bb2d9be51e2 100644
--- a/toolchain/Config.in
+++ b/toolchain/Config.in
@@ -96,17 +96,33 @@  menuconfig EXTERNAL_TOOLCHAIN
 		default "/opt/cross/powerpc-unknown-linux-gnu"  if powerpc
 		default "/opt/cross/x86_64-unknown-linux-gnu"   if x86_64
 
-	config TOOLCHAIN_LIBC
-		string
+	choice TOOLCHAIN_LIBC
 		prompt "Toolchain libc"  if DEVEL
 		depends on EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
-		default "uclibc"
+		default EXTERNAL_TOOLCHAIN_LIBC_USE_UCLIBC
 		help
 		  Specify the libc type used by the external toolchain. The given value
 		  is passed as -m flag to all gcc and g++ invocations. This is mainly
 		  intended for multilib toolchains which support glibc and uclibc at
 		  the same time. If no value is specified, no -m flag is passed.
 
+		config EXTERNAL_TOOLCHAIN_LIBC_USE_GLIBC
+			bool "glibc"
+			select USE_GLIBC
+
+		config EXTERNAL_TOOLCHAIN_LIBC_USE_UCLIBC
+			bool "uClibc"
+			select USE_UCLIBC
+			depends on !(aarch64 || aarch64_be)
+
+		config EXTERNAL_TOOLCHAIN_LIBC_USE_MUSL
+			bool "musl"
+			select USE_MUSL
+			depends on BROKEN
+			depends on !(mips64 || mips64el)
+
+	endchoice
+
 	config TOOLCHAIN_BIN_PATH
 		string
 		prompt "Toolchain program path"  if DEVEL
diff --git a/toolchain/glibc/Config.in b/toolchain/glibc/Config.in
index 036604f4a7c0..5adbeb6f8245 100644
--- a/toolchain/glibc/Config.in
+++ b/toolchain/glibc/Config.in
@@ -1,6 +1,6 @@ 
 choice
 	prompt "glibc version"
-	depends on TOOLCHAINOPTS && USE_GLIBC
+	depends on TOOLCHAINOPTS && USE_GLIBC && !EXTERNAL_TOOLCHAIN
 	default GLIBC_USE_VERSION_2_24
 	help
 	  Select the version of glibc you wish to use.
diff --git a/toolchain/uClibc/Config.in b/toolchain/uClibc/Config.in
index 5793bb779f5c..3bcb0037e9f6 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