[Buildroot] [RFC, PATCH] toolchain: separate c++ compiler from libstdc++ presence
Yann E. MORIN
yann.morin.1998 at free.fr
Tue Jul 29 22:45:13 UTC 2014
Jeremy,All,
On 2014-07-03 11:57 +0800, Jeremy Kerr spake thusly:
> We may want a c++ compiler, but no libstdc++ on the system. For example,
> firmware that isn't linked with the system libstdc++. These packages can
> depend on BR2_CPP instead of BR2_INSTALL_LIBSTDCPP.
We've discussed this at length with Thoms P., and we came to the
following conclusions.
First, there are two cases: internal toolchains, and external toolchains.
Your patch only addresses the case for internal toolchains.
For internal toolchains, we consider this is better served by using a
post-build script that will remove the unneeded libs. It's much easier
to write than this non-trivial patch.
For external toolchains, the same script can be used in the state, too.
However, this has prompted the case for how we handle C++ detection in
the external toolchains. Currently, the selection in the menuconfig must
match exactly whether the toolchain has or does not have C++.
We pondered whether to change the check to require g++ if the user
answered 'Y' to "toolchain has c++", but do no check if the user
answered "N" to that question (currently the check is to test for g++ to
be missing.)
This does not solve your issue at hand, but we do believe the easiest
way is to just use a post-build script to remove the libstdc++.
Therefore, I've marked your patch as Rejected in the Patchwork. Should
you have a strong case for this patch, please do not hesitate to discuss
this resolution, we can always re-open the patch later.
Regards,
Yann E. MORIN.
> Signed-off-by: Jeremy Kerr <jk at ozlabs.org>
>
> ---
> package/Makefile.in | 2 +-
> package/gcc/Config.in.host | 14 +++++++++++---
> package/gcc/gcc-final/gcc-final.mk | 2 +-
> toolchain/toolchain-common.in | 4 ++++
> 4 files changed, 17 insertions(+), 5 deletions(-)
>
> diff --git a/package/Makefile.in b/package/Makefile.in
> index 0233506..e8de29f 100644
> --- a/package/Makefile.in
> +++ b/package/Makefile.in
> @@ -361,7 +361,7 @@ else
> DISABLE_IPV6= --disable-ipv6
> endif
>
> -ifneq ($(BR2_INSTALL_LIBSTDCPP),y)
> +ifneq ($(BR2_CPP),y)
> TARGET_CONFIGURE_OPTS+=CXX=false
> endif
>
> diff --git a/package/gcc/Config.in.host b/package/gcc/Config.in.host
> index fde1b90..693ff5f 100644
> --- a/package/gcc/Config.in.host
> +++ b/package/gcc/Config.in.host
> @@ -126,13 +126,21 @@ config BR2_EXTRA_GCC_CONFIG_OPTIONS
> initial, gcc intermediate and gcc final passes.
>
> config BR2_TOOLCHAIN_BUILDROOT_CXX
> - bool "Enable C++ support"
> - select BR2_INSTALL_LIBSTDCPP
> + bool "Enable C++ compiler support"
> + select BR2_CPP
> depends on !(BR2_GCC_VERSION_4_2_2_AVR32_2_1_5 && \
> BR2_TOOLCHAIN_BUILDROOT_LOCALE)
> help
> Enable this option if you want your toolchain to support the
> - C++ language and you want C++ libraries to be installed on
> + C++ language.
> +
> +config BR2_TOOLCHAIN_BUILDROOT_LIBSTDCPP
> + bool "Install C++ libraries"
> + default y
> + select BR2_INSTALL_LIBSTDCPP
> + depends on BR2_TOOLCHAIN_BUILDROOT_CXX
> + help
> + Enable this option if you want C++ libraries to be installed on
> your target system.
>
> comment "C++ support broken in uClibc with locale enabled with gcc 4.2"
> diff --git a/package/gcc/gcc-final/gcc-final.mk b/package/gcc/gcc-final/gcc-final.mk
> index 622dcf2..d277064 100644
> --- a/package/gcc/gcc-final/gcc-final.mk
> +++ b/package/gcc/gcc-final/gcc-final.mk
> @@ -43,7 +43,7 @@ endef
>
> # Languages supported by the cross-compiler
> GCC_FINAL_CROSS_LANGUAGES-y = c
> -GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_LIBSTDCPP) += c++
> +GCC_FINAL_CROSS_LANGUAGES-$(BR2_CPP) += c++
> GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_FORTRAN) += fortran
> GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_OBJC) += objc
> GCC_FINAL_CROSS_LANGUAGES = $(subst $(space),$(comma),$(GCC_FINAL_CROSS_LANGUAGES-y))
> diff --git a/toolchain/toolchain-common.in b/toolchain/toolchain-common.in
> index a91d247..24edce3 100644
> --- a/toolchain/toolchain-common.in
> +++ b/toolchain/toolchain-common.in
> @@ -26,8 +26,12 @@ config BR2_USE_WCHAR
> config BR2_ENABLE_LOCALE
> bool
>
> +config BR2_CPP
> + bool
> +
> config BR2_INSTALL_LIBSTDCPP
> bool
> + select BR2_CPP
>
> config BR2_TOOLCHAIN_HAS_THREADS
> bool
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
More information about the buildroot
mailing list