From ec043f103ab41cb647d5ab76872b696c6250f3b2 Mon Sep 17 00:00:00 2001 From: Thomas Petazzoni Date: Wed, 26 Oct 2022 20:34:26 +0200 Subject: [PATCH] toolchain/toolchain-buildroot: introduce BR2_TOOLCHAIN_BUILDROOT_NONE In the internal toolchain backend, we have a choice..endchoice block to allow the user to select the C library, between glibc, uClibc and musl. However, there are situations were no C library at all is supported. In this case, the choice does not appear, and does not allow to see the Config.in comments that are within the choice..endchoice block and that may explain why no C library is available. For example, on RISC-V 32-bit, the only C library supported is glibc, and the minimum kernel header version required by glibc on this architecture is 5.4.0. In a future commit, we are going to add this dependency on glibc (to fix build issues on configurations that have headers < 5.4.0). But since glibc is the only supported C library on RISC-V 32-bit, it means that the choice..endchoice for the C library contains no entry, preventing from seeing the Config.in comment. To address this issue, this commit adds a "dummy" BR2_TOOLCHAIN_BUILDROOT_NONE option that shows up in the choice..endchoice only when no C library is available. Thanks to this, the choice..endchoice is never empty, and the Config.in comments can be seen. If the user keeps BR2_TOOLCHAIN_BUILDROOT_NONE selected, then the build will anyway abort early because package/Makefile.in has a check to verify that a C library is selected, and aborts the build if not. Some could say that the problem should be resolved by instead preventing the selection of headers < 5.4.0 on RISC-V 32-bit, but that is difficult to do as the user can choose a custom header version, or simply specific that (s)he wants to use the headers of the kernel being built. In those situations, it's difficult to prevent selecting headers < 5.4.0. Prevent random configurations from triggering a build failure in our autobuilders, by excluding that symbol from accepted configuration. Signed-off-by: Thomas Petazzoni [yann.morin.1998@free.fr: update genrandconfig] Signed-off-by: Yann E. MORIN (cherry picked from commit e1550ef755c90ccaa63b9d4ed805e1f85f73142f) Signed-off-by: Peter Korsgaard --- toolchain/toolchain-buildroot/Config.in | 12 ++++++++++++ utils/genrandconfig | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/toolchain/toolchain-buildroot/Config.in b/toolchain/toolchain-buildroot/Config.in index 154cf69ef1..daadeac09c 100644 --- a/toolchain/toolchain-buildroot/Config.in +++ b/toolchain/toolchain-buildroot/Config.in @@ -81,6 +81,18 @@ config BR2_TOOLCHAIN_BUILDROOT_MUSL https://www.musl-libc.org/ +config BR2_TOOLCHAIN_BUILDROOT_NONE + bool "none" + depends on !BR2_PACKAGE_UCLIBC_SUPPORTS && \ + !BR2_PACKAGE_GLIBC_SUPPORTS && \ + !BR2_PACKAGE_MUSL_SUPPORTS + help + This option is visible if no C library is available for the + currently selected configuration. If you select this option, + the build will refuse to start as Buildroot needs a C + library to build a toolchain. Change your configuration + settings to make sure one of the C libraries is selected. + endchoice config BR2_TOOLCHAIN_BUILDROOT_LIBC diff --git a/utils/genrandconfig b/utils/genrandconfig index e43452d5b7..257fe7b520 100755 --- a/utils/genrandconfig +++ b/utils/genrandconfig @@ -301,6 +301,10 @@ def fixup_config(sysinfo, configfile): if 'BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_NIOSII=y\n' in configlines and \ 'BR2_PACKAGE_FLANN=y\n' in configlines: return False + # No C library for internal toolchain + if 'BR2_TOOLCHAIN_BUILDROOT_NONE=y' in configlines: + return False + if 'BR2_PACKAGE_AUFS_UTIL=y\n' in configlines and \ 'BR2_PACKAGE_AUFS_UTIL_VERSION=""\n' in configlines: return False