From: Richard Purdie 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 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 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