]> code.ossystems Code Review - openembedded-core.git/commitdiff
gcc: Drop stdlib++ option patch
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 3 Dec 2021 23:34:57 +0000 (23:34 +0000)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 3 Feb 2022 09:05:17 +0000 (09:05 +0000)
The patch to gcc to disable use of libstdc++ when configuring the library
during gcc-runtime is old and there are perhaps better ways to do this now.

If removed, most builds still "work" but incorrect values for things like
atomic ops are found during configure. mips64 and ppc fail with on target
simple tests of g++ in testimage.

Instead we can create a dummy libstdc++ which allows the correct configure
test results to be obtained.

Discussed with upstream about the patch are ongoing, if accepted, we can
switch back to the commandline option if it is added in future.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-devtools/gcc/gcc-11.2.inc
meta/recipes-devtools/gcc/gcc-runtime.inc
meta/recipes-devtools/gcc/gcc/0005-optional-libstdc.patch [deleted file]

index f07a5be507b3773b4b858e986e66716093aadd49..a62f272d3ceec2d471aaa28398a837319b3fb4a2 100644 (file)
@@ -33,7 +33,6 @@ SRC_URI = "\
            file://0001-gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch \
            file://0002-gcc-poison-system-directories.patch \
            file://0004-64-bit-multilib-hack.patch \
-           file://0005-optional-libstdc.patch \
            file://0007-Use-the-defaults.h-in-B-instead-of-S-and-t-oe-in-B.patch \
            file://0009-cpp-honor-sysroot.patch \
            file://0011-Define-GLIBC_DYNAMIC_LINKER-and-UCLIBC_DYNAMIC_LINKE.patch \
index 4839a6687afd2989f94d3e62a67e69973f899d38..c39a0caf8a74738aead91fc0fc07ec7f8141ed01 100644 (file)
@@ -64,7 +64,11 @@ DEBUG_PREFIX_MAP:class-target = " \
    "
 
 do_configure () {
-       export CXX="${CXX} -nostdinc++ -nostdlib++"
+       export CXX="${CXX} -nostdinc++ -L${WORKDIR}/dummylib"
+       # libstdc++ isn't built yet so CXX would error not able to find it which breaks stdc++'s configure
+       # tests. Create a dummy empty lib for the purposes of configure.
+       mkdir -p ${WORKDIR}/dummylib
+       touch ${WORKDIR}/dummylib/libstdc++.so
        for d in libgcc ${RUNTIMETARGET}; do
                echo "Configuring $d"
                rm -rf ${B}/${TARGET_SYS}/$d/
@@ -302,7 +306,7 @@ do_check() {
     export DEJAGNU="${WORKDIR}/dejagnu/site.exp"
 
     # HACK: this works around the configure setting CXX with -nostd* args
-    sed -i 's/-nostdinc++ -nostdlib++//g' $(find ${B} -name testsuite_flags | head -1)
+    sed -i 's#-nostdinc++ -L${WORKDIR}/dummylib##g' $(find ${B} -name testsuite_flags | head -1)
 
     if [ "${TOOLCHAIN_TEST_TARGET}" = "user" ]; then
         # qemu user has issues allocating large amounts of memory
diff --git a/meta/recipes-devtools/gcc/gcc/0005-optional-libstdc.patch b/meta/recipes-devtools/gcc/gcc/0005-optional-libstdc.patch
deleted file mode 100644 (file)
index b856c5d..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-From: Richard Purdie <richard.purdie@linuxfoundation.org>
-Subject: [PATCH 3/5] gcc: Add --nostdlib++ option
-
-[gcc-runtime builds libstdc++ separately from gcc-cross-*. Its configure tests using g++
-will not run correctly since by default the linker will try to link against libstdc++
-which shouldn't exist yet. We need an option to disable -lstdc++
-option whilst leaving -lc, -lgcc and other automatic library dependencies added by gcc
-driver. This patch adds such an option which only disables the -lstdc++.]
-
-[A "standard" gcc build uses xgcc and hence avoids this. We should ask upstream how to
-do this officially, the likely answer is don't build libstdc++ separately.]
-
-OpenEmbedded/Yocto Project builds libgcc and the other gcc runtime libraries
-separately from the compiler and slightly differently to the standard gcc build.
-
-In general this works well but in trying to build them separately we run into
-an issue since we're using our gcc, not xgcc and there is no way to tell configure
-to use libgcc but not look for libstdc++.
-
-This adds such an option allowing such configurations to work.
-
-2021-10-26 Richard Purdie <richard.purdie@linuxfoundation.org>
-
-gcc/c-family/ChangeLog:
-
-    * c.opt: Add --nostdlib++ option
-
-gcc/cp/ChangeLog:
-
-    * g++spec.c (lang_specific_driver): Add --nostdlib++ option
-
-gcc/ChangeLog:
-
-    * doc/invoke.texi: Document --nostdlib++ option
-    * gcc.c: Add --nostdlib++ option
-
-Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-
-Upstream-Status: Submitted [https://gcc.gnu.org/pipermail/gcc-patches/2021-October/582724.html]
----
- gcc/c-family/c.opt  | 4 ++++
- gcc/cp/g++spec.c    | 1 +
- gcc/doc/invoke.texi | 8 +++++++-
- gcc/gcc.c           | 1 +
- 4 files changed, 13 insertions(+), 1 deletion(-)
-
-Index: gcc-11.2.0/gcc/c-family/c.opt
-===================================================================
---- gcc-11.2.0.orig/gcc/c-family/c.opt
-+++ gcc-11.2.0/gcc/c-family/c.opt
-@@ -2153,6 +2153,10 @@ nostdinc++
- C++ ObjC++
- Do not search standard system include directories for C++.
-+nostdlib++
-+Driver
-+Do not link standard C++ runtime library
-+
- o
- C ObjC C++ ObjC++ Joined Separate
- ; Documented in common.opt
-Index: gcc-11.2.0/gcc/cp/g++spec.c
-===================================================================
---- gcc-11.2.0.orig/gcc/cp/g++spec.c
-+++ gcc-11.2.0/gcc/cp/g++spec.c
-@@ -159,6 +159,7 @@ lang_specific_driver (struct cl_decoded_
-       switch (decoded_options[i].opt_index)
-       {
-       case OPT_nostdlib:
-+      case OPT_nostdlib__:
-       case OPT_nodefaultlibs:
-         library = -1;
-         break;
-Index: gcc-11.2.0/gcc/doc/invoke.texi
-===================================================================
---- gcc-11.2.0.orig/gcc/doc/invoke.texi
-+++ gcc-11.2.0/gcc/doc/invoke.texi
-@@ -239,6 +239,7 @@ in the following sections.
- -fno-weak  -nostdinc++ @gol
- -fvisibility-inlines-hidden @gol
- -fvisibility-ms-compat @gol
-+-nostdlib++ @gol
- -fext-numeric-literals @gol
- -flang-info-include-translate@r{[}=@var{header}@r{]} @gol
- -flang-info-include-translate-not @gol
-@@ -632,7 +633,7 @@ Objective-C and Objective-C++ Dialects}.
- -pie  -pthread  -r  -rdynamic @gol
- -s  -static  -static-pie  -static-libgcc  -static-libstdc++ @gol
- -static-libasan  -static-libtsan  -static-liblsan  -static-libubsan @gol
---shared  -shared-libgcc  -symbolic @gol
-+-shared  -shared-libgcc  -symbolic -nostdlib++ @gol
- -T @var{script}  -Wl,@var{option}  -Xlinker @var{option} @gol
- -u @var{symbol}  -z @var{keyword}}
-@@ -15721,6 +15722,11 @@ Specify that the program entry point is
- interpreted by the linker; the GNU linker accepts either a symbol name
- or an address.
-+@item -nostdlib++
-+@opindex nostdlib++
-+Do not use the standard system C++ runtime libraries when linking.
-+Only the libraries you specify will be passed to the linker.
-+
- @item -pie
- @opindex pie
- Produce a dynamically linked position independent executable on targets
-Index: gcc-11.2.0/gcc/gcc.c
-===================================================================
---- gcc-11.2.0.orig/gcc/gcc.c
-+++ gcc-11.2.0/gcc/gcc.c
-@@ -1162,6 +1162,7 @@ proper position among the other output f
-     %(mflib) " STACK_SPLIT_SPEC "\
-     %{fprofile-arcs|fprofile-generate*|coverage:-lgcov} " SANITIZER_SPEC " \
-     %{!nostdlib:%{!r:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}}\
-+    %{!nostdlib++:}\
-     %{!nostdlib:%{!r:%{!nostartfiles:%E}}} %{T*}  \n%(post_link) }}}}}}"
- #endif