Message ID | 20240525122641.3154365-2-hjl.tools@gmail.com |
---|---|
State | New |
Headers | show |
Series | Opt-out static C++ link check and tests | expand |
On 5/25/24 8:26 AM, H.J. Lu wrote: > The current minimum GCC version of glibc build is GCC 6.2 or newer. But > building i686 glibc with GCC 6.4 on Fedora 40 failed since the C++ header > files couldn't be found which was caused by the static C++ link check > failure due to missing __divmoddi4 which was referenced in i686 libc.a > and added to GCC 7. Add --disable-static-c++-link-check configure option > to disable the static C++ link test. The newly built i686 libc.a can be > used by GCC 6.4 to create static C++ tests. This fixes BZ #31412. OK with the suggested text changes. You may keep my RB if you make the suggested textual changes. Reviewed-by: Carlos O'Donell <carlos@redhat.com> > Signed-off-by: H.J. Lu <hjl.tools@gmail.com> > --- > INSTALL | 8 ++++++++ > configure | 24 +++++++++++++++++++----- > configure.ac | 22 +++++++++++++++------- > manual/install.texi | 8 ++++++++ > 4 files changed, 50 insertions(+), 12 deletions(-) > > diff --git a/INSTALL b/INSTALL > index c8c524527b..d8b06f20aa 100644 > --- a/INSTALL > +++ b/INSTALL > @@ -224,6 +224,14 @@ if 'CFLAGS' is specified it must enable optimization. For example: > By default for x86_64, the GNU C Library is built with the vector > math library. Use this option to disable the vector math library. > > +'--disable-static-c++-link-check' > + By default, if the C++ toolchain doesn't not support static > + linking, configure couldn't find the C++ header files and the glibc > + build fails. Use this option to disable the static C++ link check > + so that the C++ header files can be located. The newly built > + libc.a can be used to create static C++ tests if the C++ toolchain > + has necessary static C++ libraries. > + > '--disable-scv' > Disable using 'scv' instruction for syscalls. All syscalls will > use 'sc' instead, even if the kernel supports 'scv'. PowerPC only. > diff --git a/configure b/configure > index 432e40a592..31205ce568 100755 > --- a/configure > +++ b/configure > @@ -778,6 +778,7 @@ ac_user_opts=' > enable_option_checking > with_pkgversion > with_bugurl > +enable_static_c___link_check > with_gd > with_gd_include > with_gd_lib > @@ -1447,6 +1448,8 @@ Optional Features: > --disable-option-checking ignore unrecognized --enable/--with options > --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) > --enable-FEATURE[=ARG] include FEATURE [ARG=yes] > + --disable-static-c++-link-check > + disable static C++ link check [default=no] > --disable-sanity-checks really do not use threads (should not be used except > in special situations) [default=yes] > --enable-shared build shared library [default=yes if GNU ld] > @@ -3810,6 +3813,15 @@ if test -z "$CPP"; then > fi > > > +# Check whether --enable-static-c++-link-check was given. > +if test ${enable_static_c___link_check+y} > +then : > + enableval=$enable_static_c___link_check; static_cxx_link_check=$enableval > +else $as_nop > + static_cxx_link_check=yes > +fi > + > + > # We need the C++ compiler only for testing. > > > @@ -4220,10 +4232,11 @@ else $as_nop > fi > rm -f core conftest.err conftest.$ac_objext conftest.beam \ > conftest$ac_exeext conftest.$ac_ext > -# Static case. > -old_LDFLAGS="$LDFLAGS" > -LDFLAGS="$LDFLAGS -static" > -cat confdefs.h - <<_ACEOF >conftest.$ac_ext > +if test $static_cxx_link_check = yes; then > + # Static case. > + old_LDFLAGS="$LDFLAGS" > + LDFLAGS="$LDFLAGS -static" > + cat confdefs.h - <<_ACEOF >conftest.$ac_ext > /* end confdefs.h. */ > > #include <iostream> > @@ -4244,7 +4257,8 @@ else $as_nop > fi > rm -f core conftest.err conftest.$ac_objext conftest.beam \ > conftest$ac_exeext conftest.$ac_ext > -LDFLAGS="$old_LDFLAGS" > + LDFLAGS="$old_LDFLAGS" > +fi > ac_ext=c > ac_cpp='$CPP $CPPFLAGS' > ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' > diff --git a/configure.ac b/configure.ac > index bdc385d03c..ee64d49b03 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -52,6 +52,12 @@ fi > AC_SUBST(cross_compiling) > AC_PROG_CPP > > +AC_ARG_ENABLE([static-c++-link-check], > + AS_HELP_STRING([--disable-static-c++-link-check], > + [disable static C++ link check @<:@default=no@:>@]), > + [static_cxx_link_check=$enableval], > + [static_cxx_link_check=yes]) > + > # We need the C++ compiler only for testing. > AC_PROG_CXX > # It's useless to us if it can't link programs (e.g. missing -lstdc++). > @@ -61,10 +67,11 @@ AC_LANG_PUSH([C++]) > AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], > [libc_cv_cxx_link_ok=yes], > [libc_cv_cxx_link_ok=no]) > -# Static case. > -old_LDFLAGS="$LDFLAGS" > -LDFLAGS="$LDFLAGS -static" > -AC_LINK_IFELSE([AC_LANG_SOURCE([ > +if test $static_cxx_link_check = yes; then > + # Static case. > + old_LDFLAGS="$LDFLAGS" > + LDFLAGS="$LDFLAGS -static" > + AC_LINK_IFELSE([AC_LANG_SOURCE([ > #include <iostream> > > int > @@ -74,9 +81,10 @@ main() > return 0; > } > ])], > - [], > - [libc_cv_cxx_link_ok=no]) > -LDFLAGS="$old_LDFLAGS" > + [], > + [libc_cv_cxx_link_ok=no]) > + LDFLAGS="$old_LDFLAGS" > +fi > AC_LANG_POP([C++])]) > AS_IF([test $libc_cv_cxx_link_ok != yes], [CXX=]) > > diff --git a/manual/install.texi b/manual/install.texi > index 7c44594617..ac3728c301 100644 > --- a/manual/install.texi > +++ b/manual/install.texi > @@ -252,6 +252,14 @@ configure with @option{--disable-werror}. > By default for x86_64, @theglibc{} is built with the vector math library. > Use this option to disable the vector math library. > > +@item --disable-static-c++-link-check > +By default, if the C++ toolchain doesn't not support static linking, > +configure couldn't find the C++ header files and the glibc build fails. > +Use this option to disable the static C++ link check so that the C++ > +header files can be located. The newly built libc.a can be used to > +create static C++ tests if the C++ toolchain has necessary static C++ > +libraries. Suggest: By default, if the C++ toolchain lacks support for static linking, configure fails to find the C++ header files and the glibc build fails. Use this option to disable the static C++ link check so that the C++ header files can be located. The newly built libc.a can be used to create static C++ tests if the C++ toolchain has the necessary static C++ libraries. > + > @item --disable-scv > Disable using @code{scv} instruction for syscalls. All syscalls will use > @code{sc} instead, even if the kernel supports @code{scv}. PowerPC only.
diff --git a/INSTALL b/INSTALL index c8c524527b..d8b06f20aa 100644 --- a/INSTALL +++ b/INSTALL @@ -224,6 +224,14 @@ if 'CFLAGS' is specified it must enable optimization. For example: By default for x86_64, the GNU C Library is built with the vector math library. Use this option to disable the vector math library. +'--disable-static-c++-link-check' + By default, if the C++ toolchain doesn't not support static + linking, configure couldn't find the C++ header files and the glibc + build fails. Use this option to disable the static C++ link check + so that the C++ header files can be located. The newly built + libc.a can be used to create static C++ tests if the C++ toolchain + has necessary static C++ libraries. + '--disable-scv' Disable using 'scv' instruction for syscalls. All syscalls will use 'sc' instead, even if the kernel supports 'scv'. PowerPC only. diff --git a/configure b/configure index 432e40a592..31205ce568 100755 --- a/configure +++ b/configure @@ -778,6 +778,7 @@ ac_user_opts=' enable_option_checking with_pkgversion with_bugurl +enable_static_c___link_check with_gd with_gd_include with_gd_lib @@ -1447,6 +1448,8 @@ Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-static-c++-link-check + disable static C++ link check [default=no] --disable-sanity-checks really do not use threads (should not be used except in special situations) [default=yes] --enable-shared build shared library [default=yes if GNU ld] @@ -3810,6 +3813,15 @@ if test -z "$CPP"; then fi +# Check whether --enable-static-c++-link-check was given. +if test ${enable_static_c___link_check+y} +then : + enableval=$enable_static_c___link_check; static_cxx_link_check=$enableval +else $as_nop + static_cxx_link_check=yes +fi + + # We need the C++ compiler only for testing. @@ -4220,10 +4232,11 @@ else $as_nop fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -# Static case. -old_LDFLAGS="$LDFLAGS" -LDFLAGS="$LDFLAGS -static" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +if test $static_cxx_link_check = yes; then + # Static case. + old_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -static" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <iostream> @@ -4244,7 +4257,8 @@ else $as_nop fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LDFLAGS="$old_LDFLAGS" + LDFLAGS="$old_LDFLAGS" +fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' diff --git a/configure.ac b/configure.ac index bdc385d03c..ee64d49b03 100644 --- a/configure.ac +++ b/configure.ac @@ -52,6 +52,12 @@ fi AC_SUBST(cross_compiling) AC_PROG_CPP +AC_ARG_ENABLE([static-c++-link-check], + AS_HELP_STRING([--disable-static-c++-link-check], + [disable static C++ link check @<:@default=no@:>@]), + [static_cxx_link_check=$enableval], + [static_cxx_link_check=yes]) + # We need the C++ compiler only for testing. AC_PROG_CXX # It's useless to us if it can't link programs (e.g. missing -lstdc++). @@ -61,10 +67,11 @@ AC_LANG_PUSH([C++]) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [libc_cv_cxx_link_ok=yes], [libc_cv_cxx_link_ok=no]) -# Static case. -old_LDFLAGS="$LDFLAGS" -LDFLAGS="$LDFLAGS -static" -AC_LINK_IFELSE([AC_LANG_SOURCE([ +if test $static_cxx_link_check = yes; then + # Static case. + old_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -static" + AC_LINK_IFELSE([AC_LANG_SOURCE([ #include <iostream> int @@ -74,9 +81,10 @@ main() return 0; } ])], - [], - [libc_cv_cxx_link_ok=no]) -LDFLAGS="$old_LDFLAGS" + [], + [libc_cv_cxx_link_ok=no]) + LDFLAGS="$old_LDFLAGS" +fi AC_LANG_POP([C++])]) AS_IF([test $libc_cv_cxx_link_ok != yes], [CXX=]) diff --git a/manual/install.texi b/manual/install.texi index 7c44594617..ac3728c301 100644 --- a/manual/install.texi +++ b/manual/install.texi @@ -252,6 +252,14 @@ configure with @option{--disable-werror}. By default for x86_64, @theglibc{} is built with the vector math library. Use this option to disable the vector math library. +@item --disable-static-c++-link-check +By default, if the C++ toolchain doesn't not support static linking, +configure couldn't find the C++ header files and the glibc build fails. +Use this option to disable the static C++ link check so that the C++ +header files can be located. The newly built libc.a can be used to +create static C++ tests if the C++ toolchain has necessary static C++ +libraries. + @item --disable-scv Disable using @code{scv} instruction for syscalls. All syscalls will use @code{sc} instead, even if the kernel supports @code{scv}. PowerPC only.
The current minimum GCC version of glibc build is GCC 6.2 or newer. But building i686 glibc with GCC 6.4 on Fedora 40 failed since the C++ header files couldn't be found which was caused by the static C++ link check failure due to missing __divmoddi4 which was referenced in i686 libc.a and added to GCC 7. Add --disable-static-c++-link-check configure option to disable the static C++ link test. The newly built i686 libc.a can be used by GCC 6.4 to create static C++ tests. This fixes BZ #31412. Signed-off-by: H.J. Lu <hjl.tools@gmail.com> --- INSTALL | 8 ++++++++ configure | 24 +++++++++++++++++++----- configure.ac | 22 +++++++++++++++------- manual/install.texi | 8 ++++++++ 4 files changed, 50 insertions(+), 12 deletions(-)