kumquat-buildroot/toolchain/toolchain-buildroot/Config.in

100 lines
3.1 KiB
Plaintext
Raw Normal View History

# Config entries for internal toolchain backend
if BR2_TOOLCHAIN_BUILDROOT
comment "Toolchain Buildroot Options"
config BR2_TOOLCHAIN_BUILDROOT_VENDOR
string "custom toolchain vendor name"
default "buildroot"
help
This option allows to customize the "vendor" part of the
toolchain tuple, where the toolchain tuple has the form
<arch>-<vendor>-<os>-<libc>. The default value, "buildroot",
is fine for most cases, except in very specific situations
where gcc might make different decisions based on the vendor
part of the tuple. The value "unknown" is not allowed, as the
cross-compiling toolchain might then be confused with the
native toolchain when the target and host architecture are
identical. The value can not be empty either.
If you're not sure, just leave the default "buildroot" value.
choice
prompt "C library"
default BR2_TOOLCHAIN_BUILDROOT_UCLIBC
default BR2_TOOLCHAIN_BUILDROOT_GLIBC if BR2_powerpc64
config BR2_TOOLCHAIN_BUILDROOT_UCLIBC
bool "uClibc-ng"
depends on BR2_PACKAGE_UCLIBC_SUPPORTS
select BR2_TOOLCHAIN_USES_UCLIBC
help
This option selects uClibc-ng as the C library for the
cross-compilation toolchain.
http://uclibc-ng.org
config BR2_TOOLCHAIN_BUILDROOT_GLIBC
bool "glibc"
depends on BR2_PACKAGE_GLIBC_SUPPORTS
select BR2_TOOLCHAIN_USES_GLIBC
help
This option selects glibc as the C library for the
cross-compilation toolchain.
http://www.gnu.org/software/libc/
toolchain: invert glibc <-> !static dependency Currently, glibc depends on !BR2_STATIC_LIBS in all the toolchain variants. However, for some architectures, glibc is the only supported libc. In commit 3b3105328e4aa54f3cfecbf8454a9db63875d76e ("Config.in: only allow BR2_STATIC_LIBS on supported libc/arch"), we implemented a fix to avoid configurations were BR2_STATIC_LIBS=y with an architecture already supported by glibc, because these configurations are impossible. This commit 3b3105328e4aa54f3cfecbf8454a9db63875d76e prevents from selecting BR2_STATIC_LIBS=y when the C library used for the internal toolchain backend is glibc. However, it introduces a discrepency between how this topic is handled for internal and external toolchains: - For internal toolchains, we prevent BR2_STATIC_LIBS=y if glibc is chosen. - For external toolchains, we allow BR2_STATIC_LIBS=y in all cases, and it's each glibc toolchain that has !BR2_STATIC_LIBS This commit addresses this discrepency by preventing BR2_STATIC_LIBS=y if glibc is chosen in all cases. Thanks to this, we can remove the !BR2_STATIC_LIBS dependency on both the glibc package, and all glibc external toolchains. Fixes: https://bugs.busybox.net/show_bug.cgi?id=14256 Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> [Thomas: update to master, fix the gen-bootlin-toolchains script, add a comment in the static/shared choice to indicate that static is supported only with uclibc or musl] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2021-10-06 22:41:32 +02:00
comment "glibc needs a toolchain w/ kernel headers >= 3.2"
depends on BR2_PACKAGE_GLIBC_ARCH_SUPPORTS
toolchain: invert glibc <-> !static dependency Currently, glibc depends on !BR2_STATIC_LIBS in all the toolchain variants. However, for some architectures, glibc is the only supported libc. In commit 3b3105328e4aa54f3cfecbf8454a9db63875d76e ("Config.in: only allow BR2_STATIC_LIBS on supported libc/arch"), we implemented a fix to avoid configurations were BR2_STATIC_LIBS=y with an architecture already supported by glibc, because these configurations are impossible. This commit 3b3105328e4aa54f3cfecbf8454a9db63875d76e prevents from selecting BR2_STATIC_LIBS=y when the C library used for the internal toolchain backend is glibc. However, it introduces a discrepency between how this topic is handled for internal and external toolchains: - For internal toolchains, we prevent BR2_STATIC_LIBS=y if glibc is chosen. - For external toolchains, we allow BR2_STATIC_LIBS=y in all cases, and it's each glibc toolchain that has !BR2_STATIC_LIBS This commit addresses this discrepency by preventing BR2_STATIC_LIBS=y if glibc is chosen in all cases. Thanks to this, we can remove the !BR2_STATIC_LIBS dependency on both the glibc package, and all glibc external toolchains. Fixes: https://bugs.busybox.net/show_bug.cgi?id=14256 Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> [Thomas: update to master, fix the gen-bootlin-toolchains script, add a comment in the static/shared choice to indicate that static is supported only with uclibc or musl] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2021-10-06 22:41:32 +02:00
depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
# glibc >= 2.26 require kernel headers >= 3.10 on powerpc64le.
comment "glibc on powerpc64le needs a toolchain w/ headers >= 3.10"
depends on BR2_powerpc64le
depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
# Support for MIPS NAN2008 needs headers >= 4.5
comment "glibc on MIPS w/ NAN2008 needs a toolchain w/ headers >= 4.5"
depends on BR2_MIPS_NAN_2008
depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5
comment "glibc on RISC-V 64-bit needs a toolchain w/ headers >= 5.0"
depends on BR2_RISCV_64
depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0
comment "glibc on ARC needs a toolchain w/ headers >= 5.1"
depends on BR2_arc
depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_1
comment "glibc on or1k needs a toolchain w/ headers >= 5.4"
depends on BR2_or1k
depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_4
config BR2_TOOLCHAIN_BUILDROOT_MUSL
bool "musl"
depends on BR2_PACKAGE_MUSL_SUPPORTS
select BR2_TOOLCHAIN_USES_MUSL
help
This option selects musl as the C library for the
cross-compilation toolchain.
https://www.musl-libc.org/
endchoice
config BR2_TOOLCHAIN_BUILDROOT_LIBC
string
default "uclibc" if BR2_TOOLCHAIN_BUILDROOT_UCLIBC
default "glibc" if BR2_TOOLCHAIN_BUILDROOT_GLIBC
default "musl" if BR2_TOOLCHAIN_BUILDROOT_MUSL
source "package/linux-headers/Config.in.host"
source "package/linux-headers/Config.in"
toolchain: also source the musl package We do source the glibc and uClibc packages in the toolchain menu, because they do provide user-visible options. However, we do not so far source the musl Config.in file However, in 822be87 (toolchain: include C libraries in legal-info), a Config.in file for musl was explicitly created, so that: - legal-info would work (needed at the time, probably no longer needed nowadays), - the appropriate packages are enabled, like netbsd-queue or kernel headers. Yet, we do not source musl/Config.in, which means we do not get netbsd-queue or kernel-headers to be selected: $ make distclean; make menuconfig Toolchain ---> C library ---> musl save-and-exit $ grep BR2_PACKAGE_LINUX_HEADERS .config [nothing] $ grep BR2_PACKAGE_NETBSD_QUEUE .config [nothing] Fix that by sourcing musl/Config.in at the same place we source glibc and uClibc. Normally, we do have a check in place that verifies that a package that is not enabled is not a dependency of another package that is enabled. However, musl is only a dependency of host-gcc-final, which is a host package and has no corresponding BR2_PACKAGE_HOST_GCC_FINAL. Thus host-gcc-final is not in the PACKAGES variable, and thus does not trigger our check. Reported-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Cc: Vicente Olivert Riera <Vincent.Riera@imgtec.com> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2016-03-08 21:02:22 +01:00
source "package/musl/Config.in"
source "package/uclibc/Config.in"
source "package/glibc/Config.in"
source "package/binutils/Config.in.host"
source "package/gcc/Config.in.host"
endif