@CPP_FOR_BUILD@ problem since binutils-2.38

Message ID PH1P110MB16505D9D39EC5B1DE22FE3D5EC5F9@PH1P110MB1650.NAMP110.PROD.OUTLOOK.COM
State Accepted, archived
Headers
Series @CPP_FOR_BUILD@ problem since binutils-2.38 |

Checks

Context Check Description
snail/binutils-gdb-check success Github commit url

Commit Message

Andrew Goth Oct. 7, 2022, 4:10 a.m. UTC
  Hi, I'm having trouble with @CPP_FOR_BUILD@, @CPPFLAGS_FOR_BUILD@, etc. in binutils's Makefile.in not being replaced by the configure script.

This problem was introduced with version 2.38 and persists into 2.39.

Here is an excerpt from the diff from 2.37 to 2.38:


Every single one of these additions to Makefile.in yields a corresponding Makefile line that passes through unsubstituted.

In configure, CPP_FOR_BUILD, etc. aren't in $ac_subst_vars. Similarly, they're not listed with AC_SUBST() in configure.ac, which I find most interesting.

This breaks my script for building binutils, gcc, etc. as a cross compiler. The problem makes itself known during configure-isl. I embed isl-0.25 into binutils's isl subdirectory, and it chokes due to the CPP_FOR_BUILD environment variable coming in as literally @CPP_FOR_BUILD@. My successful workaround has been to stick with binutils-2.37, but I can't stay behind forever.

configure:5762: checking whether the C compiler works
configure:5784: gcc -g -O2 @CPPFLAGS_FOR_BUILD@  conftest.c  >&5
/usr/bin/ld: cannot find @CPPFLAGS_FOR_BUILD@: No such file or directory
collect2: error: ld returned 1 exit status

I'm building using a fresh Slackware64 15.0 install, and I'm not applying any patches to binutils or isl.

To double-check whether it's me or there really is something funny going on, as well as to give you a reproducible test case I had no hand in writing (ruling out operator error on my part), I ran Slackware's own build script for binutils, with an "exit" immediately following the configure script. This leaves me with @CPP_FOR_BUILD@ literally appearing in /tmp/binutils-2.39/Makefile, consistent with my own experience.

If you want to follow along, here is the process:
(1) get https://mirrors.slackware.com/slackware/slackware-iso/slackware64-15.0-iso/slackware64-15.0-install-dvd.iso
(2) install onto a VM
(3) boot and log in (root is fine)
(4) wget -np -r -R '*.mirrorlist' -R 'index.html*' https://mirrors.slackware.com/slackware/slackware-current/source/d/binutils/
(5) edit binutils.SlackBuild to add "exit" after the configure command
(6) run binutils.SlackBuild
(7) find the results in /tmp/binutils-2.39

If it weren't for the exit, this would result in a good binutils build, since @CPP_FOR_BUILD@, etc. don't affect this configuration. But try building binutils with an in-tree isl and you'll have trouble due to isl's configure script looking at $CPP_FOR_BUILD.

I'm considering experimenting with adding more AC_SUBST() lines to configure.ac, downgrading to autoconf 2.69, and regenerating configure. Alas, the hour grows late and I have other projects I must complete tonight, so I decided to write up this email and move on.
  

Comments

Jan Beulich Oct. 7, 2022, 8:42 a.m. UTC | #1
On 07.10.2022 06:10, Andrew Goth via Binutils wrote:
> Hi, I'm having trouble with @CPP_FOR_BUILD@, @CPPFLAGS_FOR_BUILD@, etc. in binutils's Makefile.in not being replaced by the configure script.
> 
> This problem was introduced with version 2.38 and persists into 2.39.
> 
> Here is an excerpt from the diff from 2.37 to 2.38:
> 
> diff -U0 -r binutils-2.37/Makefile.in binutils-2.38/Makefile.in
> --- binutils-2.37/Makefile.in   2021-07-18 11:47:23.000000000 -0500
> +++ binutils-2.38/Makefile.in   2022-02-09 06:04:43.000000000 -0600
> @@ -342,0 +367,2 @@
> +CPP_FOR_BUILD = @CPP_FOR_BUILD@
> +CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
> @@ -345,0 +372 @@
> +DSYMUTIL_FOR_BUILD = @DSYMUTIL_FOR_BUILD@
> @@ -347,0 +375 @@
> +GDC_FOR_BUILD = @GDC_FOR_BUILD@
> @@ -394,0 +423 @@
> +DSYMUTIL = @DSYMUTIL@
> @@ -398,0 +428 @@
> +OTOOL = @OTOOL@
> @@ -404,0 +435 @@
> +GDC = @GDC@
> 
> Every single one of these additions to Makefile.in yields a corresponding Makefile line that passes through unsubstituted.
> 
> In configure, CPP_FOR_BUILD, etc. aren't in $ac_subst_vars. Similarly, they're not listed with AC_SUBST() in configure.ac, which I find most interesting.

Hmm, this looks to be due to 08ca783430ac syncing only Makefile.*
with gcc's, but not configure.ac. The CPPFLAGS_FOR_BUILD issue was
meanwhile addressed in isolation by commit e472ec9fad6d. Nick -
what is the general policy / approach of syncing top level files?

Jan
  
Alan Modra Oct. 10, 2022, 12:43 a.m. UTC | #2
On Fri, Oct 07, 2022 at 10:42:45AM +0200, Jan Beulich via Binutils wrote:
> Hmm, this looks to be due to 08ca783430ac syncing only Makefile.*
> with gcc's, but not configure.ac. The CPPFLAGS_FOR_BUILD issue was
> meanwhile addressed in isolation by commit e472ec9fad6d. Nick -
> what is the general policy / approach of syncing top level files?

Apart from config.guess and config.sub, shared top-level files are
supposed to be owned by the gcc project.  This implies patches go into
the gcc repo then the files are copied over to binutils.

This does not work, for a variety of reasons.

To merge with gcc's copy of configure.ac we need to revert changes to
configure.ac in the following gcc commits:
dc832fb39fc0 2022-08-25
fc259b522c0f 2022-06-25
Then reapply configure.ac changes in binutils from these binutils
commits:
50ad1254d503 2021-01-09
bb368aad297f 2022-03-11
e5f2f7d901ee 2022-07-26
2cac01e3ffff 2022-09-26
Plus copy over gcc's config/ax_cxx_compile_stdcxx.m4, then regenerate
configure.  configure.ac diff from current binutila shown below.

diff --git a/configure.ac b/configure.ac
index 0152c69292e..f9a224eb21f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
 #   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
-#   2014, 2015, 2016, 2019, 2020 Free Software Foundation, Inc.
+#   2014, 2015, 2016, 2019, 2022 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -24,6 +24,7 @@ m4_include(config/override.m4)
 m4_include(config/proginstall.m4)
 m4_include(config/elf.m4)
 m4_include(config/gcc-plugin.m4)
+m4_include(config/ax_cxx_compile_stdcxx.m4)
 m4_include([libtool.m4])
 m4_include([ltoptions.m4])
 m4_include([ltsugar.m4])
@@ -132,7 +133,7 @@ build_tools="build-texinfo build-flex build-bison build-m4 build-fixincludes"
 
 # these libraries are used by various programs built for the host environment
 #f
-host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktrace libcpp libdecnumber gmp mpfr mpc isl libelf libiconv libctf"
+host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktrace libcpp libcody libdecnumber gmp mpfr mpc isl libiconv libctf"
 
 # these tools are built for the host environment
 # Note, the powerpc-eabi build depends on sim occurring before gdb in order to
@@ -140,7 +141,7 @@ host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktr
 # binutils, gas and ld appear in that order because it makes sense to run
 # "make check" in that particular order.
 # If --enable-gold is used, "gold" may replace "ld".
-host_tools="texinfo flex bison binutils gas ld fixincludes gcc cgen sid sim gdb gdbserver gprof etc expect dejagnu m4 utils guile fastjar gnattools libcc1 gotools"
+host_tools="texinfo flex bison binutils gas ld fixincludes gcc cgen sid sim gdb gdbserver gprof etc expect dejagnu m4 utils guile fastjar gnattools libcc1 gotools c++tools"
 
 # these libraries are built for the target environment, and are built after
 # the host libraries and the host tools (which may be a cross compiler)
@@ -151,7 +152,6 @@ target_libraries="target-libgcc \
 		target-newlib \
 		target-libgomp \
 		target-liboffloadmic \
-		target-libhsail-rt \
 		target-libatomic \
 		target-libitm \
 		target-libstdc++-v3 \
@@ -163,7 +163,9 @@ target_libraries="target-libgcc \
 		target-libffi \
 		target-libobjc \
 		target-libada \
-		target-libgo"
+		target-libgo \
+		target-libphobos \
+		target-zlib"
 
 # these tools are built using the target libraries, and are intended to
 # run only in the target environment
@@ -249,12 +251,6 @@ fi
 AC_ARG_WITH(zstd,
 [AS_HELP_STRING([--with-zstd], [Support zstd compressed debug sections (default=auto)])])
 
-# Don't compile the bundled readline/libreadline.a if --with-system-readline
-# is provided.
-if test x$with_system_readline = xyes ; then
-  noconfigdirs="$noconfigdirs readline"
-fi
-
 # some tools are so dependent upon X11 that if we're not building with X, 
 # it's not even worth trying to configure, much less build, that tool.
 
@@ -307,6 +303,14 @@ AC_ARG_ENABLE(offload-targets,
   fi
 ], [enable_offload_targets=])
 
+AC_ARG_ENABLE(offload-defaulted,
+[AS_HELP_STRING([--enable-offload-defaulted]
+		[If enabled, configured but not installed offload compilers and
+		libgomp plugins are silently ignored.  Useful for distribution
+		compilers where those are in separate optional packages.])],
+[enable_offload_defaulted=$enableval],
+[enable_offload_defaulted=])
+
 # Handle --enable-gold, --enable-ld.
 # --disable-gold [--enable-ld]
 #     Build only ld.  Default option.
@@ -339,7 +343,7 @@ case "${ENABLE_GOLD}" in
       *-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \
       | *-*-linux* | *-*-gnu* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \
       | *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* \
-      | *-*-solaris2* | *-*-nto* | *-*-nacl* | *-*-haiku*)
+      | *-*-solaris2* | *-*-nto* | *-*-nacl*)
         case "${target}" in
           *-*-linux*aout* | *-*-linux*oldld*)
             ;;
@@ -353,7 +357,7 @@ case "${ENABLE_GOLD}" in
       # Check for target supported by gold.
       case "${target}" in
         i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \
-        | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-*)
+        | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-* | loongarch*-*-*)
 	  configdirs="$configdirs gold"
 	  if test x${ENABLE_GOLD} = xdefault; then
 	    default_ld=gold
@@ -546,7 +550,7 @@ if test x$enable_libgomp = x ; then
 	;;
     *-*-darwin* | *-*-aix*)
 	;;
-    nvptx*-*-*)
+    nvptx*-*-* | amdgcn*-*-*)
 	;;
     *)
 	noconfigdirs="$noconfigdirs target-libgomp"
@@ -634,26 +638,6 @@ if test -d ${srcdir}/libvtv; then
     fi
 fi
 
-
-# Disable libhsail-rt on unsupported systems.
-if test -d ${srcdir}/libhsail-rt; then
-    if test x$enable_libhsail_rt = x; then
-        AC_MSG_CHECKING([for libhsail-rt support])
-        if (srcdir=${srcdir}/libhsail-rt; \
-                . ${srcdir}/configure.tgt; \
-                test -n "$UNSUPPORTED")
-        then
-            AC_MSG_RESULT([no])
-            unsupported_languages="$unsupported_languages brig"
-            # This implicitly disables also target-libhsail-rt as it won't
-            # get added to the build without BRIG FE.
-        else
-            AC_MSG_RESULT([yes])
-        fi
-    fi
-fi
-
-
 # Disable libquadmath for some systems.
 case "${target}" in
   avr-*-*)
@@ -672,9 +656,16 @@ case "${target}" in
     # No hosted I/O support.
     noconfigdirs="$noconfigdirs target-libssp"
     ;;
+  bpf-*-*)
+    noconfigdirs="$noconfigdirs target-libssp"
+    ;;
   powerpc-*-aix* | rs6000-*-aix*)
     noconfigdirs="$noconfigdirs target-libssp"
     ;;
+  pru-*-*)
+    # No hosted I/O support.
+    noconfigdirs="$noconfigdirs target-libssp"
+    ;;
   rl78-*-*)
     # libssp uses a misaligned load to trigger a fault, but the RL78
     # doesn't fault for those - instead, it gives a build-time error
@@ -688,13 +679,17 @@ case "${target}" in
 esac
 
 # Disable libstdc++-v3 for some systems.
-# Allow user to override this if they pass --enable-libstdc++-v3
+# Allow user to override this if they pass --enable-libstdcxx
 if test "${ENABLE_LIBSTDCXX}" = "default" ; then
   case "${target}" in
     *-*-vxworks*)
       # VxWorks uses the Dinkumware C++ library.
       noconfigdirs="$noconfigdirs target-libstdc++-v3"
       ;;
+    amdgcn*-*-*)
+      # Not ported/fails to build when using newlib.
+      noconfigdirs="$noconfigdirs target-libstdc++-v3"
+      ;;
     arm*-wince-pe*)
       # the C++ libraries don't build on top of CE's C libraries
       noconfigdirs="$noconfigdirs target-libstdc++-v3"
@@ -702,18 +697,83 @@ if test "${ENABLE_LIBSTDCXX}" = "default" ; then
     avr-*-*)
       noconfigdirs="$noconfigdirs target-libstdc++-v3"
       ;;
+    bpf-*-*)
+      noconfigdirs="$noconfigdirs target-libstdc++-v3"
+      ;;
     ft32-*-*)
       noconfigdirs="$noconfigdirs target-libstdc++-v3"
       ;;
   esac
 fi
 
+# Disable C++ on systems where it is known to not work.
+# For testing, you can override this with --enable-languages=c++.
+case ,${enable_languages}, in
+  *,c++,*)
+    ;;
+  *)
+      case "${target}" in
+        bpf-*-*)
+          unsupported_languages="$unsupported_languages c++"
+          ;;
+      esac
+      ;;
+esac
+
+# Disable Objc on systems where it is known to not work.
+# For testing, you can override this with --enable-languages=objc.
+case ,${enable_languages}, in
+  *,objc,*)
+    ;;
+  *)
+      case "${target}" in
+        bpf-*-*)
+          unsupported_languages="$unsupported_languages objc"
+          ;;
+      esac
+      ;;
+esac
+
+# Disable D on systems where it is known to not work.
+# For testing, you can override this with --enable-languages=d.
+case ,${enable_languages}, in
+  *,d,*)
+    ;;
+  *)
+    case "${target}" in
+      bpf-*-*)
+	unsupported_languages="$unsupported_languages d"
+	;;
+    esac
+    ;;
+esac
+
+# Disable libphobos on unsupported systems.
+# For testing, you can override this with --enable-libphobos.
+if test -d ${srcdir}/libphobos; then
+    if test x$enable_libphobos = x; then
+	AC_MSG_CHECKING([for libphobos support])
+	if (srcdir=${srcdir}/libphobos; \
+		. ${srcdir}/configure.tgt; \
+		test "$LIBPHOBOS_SUPPORTED" != "yes")
+	then
+	    AC_MSG_RESULT([no])
+	    noconfigdirs="$noconfigdirs target-libphobos"
+	else
+	    AC_MSG_RESULT([yes])
+	fi
+    fi
+fi
+
 # Disable Fortran for some systems.
 case "${target}" in
   mmix-*-*)
     # See <http://gcc.gnu.org/ml/gcc-patches/2004-11/msg00572.html>.
     unsupported_languages="$unsupported_languages fortran"
     ;;
+  bpf-*-*)
+    unsupported_languages="$unsupported_languages fortran"
+    ;;
 esac
 
 # Disable libffi for some systems.
@@ -757,6 +817,12 @@ case "${target}" in
   arm-wince-pe)
     noconfigdirs="$noconfigdirs target-libffi"
     ;;
+  arm*-*-symbianelf*)
+    noconfigdirs="$noconfigdirs target-libffi"
+    ;;
+  bpf-*-*)
+    noconfigdirs="$noconfigdirs target-libffi"
+    ;;
   cris-*-* | crisv32-*-*)
     case "${target}" in
       *-*-linux*)
@@ -803,7 +869,7 @@ esac
 # Disable the go frontend on systems where it is known to not work. Please keep
 # this in sync with contrib/config-list.mk.
 case "${target}" in
-*-*-darwin* | *-*-cygwin* | *-*-mingw*)
+*-*-darwin* | *-*-cygwin* | *-*-mingw* | bpf-* )
     unsupported_languages="$unsupported_languages go"
     ;;
 esac
@@ -835,6 +901,9 @@ if test x$enable_libgo = x; then
     *-*-cygwin* | *-*-mingw*)
 	noconfigdirs="$noconfigdirs target-libgo"
 	;;
+    bpf-*-*)
+        noconfigdirs="$noconfigdirs target-libgo"
+        ;;
     esac
 fi
 
@@ -860,6 +929,9 @@ case "${target}" in
   i[[3456789]]86-*-*)
     libgloss_dir=i386
     ;;
+  loongarch*-*-*)
+    libgloss_dir=loongarch
+    ;;
   m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*)
     libgloss_dir=m68hc11
     ;;
@@ -872,6 +944,9 @@ case "${target}" in
   powerpc*-*-*)
     libgloss_dir=rs6000
     ;;
+  pru-*-*)
+    libgloss_dir=pru
+    ;;
   sparc*-*-*)
     libgloss_dir=sparc
     ;;
@@ -903,6 +978,9 @@ case "${target}" in
   sparc-*-sunos4*)
     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
     ;;
+  bpf-*-*)
+    noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+    ;;
   *-*-aix*)
     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
     ;;
@@ -951,6 +1029,8 @@ case "${target}" in
     noconfigdirs="$noconfigdirs ld gas gdb gprof"
     noconfigdirs="$noconfigdirs sim target-rda"
     ;;
+  amdgcn*-*-*)
+    ;;
   arm-*-darwin*)
     noconfigdirs="$noconfigdirs ld gas gdb gprof"
     noconfigdirs="$noconfigdirs sim target-rda"
@@ -974,7 +1054,8 @@ case "${target}" in
   *-*-dragonfly*)
     ;;
   *-*-freebsd*)
-    if test "x$with_gmp" = x && test "x$with_gmp_dir" = x \
+    if test "x$with_gmp" = x \
+	&& ! test -d ${srcdir}/gmp \
 	&& test -f /usr/local/include/gmp.h; then
       with_gmp=/usr/local
     fi
@@ -1014,6 +1095,9 @@ case "${target}" in
     # newlib is not 64 bit ready
     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
     ;;
+  bpf-*-*)
+    noconfigdirs="$noconfigdirs target-libobjc target-libbacktrace"
+    ;;
   sh*-*-pe|mips*-*-pe|*arm-wince-pe)
     noconfigdirs="$noconfigdirs tcl tk itcl libgui sim"
     ;;
@@ -1232,6 +1316,11 @@ case "${target}" in
   wasm32-*-*)
     noconfigdirs="$noconfigdirs ld"
     ;;
+  loongarch*-*-linux*)
+    ;;
+  loongarch*-*-*)
+    noconfigdirs="$noconfigdirs gprof"
+    ;;
 esac
 
 # If we aren't building newlib, then don't build libgloss, since libgloss
@@ -1267,7 +1356,7 @@ case "${host}" in
   hppa*-*)	
     host_makefile_frag="config/mh-pa"
     ;;
-  *-*-darwin*)
+  i?86-*-darwin[[89]]* | i?86-*-darwin1[[0-7]]* | powerpc*-*-darwin*)
     host_makefile_frag="config/mh-darwin"
     ;;
   powerpc-*-aix*)
@@ -1283,9 +1372,12 @@ if test "${build}" != "${host}" ; then
   AR_FOR_BUILD=${AR_FOR_BUILD-ar}
   AS_FOR_BUILD=${AS_FOR_BUILD-as}
   CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
+  CPP_FOR_BUILD="${CPP_FOR_BUILD-\$(CC_FOR_BUILD) -E}"
   CXX_FOR_BUILD=${CXX_FOR_BUILD-g++}
+  DSYMUTIL_FOR_BUILD=${DSYMUTIL_FOR_BUILD-dsymutil}
   GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran}
   GOC_FOR_BUILD=${GOC_FOR_BUILD-gccgo}
+  GDC_FOR_BUILD=${GDC_FOR_BUILD-gdc}
   DLLTOOL_FOR_BUILD=${DLLTOOL_FOR_BUILD-dlltool}
   LD_FOR_BUILD=${LD_FOR_BUILD-ld}
   NM_FOR_BUILD=${NM_FOR_BUILD-nm}
@@ -1297,8 +1389,10 @@ else
   AS_FOR_BUILD="\$(AS)"
   CC_FOR_BUILD="\$(CC)"
   CXX_FOR_BUILD="\$(CXX)"
+  DSYMUTIL_FOR_BUILD="\$(DSYMUTIL)"
   GFORTRAN_FOR_BUILD="\$(GFORTRAN)"
   GOC_FOR_BUILD="\$(GOC)"
+  GDC_FOR_BUILD="\$(GDC)"
   DLLTOOL_FOR_BUILD="\$(DLLTOOL)"
   LD_FOR_BUILD="\$(LD)"
   NM_FOR_BUILD="\$(NM)"
@@ -1350,6 +1444,7 @@ int main() {}])],
 fi
 
 ACX_PROG_GNAT
+ACX_PROG_GDC
 ACX_PROG_CMP_IGNORE_INITIAL
 
 AC_ARG_ENABLE([bootstrap],
@@ -1395,10 +1490,17 @@ case "$have_compiler:$host:$target:$enable_bootstrap" in
     ;;
 esac
 
-# When bootstrapping with GCC, build stage 1 in C++98 mode to ensure that a
-# C++98 compiler can still start the bootstrap.
+# When bootstrapping with GCC, build stage 1 in C++11 mode to ensure that a
+# C++11 compiler can still start the bootstrap.  Otherwise, if building GCC,
+# require C++11 (or higher).
 if test "$enable_bootstrap:$GXX" = "yes:yes"; then
-  CXX="$CXX -std=gnu++98"
+  CXX="$CXX -std=c++11"
+elif test "$have_compiler" = yes; then
+  AX_CXX_COMPILE_STDCXX(11)
+
+  if test "${build}" != "${host}"; then
+    AX_CXX_COMPILE_STDCXX(11, [], [], [_FOR_BUILD])
+  fi
 fi
 
 AC_ARG_ENABLE([pgo-build],
@@ -1504,11 +1606,6 @@ fi
 
 # Specify a location for mpfr
 # check for this first so it ends up on the link line before gmp.
-AC_ARG_WITH(mpfr-dir,
-[AS_HELP_STRING([--with-mpfr-dir=PATH], [this option has been REMOVED])],
-[AC_MSG_ERROR([The --with-mpfr-dir=PATH option has been removed.
-Use --with-mpfr=PATH or --with-mpfr-include=PATH plus --with-mpfr-lib=PATH])])
-
 AC_ARG_WITH(mpfr,
 [AS_HELP_STRING([--with-mpfr=PATH],
 		[specify prefix directory for installed MPFR package.
@@ -1548,11 +1645,6 @@ Building GCC with MPFR in the source tree is only handled for MPFR 3.1.0+.])
 fi
 
 # Specify a location for gmp
-AC_ARG_WITH(gmp-dir,
-[AS_HELP_STRING([--with-gmp-dir=PATH], [this option has been REMOVED])],
-[AC_MSG_ERROR([The --with-gmp-dir=PATH option has been removed.
-Use --with-gmp=PATH or --with-gmp-include=PATH plus --with-gmp-lib=PATH])])
-
 AC_ARG_WITH(gmp,
 [AS_HELP_STRING([--with-gmp=PATH],
 		[specify prefix directory for the installed GMP package.
@@ -1616,12 +1708,12 @@ if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then
     AC_MSG_CHECKING([for the correct version of mpfr.h])
     AC_TRY_COMPILE([#include <gmp.h>
     #include <mpfr.h>],[
-    #if MPFR_VERSION < MPFR_VERSION_NUM(2,4,0)
+    #if MPFR_VERSION < MPFR_VERSION_NUM(3,1,0)
     choke me
     #endif
     ], [AC_TRY_COMPILE([#include <gmp.h>
     #include <mpfr.h>],[
-    #if MPFR_VERSION < MPFR_VERSION_NUM(2,4,2)
+    #if MPFR_VERSION < MPFR_VERSION_NUM(3,1,6)
     choke me
     #endif
     ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([buggy but acceptable])])],
@@ -1656,9 +1748,9 @@ if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then
     int t;
     mpfr_init (n);
     mpfr_init (x);
-    mpfr_atan2 (n, n, x, GMP_RNDN);
-    mpfr_erfc (n, x, GMP_RNDN);
-    mpfr_subnormalize (x, t, GMP_RNDN);
+    mpfr_atan2 (n, n, x, MPFR_RNDN);
+    mpfr_erfc (n, x, MPFR_RNDN);
+    mpfr_subnormalize (x, t, MPFR_RNDN);
     mpfr_clear(n);
     mpfr_clear(x);
     mpc_init2 (c, 53);
@@ -1676,11 +1768,11 @@ if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then
 # The library versions listed in the error message below should match
 # the HARD-minimums enforced above.
   if test x$have_gmp != xyes; then
-    AC_MSG_ERROR([Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.
+    AC_MSG_ERROR([Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+.
 Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify
 their locations.  Source code for these libraries can be found at
 their respective hosting sites as well as at
-ftp://gcc.gnu.org/pub/gcc/infrastructure/.  See also
+https://gcc.gnu.org/pub/gcc/infrastructure/.  See also
 http://gcc.gnu.org/install/prerequisites.html for additional info.  If
 you obtained GMP, MPFR and/or MPC from a vendor distribution package,
 make sure that you have installed both the libraries and the header
@@ -1855,7 +1947,20 @@ AC_SUBST(extra_linker_plugin_flags)
 AC_ARG_ENABLE(host-shared,
 [AS_HELP_STRING([--enable-host-shared],
 		[build host code as shared libraries])],
-[host_shared=$enableval], [host_shared=no])
+[host_shared=$enableval
+ case $host in
+   x86_64-*-darwin* | aarch64-*-darwin*)
+     if test x$host_shared != xyes ; then
+       # PIC is the default, and actually cannot be switched off.
+       echo configure.ac: warning: PIC code is required for the configured target, host-shared setting ignored. 1>&2
+       host_shared=yes
+     fi ;;
+  *) ;;
+ esac],
+[case $host in
+  x86_64-*-darwin* | aarch64-*-darwin*) host_shared=yes ;;
+  *) host_shared=no ;;
+ esac])
 AC_SUBST(host_shared)
 
 # By default, C and C++ are the only stage 1 languages.
@@ -2070,7 +2175,28 @@ if test -d ${srcdir}/gcc; then
             ;;
         esac
 
+        # Disable D if no preexisting GDC is available.
+        case ${add_this_lang}:${language}:${have_gdc} in
+          yes:d:no)
+            # Specifically requested language; tell them.
+            AC_MSG_ERROR([GDC is required to build $language])
+           ;;
+          all:d:no)
+            AC_MSG_WARN([GDC is required to build $language])
+            add_this_lang=unsupported
+            ;;
+          *:d:no)
+            # Silently disable.
+            add_this_lang=unsupported
+            ;;
+        esac
+
         # Disable jit if -enable-host-shared not specified
+        # but not if building for Mingw. All code in Windows
+        # is position independent code (PIC).
+        case $target in
+          *mingw*) ;;
+          *)
           case ${add_this_lang}:${language}:${host_shared} in
             yes:jit:no)
 	           # PR jit/64780: explicitly specify --enable-host-shared
@@ -2094,6 +2220,8 @@ directories, to avoid imposing the performance cost of
               add_this_lang=unsupported
               ;;
 	        esac
+          ;;
+        esac
 
         # Disable a language that is unsupported by the target.
 	case "${add_this_lang}: $unsupported_languages " in
@@ -2130,7 +2258,7 @@ directories, to avoid imposing the performance cost of
 		  *) stage1_languages="${stage1_languages}${language}," ;;
 		esac
 		# We need to bootstrap any supporting libraries.
-		bootstrap_target_libs="${bootstrap_target_libs}${target_libs},"
+		bootstrap_target_libs=`echo "${bootstrap_target_libs}${target_libs}," | sed "s/ /,/g"`
 		;;
 	    esac
 	    ;;
@@ -2804,7 +2932,7 @@ fi
 # or bootstrap-ubsan, bootstrap it.
 if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1; then
   case "$BUILD_CONFIG" in
-    *bootstrap-asan* | *bootstrap-ubsan* )
+    *bootstrap-hwasan* | *bootstrap-asan* | *bootstrap-ubsan* )
       bootstrap_target_libs=${bootstrap_target_libs}target-libsanitizer,
       bootstrap_fixincludes=yes
       ;;
@@ -2817,6 +2945,16 @@ if echo " ${target_configdirs} " | grep " libvtv " > /dev/null 2>&1 &&
   bootstrap_target_libs=${bootstrap_target_libs}target-libvtv,
 fi
 
+# If we are building libatomic and the list of enabled languages includes the
+# D frontend, bootstrap it.
+if echo " ${target_configdirs} " | grep " libatomic " > /dev/null 2>&1; then
+  case ,${enable_languages}, in
+    *,d,*)
+      bootstrap_target_libs=${bootstrap_target_libs}target-libatomic,
+      ;;
+  esac
+fi
+
 # Determine whether gdb needs tk/tcl or not.
 # Use 'maybe' since enable_gdbtk might be true even if tk isn't available
 # and in that case we want gdb to be built without tk.  Ugh!
@@ -3354,6 +3492,17 @@ case "${target}" in
   mep*)
     FLAGS_FOR_TARGET="$FLAGS_FOR_TARGET -mlibrary"
     ;;
+  # The VxWorks support for shared libraries is getting in
+  # incrementally.  Make sure it doesn't get activated implicitly:
+  *vxworks*)
+    if test "${enable_shared-unset}" = unset ; then
+      enable_shared=no
+      # So the build of libraries knows ...
+      target_configargs="${target_configargs} --disable-shared"
+      # So gcc knows ...
+      host_configargs="${host_configargs} --disable-shared"
+    fi
+    ;;
 esac
 
 # Makefile fragments.
@@ -3396,12 +3545,15 @@ AC_SUBST(AR_FOR_BUILD)
 AC_SUBST(AS_FOR_BUILD)
 AC_SUBST(CC_FOR_BUILD)
 AC_SUBST(CFLAGS_FOR_BUILD)
+AC_SUBST(CPP_FOR_BUILD)
 AC_SUBST(CPPFLAGS_FOR_BUILD)
 AC_SUBST(CXXFLAGS_FOR_BUILD)
 AC_SUBST(CXX_FOR_BUILD)
 AC_SUBST(DLLTOOL_FOR_BUILD)
+AC_SUBST(DSYMUTIL_FOR_BUILD)
 AC_SUBST(GFORTRAN_FOR_BUILD)
 AC_SUBST(GOC_FOR_BUILD)
+AC_SUBST(GDC_FOR_BUILD)
 AC_SUBST(LDFLAGS_FOR_BUILD)
 AC_SUBST(LD_FOR_BUILD)
 AC_SUBST(NM_FOR_BUILD)
@@ -3478,6 +3630,7 @@ esac
 NCN_STRICT_CHECK_TOOLS(AR, ar)
 NCN_STRICT_CHECK_TOOLS(AS, as)
 NCN_STRICT_CHECK_TOOLS(DLLTOOL, dlltool)
+NCN_STRICT_CHECK_TOOLS(DSYMUTIL, dsymutil)
 NCN_STRICT_CHECK_TOOLS(LD, ld)
 NCN_STRICT_CHECK_TOOLS(LIPO, lipo)
 NCN_STRICT_CHECK_TOOLS(NM, nm)
@@ -3487,12 +3640,14 @@ NCN_STRICT_CHECK_TOOLS(WINDRES, windres)
 NCN_STRICT_CHECK_TOOLS(WINDMC, windmc)
 NCN_STRICT_CHECK_TOOLS(OBJCOPY, objcopy)
 NCN_STRICT_CHECK_TOOLS(OBJDUMP, objdump)
+NCN_STRICT_CHECK_TOOLS(OTOOL, otool)
 NCN_STRICT_CHECK_TOOLS(READELF, readelf)
 AC_SUBST(CC)
 AC_SUBST(CXX)
 AC_SUBST(CFLAGS)
 AC_SUBST(CXXFLAGS)
-AC_SUBST(PKG_CONFIG_PATH)
+AC_SUBST(GDC)
+AC_SUBST(GDCFLAGS)
 
 GCC_PLUGIN_OPTION(PLUGIN_OPTION)
 AR_PLUGIN_OPTION=
@@ -3504,10 +3659,6 @@ if test -n "$PLUGIN_OPTION"; then
   if $RANLIB --help 2>&1 | grep -q "\--plugin"; then
     RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION"
   fi
-else
-  if test "$enable_pgo_build" != "no"; then
-    AC_MSG_ERROR([AR with --plugin and rc is required for LTO build])
-  fi
 fi
 AC_SUBST(AR_PLUGIN_OPTION)
 AC_SUBST(RANLIB_PLUGIN_OPTION)
@@ -3530,15 +3681,18 @@ NCN_STRICT_CHECK_TARGET_TOOLS(CXX_FOR_TARGET, c++ g++ cxx gxx)
 NCN_STRICT_CHECK_TARGET_TOOLS(GCC_FOR_TARGET, gcc, ${CC_FOR_TARGET})
 NCN_STRICT_CHECK_TARGET_TOOLS(GFORTRAN_FOR_TARGET, gfortran)
 NCN_STRICT_CHECK_TARGET_TOOLS(GOC_FOR_TARGET, gccgo)
+NCN_STRICT_CHECK_TARGET_TOOLS(GDC_FOR_TARGET, gdc)
 
 ACX_CHECK_INSTALLED_TARGET_TOOL(AR_FOR_TARGET, ar)
 ACX_CHECK_INSTALLED_TARGET_TOOL(AS_FOR_TARGET, as)
 ACX_CHECK_INSTALLED_TARGET_TOOL(DLLTOOL_FOR_TARGET, dlltool)
+ACX_CHECK_INSTALLED_TARGET_TOOL(DSYMUTIL_FOR_TARGET, dsymutil)
 ACX_CHECK_INSTALLED_TARGET_TOOL(LD_FOR_TARGET, ld)
 ACX_CHECK_INSTALLED_TARGET_TOOL(LIPO_FOR_TARGET, lipo)
 ACX_CHECK_INSTALLED_TARGET_TOOL(NM_FOR_TARGET, nm)
 ACX_CHECK_INSTALLED_TARGET_TOOL(OBJCOPY_FOR_TARGET, objcopy)
 ACX_CHECK_INSTALLED_TARGET_TOOL(OBJDUMP_FOR_TARGET, objdump)
+ACX_CHECK_INSTALLED_TARGET_TOOL(OTOOL_FOR_TARGET, otool)
 ACX_CHECK_INSTALLED_TARGET_TOOL(RANLIB_FOR_TARGET, ranlib)
 ACX_CHECK_INSTALLED_TARGET_TOOL(READELF_FOR_TARGET, readelf)
 ACX_CHECK_INSTALLED_TARGET_TOOL(STRIP_FOR_TARGET, strip)
@@ -3558,16 +3712,20 @@ GCC_TARGET_TOOL(c++ for libstdc++, RAW_CXX_FOR_TARGET, CXX,
 		[gcc/xgcc -shared-libgcc -B$$r/$(HOST_SUBDIR)/gcc -nostdinc++ -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs],
 		c++)
 GCC_TARGET_TOOL(dlltool, DLLTOOL_FOR_TARGET, DLLTOOL, [binutils/dlltool])
+GCC_TARGET_TOOL(dsymutil, DSYMUTIL_FOR_TARGET, DSYMUTIL)
 GCC_TARGET_TOOL(gcc, GCC_FOR_TARGET, , [gcc/xgcc -B$$r/$(HOST_SUBDIR)/gcc/])
 GCC_TARGET_TOOL(gfortran, GFORTRAN_FOR_TARGET, GFORTRAN,
 		[gcc/gfortran -B$$r/$(HOST_SUBDIR)/gcc/], fortran)
 GCC_TARGET_TOOL(gccgo, GOC_FOR_TARGET, GOC,
 		[gcc/gccgo -B$$r/$(HOST_SUBDIR)/gcc/], go)
+GCC_TARGET_TOOL(gdc, GDC_FOR_TARGET, GDC,
+		[gcc/gdc -B$$r/$(HOST_SUBDIR)/gcc/], d)
 GCC_TARGET_TOOL(ld, LD_FOR_TARGET, LD, [ld/ld-new])
 GCC_TARGET_TOOL(lipo, LIPO_FOR_TARGET, LIPO)
 GCC_TARGET_TOOL(nm, NM_FOR_TARGET, NM, [binutils/nm-new])
 GCC_TARGET_TOOL(objcopy, OBJCOPY_FOR_TARGET, OBJCOPY, [binutils/objcopy])
 GCC_TARGET_TOOL(objdump, OBJDUMP_FOR_TARGET, OBJDUMP, [binutils/objdump])
+GCC_TARGET_TOOL(otool, OTOOL_FOR_TARGET, OTOOL)
 GCC_TARGET_TOOL(ranlib, RANLIB_FOR_TARGET, RANLIB, [binutils/ranlib])
 GCC_TARGET_TOOL(readelf, READELF_FOR_TARGET, READELF, [binutils/readelf])
 GCC_TARGET_TOOL(strip, STRIP_FOR_TARGET, STRIP, [binutils/strip-new])
@@ -3690,8 +3848,8 @@ AC_SUBST(stage2_werror_flag)
 compare_exclusions="gcc/cc*-checksum\$(objext) | gcc/ada/*tools/*"
 case "$target" in
   hppa*64*-*-hpux*) ;;
-  hppa*-*-hpux*) compare_exclusions="gcc/cc*-checksum\$(objext) | */libgcc/lib2funcs* | gcc/ada/*tools/* | gcc/function-tests.o" ;;
-  powerpc*-ibm-aix*) compare_exclusions="gcc/cc*-checksum\$(objext) | gcc/ada/*tools/* | *libgomp*\$(objext)" ;;
+  hppa*-*-hpux*) compare_exclusions="$compare_exclusions | */libgcc/lib2funcs* | gcc/function-tests.o" ;;
+  powerpc*-ibm-aix*) compare_exclusions="$compare_exclusions | *libgomp*\$(objext)" ;;
 esac
 AC_SUBST(compare_exclusions)
  
Tsukasa OI Oct. 10, 2022, 6:50 a.m. UTC | #3
On 2022/10/10 9:43, Alan Modra via Binutils wrote:
> On Fri, Oct 07, 2022 at 10:42:45AM +0200, Jan Beulich via Binutils wrote:
>> Hmm, this looks to be due to 08ca783430ac syncing only Makefile.*
>> with gcc's, but not configure.ac. The CPPFLAGS_FOR_BUILD issue was
>> meanwhile addressed in isolation by commit e472ec9fad6d. Nick -
>> what is the general policy / approach of syncing top level files?
> 
> Apart from config.guess and config.sub, shared top-level files are
> supposed to be owned by the gcc project.  This implies patches go into
> the gcc repo then the files are copied over to binutils.
> 
> This does not work, for a variety of reasons.
> 
> To merge with gcc's copy of configure.ac we need to revert changes to
> configure.ac in the following gcc commits:
> dc832fb39fc0 2022-08-25
> fc259b522c0f 2022-06-25
> Then reapply configure.ac changes in binutils from these binutils
> commits:
> 50ad1254d503 2021-01-09
> bb368aad297f 2022-03-11
> e5f2f7d901ee 2022-07-26
> 2cac01e3ffff 2022-09-26
> Plus copy over gcc's config/ax_cxx_compile_stdcxx.m4, then regenerate
> configure.  configure.ac diff from current binutila shown below.

Hmm, generally good (I wasn't sure that applying GCC's configuration
script's DSYMUTIL and OTOOL substitution is safe enough [because I don't
have any modern Mac].  As long as this is tested on the GCC side, this
change is okay).

One thing I have to point out is, this commit creates an unsubstituted
variable: PKG_CONFIG_PATH.  So, we have to create a GCC patch to subst
this and sync with Binutils.  Am I right?

Thanks,
Tsukasa

> 
> diff --git a/configure.ac b/configure.ac
> index 0152c69292e..f9a224eb21f 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1,6 +1,6 @@
>  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
>  #   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
> -#   2014, 2015, 2016, 2019, 2020 Free Software Foundation, Inc.
> +#   2014, 2015, 2016, 2019, 2022 Free Software Foundation, Inc.
>  #
>  # This file is free software; you can redistribute it and/or modify it
>  # under the terms of the GNU General Public License as published by
> @@ -24,6 +24,7 @@ m4_include(config/override.m4)
>  m4_include(config/proginstall.m4)
>  m4_include(config/elf.m4)
>  m4_include(config/gcc-plugin.m4)
> +m4_include(config/ax_cxx_compile_stdcxx.m4)
>  m4_include([libtool.m4])
>  m4_include([ltoptions.m4])
>  m4_include([ltsugar.m4])
> @@ -132,7 +133,7 @@ build_tools="build-texinfo build-flex build-bison build-m4 build-fixincludes"
>  
>  # these libraries are used by various programs built for the host environment
>  #f
> -host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktrace libcpp libdecnumber gmp mpfr mpc isl libelf libiconv libctf"
> +host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktrace libcpp libcody libdecnumber gmp mpfr mpc isl libiconv libctf"
>  
>  # these tools are built for the host environment
>  # Note, the powerpc-eabi build depends on sim occurring before gdb in order to
> @@ -140,7 +141,7 @@ host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktr
>  # binutils, gas and ld appear in that order because it makes sense to run
>  # "make check" in that particular order.
>  # If --enable-gold is used, "gold" may replace "ld".
> -host_tools="texinfo flex bison binutils gas ld fixincludes gcc cgen sid sim gdb gdbserver gprof etc expect dejagnu m4 utils guile fastjar gnattools libcc1 gotools"
> +host_tools="texinfo flex bison binutils gas ld fixincludes gcc cgen sid sim gdb gdbserver gprof etc expect dejagnu m4 utils guile fastjar gnattools libcc1 gotools c++tools"
>  
>  # these libraries are built for the target environment, and are built after
>  # the host libraries and the host tools (which may be a cross compiler)
> @@ -151,7 +152,6 @@ target_libraries="target-libgcc \
>  		target-newlib \
>  		target-libgomp \
>  		target-liboffloadmic \
> -		target-libhsail-rt \
>  		target-libatomic \
>  		target-libitm \
>  		target-libstdc++-v3 \
> @@ -163,7 +163,9 @@ target_libraries="target-libgcc \
>  		target-libffi \
>  		target-libobjc \
>  		target-libada \
> -		target-libgo"
> +		target-libgo \
> +		target-libphobos \
> +		target-zlib"
>  
>  # these tools are built using the target libraries, and are intended to
>  # run only in the target environment
> @@ -249,12 +251,6 @@ fi
>  AC_ARG_WITH(zstd,
>  [AS_HELP_STRING([--with-zstd], [Support zstd compressed debug sections (default=auto)])])
>  
> -# Don't compile the bundled readline/libreadline.a if --with-system-readline
> -# is provided.
> -if test x$with_system_readline = xyes ; then
> -  noconfigdirs="$noconfigdirs readline"
> -fi
> -
>  # some tools are so dependent upon X11 that if we're not building with X, 
>  # it's not even worth trying to configure, much less build, that tool.
>  
> @@ -307,6 +303,14 @@ AC_ARG_ENABLE(offload-targets,
>    fi
>  ], [enable_offload_targets=])
>  
> +AC_ARG_ENABLE(offload-defaulted,
> +[AS_HELP_STRING([--enable-offload-defaulted]
> +		[If enabled, configured but not installed offload compilers and
> +		libgomp plugins are silently ignored.  Useful for distribution
> +		compilers where those are in separate optional packages.])],
> +[enable_offload_defaulted=$enableval],
> +[enable_offload_defaulted=])
> +
>  # Handle --enable-gold, --enable-ld.
>  # --disable-gold [--enable-ld]
>  #     Build only ld.  Default option.
> @@ -339,7 +343,7 @@ case "${ENABLE_GOLD}" in
>        *-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \
>        | *-*-linux* | *-*-gnu* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \
>        | *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* \
> -      | *-*-solaris2* | *-*-nto* | *-*-nacl* | *-*-haiku*)
> +      | *-*-solaris2* | *-*-nto* | *-*-nacl*)
>          case "${target}" in
>            *-*-linux*aout* | *-*-linux*oldld*)
>              ;;
> @@ -353,7 +357,7 @@ case "${ENABLE_GOLD}" in
>        # Check for target supported by gold.
>        case "${target}" in
>          i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \
> -        | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-*)
> +        | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-* | loongarch*-*-*)
>  	  configdirs="$configdirs gold"
>  	  if test x${ENABLE_GOLD} = xdefault; then
>  	    default_ld=gold
> @@ -546,7 +550,7 @@ if test x$enable_libgomp = x ; then
>  	;;
>      *-*-darwin* | *-*-aix*)
>  	;;
> -    nvptx*-*-*)
> +    nvptx*-*-* | amdgcn*-*-*)
>  	;;
>      *)
>  	noconfigdirs="$noconfigdirs target-libgomp"
> @@ -634,26 +638,6 @@ if test -d ${srcdir}/libvtv; then
>      fi
>  fi
>  
> -
> -# Disable libhsail-rt on unsupported systems.
> -if test -d ${srcdir}/libhsail-rt; then
> -    if test x$enable_libhsail_rt = x; then
> -        AC_MSG_CHECKING([for libhsail-rt support])
> -        if (srcdir=${srcdir}/libhsail-rt; \
> -                . ${srcdir}/configure.tgt; \
> -                test -n "$UNSUPPORTED")
> -        then
> -            AC_MSG_RESULT([no])
> -            unsupported_languages="$unsupported_languages brig"
> -            # This implicitly disables also target-libhsail-rt as it won't
> -            # get added to the build without BRIG FE.
> -        else
> -            AC_MSG_RESULT([yes])
> -        fi
> -    fi
> -fi
> -
> -
>  # Disable libquadmath for some systems.
>  case "${target}" in
>    avr-*-*)
> @@ -672,9 +656,16 @@ case "${target}" in
>      # No hosted I/O support.
>      noconfigdirs="$noconfigdirs target-libssp"
>      ;;
> +  bpf-*-*)
> +    noconfigdirs="$noconfigdirs target-libssp"
> +    ;;
>    powerpc-*-aix* | rs6000-*-aix*)
>      noconfigdirs="$noconfigdirs target-libssp"
>      ;;
> +  pru-*-*)
> +    # No hosted I/O support.
> +    noconfigdirs="$noconfigdirs target-libssp"
> +    ;;
>    rl78-*-*)
>      # libssp uses a misaligned load to trigger a fault, but the RL78
>      # doesn't fault for those - instead, it gives a build-time error
> @@ -688,13 +679,17 @@ case "${target}" in
>  esac
>  
>  # Disable libstdc++-v3 for some systems.
> -# Allow user to override this if they pass --enable-libstdc++-v3
> +# Allow user to override this if they pass --enable-libstdcxx
>  if test "${ENABLE_LIBSTDCXX}" = "default" ; then
>    case "${target}" in
>      *-*-vxworks*)
>        # VxWorks uses the Dinkumware C++ library.
>        noconfigdirs="$noconfigdirs target-libstdc++-v3"
>        ;;
> +    amdgcn*-*-*)
> +      # Not ported/fails to build when using newlib.
> +      noconfigdirs="$noconfigdirs target-libstdc++-v3"
> +      ;;
>      arm*-wince-pe*)
>        # the C++ libraries don't build on top of CE's C libraries
>        noconfigdirs="$noconfigdirs target-libstdc++-v3"
> @@ -702,18 +697,83 @@ if test "${ENABLE_LIBSTDCXX}" = "default" ; then
>      avr-*-*)
>        noconfigdirs="$noconfigdirs target-libstdc++-v3"
>        ;;
> +    bpf-*-*)
> +      noconfigdirs="$noconfigdirs target-libstdc++-v3"
> +      ;;
>      ft32-*-*)
>        noconfigdirs="$noconfigdirs target-libstdc++-v3"
>        ;;
>    esac
>  fi
>  
> +# Disable C++ on systems where it is known to not work.
> +# For testing, you can override this with --enable-languages=c++.
> +case ,${enable_languages}, in
> +  *,c++,*)
> +    ;;
> +  *)
> +      case "${target}" in
> +        bpf-*-*)
> +          unsupported_languages="$unsupported_languages c++"
> +          ;;
> +      esac
> +      ;;
> +esac
> +
> +# Disable Objc on systems where it is known to not work.
> +# For testing, you can override this with --enable-languages=objc.
> +case ,${enable_languages}, in
> +  *,objc,*)
> +    ;;
> +  *)
> +      case "${target}" in
> +        bpf-*-*)
> +          unsupported_languages="$unsupported_languages objc"
> +          ;;
> +      esac
> +      ;;
> +esac
> +
> +# Disable D on systems where it is known to not work.
> +# For testing, you can override this with --enable-languages=d.
> +case ,${enable_languages}, in
> +  *,d,*)
> +    ;;
> +  *)
> +    case "${target}" in
> +      bpf-*-*)
> +	unsupported_languages="$unsupported_languages d"
> +	;;
> +    esac
> +    ;;
> +esac
> +
> +# Disable libphobos on unsupported systems.
> +# For testing, you can override this with --enable-libphobos.
> +if test -d ${srcdir}/libphobos; then
> +    if test x$enable_libphobos = x; then
> +	AC_MSG_CHECKING([for libphobos support])
> +	if (srcdir=${srcdir}/libphobos; \
> +		. ${srcdir}/configure.tgt; \
> +		test "$LIBPHOBOS_SUPPORTED" != "yes")
> +	then
> +	    AC_MSG_RESULT([no])
> +	    noconfigdirs="$noconfigdirs target-libphobos"
> +	else
> +	    AC_MSG_RESULT([yes])
> +	fi
> +    fi
> +fi
> +
>  # Disable Fortran for some systems.
>  case "${target}" in
>    mmix-*-*)
>      # See <http://gcc.gnu.org/ml/gcc-patches/2004-11/msg00572.html>.
>      unsupported_languages="$unsupported_languages fortran"
>      ;;
> +  bpf-*-*)
> +    unsupported_languages="$unsupported_languages fortran"
> +    ;;
>  esac
>  
>  # Disable libffi for some systems.
> @@ -757,6 +817,12 @@ case "${target}" in
>    arm-wince-pe)
>      noconfigdirs="$noconfigdirs target-libffi"
>      ;;
> +  arm*-*-symbianelf*)
> +    noconfigdirs="$noconfigdirs target-libffi"
> +    ;;
> +  bpf-*-*)
> +    noconfigdirs="$noconfigdirs target-libffi"
> +    ;;
>    cris-*-* | crisv32-*-*)
>      case "${target}" in
>        *-*-linux*)
> @@ -803,7 +869,7 @@ esac
>  # Disable the go frontend on systems where it is known to not work. Please keep
>  # this in sync with contrib/config-list.mk.
>  case "${target}" in
> -*-*-darwin* | *-*-cygwin* | *-*-mingw*)
> +*-*-darwin* | *-*-cygwin* | *-*-mingw* | bpf-* )
>      unsupported_languages="$unsupported_languages go"
>      ;;
>  esac
> @@ -835,6 +901,9 @@ if test x$enable_libgo = x; then
>      *-*-cygwin* | *-*-mingw*)
>  	noconfigdirs="$noconfigdirs target-libgo"
>  	;;
> +    bpf-*-*)
> +        noconfigdirs="$noconfigdirs target-libgo"
> +        ;;
>      esac
>  fi
>  
> @@ -860,6 +929,9 @@ case "${target}" in
>    i[[3456789]]86-*-*)
>      libgloss_dir=i386
>      ;;
> +  loongarch*-*-*)
> +    libgloss_dir=loongarch
> +    ;;
>    m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*)
>      libgloss_dir=m68hc11
>      ;;
> @@ -872,6 +944,9 @@ case "${target}" in
>    powerpc*-*-*)
>      libgloss_dir=rs6000
>      ;;
> +  pru-*-*)
> +    libgloss_dir=pru
> +    ;;
>    sparc*-*-*)
>      libgloss_dir=sparc
>      ;;
> @@ -903,6 +978,9 @@ case "${target}" in
>    sparc-*-sunos4*)
>      noconfigdirs="$noconfigdirs target-newlib target-libgloss"
>      ;;
> +  bpf-*-*)
> +    noconfigdirs="$noconfigdirs target-newlib target-libgloss"
> +    ;;
>    *-*-aix*)
>      noconfigdirs="$noconfigdirs target-newlib target-libgloss"
>      ;;
> @@ -951,6 +1029,8 @@ case "${target}" in
>      noconfigdirs="$noconfigdirs ld gas gdb gprof"
>      noconfigdirs="$noconfigdirs sim target-rda"
>      ;;
> +  amdgcn*-*-*)
> +    ;;
>    arm-*-darwin*)
>      noconfigdirs="$noconfigdirs ld gas gdb gprof"
>      noconfigdirs="$noconfigdirs sim target-rda"
> @@ -974,7 +1054,8 @@ case "${target}" in
>    *-*-dragonfly*)
>      ;;
>    *-*-freebsd*)
> -    if test "x$with_gmp" = x && test "x$with_gmp_dir" = x \
> +    if test "x$with_gmp" = x \
> +	&& ! test -d ${srcdir}/gmp \
>  	&& test -f /usr/local/include/gmp.h; then
>        with_gmp=/usr/local
>      fi
> @@ -1014,6 +1095,9 @@ case "${target}" in
>      # newlib is not 64 bit ready
>      noconfigdirs="$noconfigdirs target-newlib target-libgloss"
>      ;;
> +  bpf-*-*)
> +    noconfigdirs="$noconfigdirs target-libobjc target-libbacktrace"
> +    ;;
>    sh*-*-pe|mips*-*-pe|*arm-wince-pe)
>      noconfigdirs="$noconfigdirs tcl tk itcl libgui sim"
>      ;;
> @@ -1232,6 +1316,11 @@ case "${target}" in
>    wasm32-*-*)
>      noconfigdirs="$noconfigdirs ld"
>      ;;
> +  loongarch*-*-linux*)
> +    ;;
> +  loongarch*-*-*)
> +    noconfigdirs="$noconfigdirs gprof"
> +    ;;
>  esac
>  
>  # If we aren't building newlib, then don't build libgloss, since libgloss
> @@ -1267,7 +1356,7 @@ case "${host}" in
>    hppa*-*)	
>      host_makefile_frag="config/mh-pa"
>      ;;
> -  *-*-darwin*)
> +  i?86-*-darwin[[89]]* | i?86-*-darwin1[[0-7]]* | powerpc*-*-darwin*)
>      host_makefile_frag="config/mh-darwin"
>      ;;
>    powerpc-*-aix*)
> @@ -1283,9 +1372,12 @@ if test "${build}" != "${host}" ; then
>    AR_FOR_BUILD=${AR_FOR_BUILD-ar}
>    AS_FOR_BUILD=${AS_FOR_BUILD-as}
>    CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
> +  CPP_FOR_BUILD="${CPP_FOR_BUILD-\$(CC_FOR_BUILD) -E}"
>    CXX_FOR_BUILD=${CXX_FOR_BUILD-g++}
> +  DSYMUTIL_FOR_BUILD=${DSYMUTIL_FOR_BUILD-dsymutil}
>    GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran}
>    GOC_FOR_BUILD=${GOC_FOR_BUILD-gccgo}
> +  GDC_FOR_BUILD=${GDC_FOR_BUILD-gdc}
>    DLLTOOL_FOR_BUILD=${DLLTOOL_FOR_BUILD-dlltool}
>    LD_FOR_BUILD=${LD_FOR_BUILD-ld}
>    NM_FOR_BUILD=${NM_FOR_BUILD-nm}
> @@ -1297,8 +1389,10 @@ else
>    AS_FOR_BUILD="\$(AS)"
>    CC_FOR_BUILD="\$(CC)"
>    CXX_FOR_BUILD="\$(CXX)"
> +  DSYMUTIL_FOR_BUILD="\$(DSYMUTIL)"
>    GFORTRAN_FOR_BUILD="\$(GFORTRAN)"
>    GOC_FOR_BUILD="\$(GOC)"
> +  GDC_FOR_BUILD="\$(GDC)"
>    DLLTOOL_FOR_BUILD="\$(DLLTOOL)"
>    LD_FOR_BUILD="\$(LD)"
>    NM_FOR_BUILD="\$(NM)"
> @@ -1350,6 +1444,7 @@ int main() {}])],
>  fi
>  
>  ACX_PROG_GNAT
> +ACX_PROG_GDC
>  ACX_PROG_CMP_IGNORE_INITIAL
>  
>  AC_ARG_ENABLE([bootstrap],
> @@ -1395,10 +1490,17 @@ case "$have_compiler:$host:$target:$enable_bootstrap" in
>      ;;
>  esac
>  
> -# When bootstrapping with GCC, build stage 1 in C++98 mode to ensure that a
> -# C++98 compiler can still start the bootstrap.
> +# When bootstrapping with GCC, build stage 1 in C++11 mode to ensure that a
> +# C++11 compiler can still start the bootstrap.  Otherwise, if building GCC,
> +# require C++11 (or higher).
>  if test "$enable_bootstrap:$GXX" = "yes:yes"; then
> -  CXX="$CXX -std=gnu++98"
> +  CXX="$CXX -std=c++11"
> +elif test "$have_compiler" = yes; then
> +  AX_CXX_COMPILE_STDCXX(11)
> +
> +  if test "${build}" != "${host}"; then
> +    AX_CXX_COMPILE_STDCXX(11, [], [], [_FOR_BUILD])
> +  fi
>  fi
>  
>  AC_ARG_ENABLE([pgo-build],
> @@ -1504,11 +1606,6 @@ fi
>  
>  # Specify a location for mpfr
>  # check for this first so it ends up on the link line before gmp.
> -AC_ARG_WITH(mpfr-dir,
> -[AS_HELP_STRING([--with-mpfr-dir=PATH], [this option has been REMOVED])],
> -[AC_MSG_ERROR([The --with-mpfr-dir=PATH option has been removed.
> -Use --with-mpfr=PATH or --with-mpfr-include=PATH plus --with-mpfr-lib=PATH])])
> -
>  AC_ARG_WITH(mpfr,
>  [AS_HELP_STRING([--with-mpfr=PATH],
>  		[specify prefix directory for installed MPFR package.
> @@ -1548,11 +1645,6 @@ Building GCC with MPFR in the source tree is only handled for MPFR 3.1.0+.])
>  fi
>  
>  # Specify a location for gmp
> -AC_ARG_WITH(gmp-dir,
> -[AS_HELP_STRING([--with-gmp-dir=PATH], [this option has been REMOVED])],
> -[AC_MSG_ERROR([The --with-gmp-dir=PATH option has been removed.
> -Use --with-gmp=PATH or --with-gmp-include=PATH plus --with-gmp-lib=PATH])])
> -
>  AC_ARG_WITH(gmp,
>  [AS_HELP_STRING([--with-gmp=PATH],
>  		[specify prefix directory for the installed GMP package.
> @@ -1616,12 +1708,12 @@ if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then
>      AC_MSG_CHECKING([for the correct version of mpfr.h])
>      AC_TRY_COMPILE([#include <gmp.h>
>      #include <mpfr.h>],[
> -    #if MPFR_VERSION < MPFR_VERSION_NUM(2,4,0)
> +    #if MPFR_VERSION < MPFR_VERSION_NUM(3,1,0)
>      choke me
>      #endif
>      ], [AC_TRY_COMPILE([#include <gmp.h>
>      #include <mpfr.h>],[
> -    #if MPFR_VERSION < MPFR_VERSION_NUM(2,4,2)
> +    #if MPFR_VERSION < MPFR_VERSION_NUM(3,1,6)
>      choke me
>      #endif
>      ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([buggy but acceptable])])],
> @@ -1656,9 +1748,9 @@ if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then
>      int t;
>      mpfr_init (n);
>      mpfr_init (x);
> -    mpfr_atan2 (n, n, x, GMP_RNDN);
> -    mpfr_erfc (n, x, GMP_RNDN);
> -    mpfr_subnormalize (x, t, GMP_RNDN);
> +    mpfr_atan2 (n, n, x, MPFR_RNDN);
> +    mpfr_erfc (n, x, MPFR_RNDN);
> +    mpfr_subnormalize (x, t, MPFR_RNDN);
>      mpfr_clear(n);
>      mpfr_clear(x);
>      mpc_init2 (c, 53);
> @@ -1676,11 +1768,11 @@ if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then
>  # The library versions listed in the error message below should match
>  # the HARD-minimums enforced above.
>    if test x$have_gmp != xyes; then
> -    AC_MSG_ERROR([Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.
> +    AC_MSG_ERROR([Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+.
>  Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify
>  their locations.  Source code for these libraries can be found at
>  their respective hosting sites as well as at
> -ftp://gcc.gnu.org/pub/gcc/infrastructure/.  See also
> +https://gcc.gnu.org/pub/gcc/infrastructure/.  See also
>  http://gcc.gnu.org/install/prerequisites.html for additional info.  If
>  you obtained GMP, MPFR and/or MPC from a vendor distribution package,
>  make sure that you have installed both the libraries and the header
> @@ -1855,7 +1947,20 @@ AC_SUBST(extra_linker_plugin_flags)
>  AC_ARG_ENABLE(host-shared,
>  [AS_HELP_STRING([--enable-host-shared],
>  		[build host code as shared libraries])],
> -[host_shared=$enableval], [host_shared=no])
> +[host_shared=$enableval
> + case $host in
> +   x86_64-*-darwin* | aarch64-*-darwin*)
> +     if test x$host_shared != xyes ; then
> +       # PIC is the default, and actually cannot be switched off.
> +       echo configure.ac: warning: PIC code is required for the configured target, host-shared setting ignored. 1>&2
> +       host_shared=yes
> +     fi ;;
> +  *) ;;
> + esac],
> +[case $host in
> +  x86_64-*-darwin* | aarch64-*-darwin*) host_shared=yes ;;
> +  *) host_shared=no ;;
> + esac])
>  AC_SUBST(host_shared)
>  
>  # By default, C and C++ are the only stage 1 languages.
> @@ -2070,7 +2175,28 @@ if test -d ${srcdir}/gcc; then
>              ;;
>          esac
>  
> +        # Disable D if no preexisting GDC is available.
> +        case ${add_this_lang}:${language}:${have_gdc} in
> +          yes:d:no)
> +            # Specifically requested language; tell them.
> +            AC_MSG_ERROR([GDC is required to build $language])
> +           ;;
> +          all:d:no)
> +            AC_MSG_WARN([GDC is required to build $language])
> +            add_this_lang=unsupported
> +            ;;
> +          *:d:no)
> +            # Silently disable.
> +            add_this_lang=unsupported
> +            ;;
> +        esac
> +
>          # Disable jit if -enable-host-shared not specified
> +        # but not if building for Mingw. All code in Windows
> +        # is position independent code (PIC).
> +        case $target in
> +          *mingw*) ;;
> +          *)
>            case ${add_this_lang}:${language}:${host_shared} in
>              yes:jit:no)
>  	           # PR jit/64780: explicitly specify --enable-host-shared
> @@ -2094,6 +2220,8 @@ directories, to avoid imposing the performance cost of
>                add_this_lang=unsupported
>                ;;
>  	        esac
> +          ;;
> +        esac
>  
>          # Disable a language that is unsupported by the target.
>  	case "${add_this_lang}: $unsupported_languages " in
> @@ -2130,7 +2258,7 @@ directories, to avoid imposing the performance cost of
>  		  *) stage1_languages="${stage1_languages}${language}," ;;
>  		esac
>  		# We need to bootstrap any supporting libraries.
> -		bootstrap_target_libs="${bootstrap_target_libs}${target_libs},"
> +		bootstrap_target_libs=`echo "${bootstrap_target_libs}${target_libs}," | sed "s/ /,/g"`
>  		;;
>  	    esac
>  	    ;;
> @@ -2804,7 +2932,7 @@ fi
>  # or bootstrap-ubsan, bootstrap it.
>  if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1; then
>    case "$BUILD_CONFIG" in
> -    *bootstrap-asan* | *bootstrap-ubsan* )
> +    *bootstrap-hwasan* | *bootstrap-asan* | *bootstrap-ubsan* )
>        bootstrap_target_libs=${bootstrap_target_libs}target-libsanitizer,
>        bootstrap_fixincludes=yes
>        ;;
> @@ -2817,6 +2945,16 @@ if echo " ${target_configdirs} " | grep " libvtv " > /dev/null 2>&1 &&
>    bootstrap_target_libs=${bootstrap_target_libs}target-libvtv,
>  fi
>  
> +# If we are building libatomic and the list of enabled languages includes the
> +# D frontend, bootstrap it.
> +if echo " ${target_configdirs} " | grep " libatomic " > /dev/null 2>&1; then
> +  case ,${enable_languages}, in
> +    *,d,*)
> +      bootstrap_target_libs=${bootstrap_target_libs}target-libatomic,
> +      ;;
> +  esac
> +fi
> +
>  # Determine whether gdb needs tk/tcl or not.
>  # Use 'maybe' since enable_gdbtk might be true even if tk isn't available
>  # and in that case we want gdb to be built without tk.  Ugh!
> @@ -3354,6 +3492,17 @@ case "${target}" in
>    mep*)
>      FLAGS_FOR_TARGET="$FLAGS_FOR_TARGET -mlibrary"
>      ;;
> +  # The VxWorks support for shared libraries is getting in
> +  # incrementally.  Make sure it doesn't get activated implicitly:
> +  *vxworks*)
> +    if test "${enable_shared-unset}" = unset ; then
> +      enable_shared=no
> +      # So the build of libraries knows ...
> +      target_configargs="${target_configargs} --disable-shared"
> +      # So gcc knows ...
> +      host_configargs="${host_configargs} --disable-shared"
> +    fi
> +    ;;
>  esac
>  
>  # Makefile fragments.
> @@ -3396,12 +3545,15 @@ AC_SUBST(AR_FOR_BUILD)
>  AC_SUBST(AS_FOR_BUILD)
>  AC_SUBST(CC_FOR_BUILD)
>  AC_SUBST(CFLAGS_FOR_BUILD)
> +AC_SUBST(CPP_FOR_BUILD)
>  AC_SUBST(CPPFLAGS_FOR_BUILD)
>  AC_SUBST(CXXFLAGS_FOR_BUILD)
>  AC_SUBST(CXX_FOR_BUILD)
>  AC_SUBST(DLLTOOL_FOR_BUILD)
> +AC_SUBST(DSYMUTIL_FOR_BUILD)
>  AC_SUBST(GFORTRAN_FOR_BUILD)
>  AC_SUBST(GOC_FOR_BUILD)
> +AC_SUBST(GDC_FOR_BUILD)
>  AC_SUBST(LDFLAGS_FOR_BUILD)
>  AC_SUBST(LD_FOR_BUILD)
>  AC_SUBST(NM_FOR_BUILD)
> @@ -3478,6 +3630,7 @@ esac
>  NCN_STRICT_CHECK_TOOLS(AR, ar)
>  NCN_STRICT_CHECK_TOOLS(AS, as)
>  NCN_STRICT_CHECK_TOOLS(DLLTOOL, dlltool)
> +NCN_STRICT_CHECK_TOOLS(DSYMUTIL, dsymutil)
>  NCN_STRICT_CHECK_TOOLS(LD, ld)
>  NCN_STRICT_CHECK_TOOLS(LIPO, lipo)
>  NCN_STRICT_CHECK_TOOLS(NM, nm)
> @@ -3487,12 +3640,14 @@ NCN_STRICT_CHECK_TOOLS(WINDRES, windres)
>  NCN_STRICT_CHECK_TOOLS(WINDMC, windmc)
>  NCN_STRICT_CHECK_TOOLS(OBJCOPY, objcopy)
>  NCN_STRICT_CHECK_TOOLS(OBJDUMP, objdump)
> +NCN_STRICT_CHECK_TOOLS(OTOOL, otool)
>  NCN_STRICT_CHECK_TOOLS(READELF, readelf)
>  AC_SUBST(CC)
>  AC_SUBST(CXX)
>  AC_SUBST(CFLAGS)
>  AC_SUBST(CXXFLAGS)
> -AC_SUBST(PKG_CONFIG_PATH)
> +AC_SUBST(GDC)
> +AC_SUBST(GDCFLAGS)
>  
>  GCC_PLUGIN_OPTION(PLUGIN_OPTION)
>  AR_PLUGIN_OPTION=
> @@ -3504,10 +3659,6 @@ if test -n "$PLUGIN_OPTION"; then
>    if $RANLIB --help 2>&1 | grep -q "\--plugin"; then
>      RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION"
>    fi
> -else
> -  if test "$enable_pgo_build" != "no"; then
> -    AC_MSG_ERROR([AR with --plugin and rc is required for LTO build])
> -  fi
>  fi
>  AC_SUBST(AR_PLUGIN_OPTION)
>  AC_SUBST(RANLIB_PLUGIN_OPTION)
> @@ -3530,15 +3681,18 @@ NCN_STRICT_CHECK_TARGET_TOOLS(CXX_FOR_TARGET, c++ g++ cxx gxx)
>  NCN_STRICT_CHECK_TARGET_TOOLS(GCC_FOR_TARGET, gcc, ${CC_FOR_TARGET})
>  NCN_STRICT_CHECK_TARGET_TOOLS(GFORTRAN_FOR_TARGET, gfortran)
>  NCN_STRICT_CHECK_TARGET_TOOLS(GOC_FOR_TARGET, gccgo)
> +NCN_STRICT_CHECK_TARGET_TOOLS(GDC_FOR_TARGET, gdc)
>  
>  ACX_CHECK_INSTALLED_TARGET_TOOL(AR_FOR_TARGET, ar)
>  ACX_CHECK_INSTALLED_TARGET_TOOL(AS_FOR_TARGET, as)
>  ACX_CHECK_INSTALLED_TARGET_TOOL(DLLTOOL_FOR_TARGET, dlltool)
> +ACX_CHECK_INSTALLED_TARGET_TOOL(DSYMUTIL_FOR_TARGET, dsymutil)
>  ACX_CHECK_INSTALLED_TARGET_TOOL(LD_FOR_TARGET, ld)
>  ACX_CHECK_INSTALLED_TARGET_TOOL(LIPO_FOR_TARGET, lipo)
>  ACX_CHECK_INSTALLED_TARGET_TOOL(NM_FOR_TARGET, nm)
>  ACX_CHECK_INSTALLED_TARGET_TOOL(OBJCOPY_FOR_TARGET, objcopy)
>  ACX_CHECK_INSTALLED_TARGET_TOOL(OBJDUMP_FOR_TARGET, objdump)
> +ACX_CHECK_INSTALLED_TARGET_TOOL(OTOOL_FOR_TARGET, otool)
>  ACX_CHECK_INSTALLED_TARGET_TOOL(RANLIB_FOR_TARGET, ranlib)
>  ACX_CHECK_INSTALLED_TARGET_TOOL(READELF_FOR_TARGET, readelf)
>  ACX_CHECK_INSTALLED_TARGET_TOOL(STRIP_FOR_TARGET, strip)
> @@ -3558,16 +3712,20 @@ GCC_TARGET_TOOL(c++ for libstdc++, RAW_CXX_FOR_TARGET, CXX,
>  		[gcc/xgcc -shared-libgcc -B$$r/$(HOST_SUBDIR)/gcc -nostdinc++ -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs],
>  		c++)
>  GCC_TARGET_TOOL(dlltool, DLLTOOL_FOR_TARGET, DLLTOOL, [binutils/dlltool])
> +GCC_TARGET_TOOL(dsymutil, DSYMUTIL_FOR_TARGET, DSYMUTIL)
>  GCC_TARGET_TOOL(gcc, GCC_FOR_TARGET, , [gcc/xgcc -B$$r/$(HOST_SUBDIR)/gcc/])
>  GCC_TARGET_TOOL(gfortran, GFORTRAN_FOR_TARGET, GFORTRAN,
>  		[gcc/gfortran -B$$r/$(HOST_SUBDIR)/gcc/], fortran)
>  GCC_TARGET_TOOL(gccgo, GOC_FOR_TARGET, GOC,
>  		[gcc/gccgo -B$$r/$(HOST_SUBDIR)/gcc/], go)
> +GCC_TARGET_TOOL(gdc, GDC_FOR_TARGET, GDC,
> +		[gcc/gdc -B$$r/$(HOST_SUBDIR)/gcc/], d)
>  GCC_TARGET_TOOL(ld, LD_FOR_TARGET, LD, [ld/ld-new])
>  GCC_TARGET_TOOL(lipo, LIPO_FOR_TARGET, LIPO)
>  GCC_TARGET_TOOL(nm, NM_FOR_TARGET, NM, [binutils/nm-new])
>  GCC_TARGET_TOOL(objcopy, OBJCOPY_FOR_TARGET, OBJCOPY, [binutils/objcopy])
>  GCC_TARGET_TOOL(objdump, OBJDUMP_FOR_TARGET, OBJDUMP, [binutils/objdump])
> +GCC_TARGET_TOOL(otool, OTOOL_FOR_TARGET, OTOOL)
>  GCC_TARGET_TOOL(ranlib, RANLIB_FOR_TARGET, RANLIB, [binutils/ranlib])
>  GCC_TARGET_TOOL(readelf, READELF_FOR_TARGET, READELF, [binutils/readelf])
>  GCC_TARGET_TOOL(strip, STRIP_FOR_TARGET, STRIP, [binutils/strip-new])
> @@ -3690,8 +3848,8 @@ AC_SUBST(stage2_werror_flag)
>  compare_exclusions="gcc/cc*-checksum\$(objext) | gcc/ada/*tools/*"
>  case "$target" in
>    hppa*64*-*-hpux*) ;;
> -  hppa*-*-hpux*) compare_exclusions="gcc/cc*-checksum\$(objext) | */libgcc/lib2funcs* | gcc/ada/*tools/* | gcc/function-tests.o" ;;
> -  powerpc*-ibm-aix*) compare_exclusions="gcc/cc*-checksum\$(objext) | gcc/ada/*tools/* | *libgomp*\$(objext)" ;;
> +  hppa*-*-hpux*) compare_exclusions="$compare_exclusions | */libgcc/lib2funcs* | gcc/function-tests.o" ;;
> +  powerpc*-ibm-aix*) compare_exclusions="$compare_exclusions | *libgomp*\$(objext)" ;;
>  esac
>  AC_SUBST(compare_exclusions)
>
  
Nick Clifton Oct. 10, 2022, 10:06 a.m. UTC | #4
Hi Jan,

> Hmm, this looks to be due to 08ca783430ac syncing only Makefile.*
> with gcc's, but not configure.ac. The CPPFLAGS_FOR_BUILD issue was
> meanwhile addressed in isolation by commit e472ec9fad6d. Nick -
> what is the general policy / approach of syncing top level files?

 From the MAINTAINERS file at the top level:

   Makefile.*; configure; configure.ac; src-release
	Any global maintainer can approve changes to these
	files, but they should be aware	that they need to
	be kept in sync with their counterparts in the GCC
	repository.  Also please notify the following of
	any committed patches:
		binutils@sourceware.org
		gdb-patches@sourceware.org

So changes to configure.ac should also be submitted to the gcc project.

Cheers
   Nick
  
Alan Modra Oct. 11, 2022, 1:03 p.m. UTC | #5
On Mon, Oct 10, 2022 at 03:50:31PM +0900, Tsukasa OI wrote:
> On 2022/10/10 9:43, Alan Modra via Binutils wrote:
> > To merge with gcc's copy of configure.ac we need to revert changes to
> > configure.ac in the following gcc commits:
> > dc832fb39fc0 2022-08-25
> > fc259b522c0f 2022-06-25
> > Then reapply configure.ac changes in binutils from these binutils
> > commits:
> > 50ad1254d503 2021-01-09
> > bb368aad297f 2022-03-11
> > e5f2f7d901ee 2022-07-26
> > 2cac01e3ffff 2022-09-26
> > Plus copy over gcc's config/ax_cxx_compile_stdcxx.m4, then regenerate
> > configure.  configure.ac diff from current binutila shown below.
> 
> Hmm, generally good (I wasn't sure that applying GCC's configuration
> script's DSYMUTIL and OTOOL substitution is safe enough [because I don't
> have any modern Mac].  As long as this is tested on the GCC side, this
> change is okay).
> 
> One thing I have to point out is, this commit creates an unsubstituted
> variable: PKG_CONFIG_PATH.

Commit 2cac01e3ffff you mean.  Fangrui, would you take a look please?

>  So, we have to create a GCC patch to subst
> this and sync with Binutils.  Am I right?

At one time there was interest in combined binutils+gcc builds, but I
think that is no longer supported by gcc.  At least not actively
supported.  That naturally results in less interest by gcc maintainers
in binutils specific top level patches.  Despite that, some of the gcc
maintainers have done a stellar job in the past of handling these sort
of patches.  However, I know at least one of the four binutils
configure patches I identified has been submitted to the gcc project
already.  No OK given.  I can't tell people to submit patches to gcc
that are ignored, and I also can't reasonably expect gcc folk to
review binutils or gdb patches.  If we're going to continue with
shared top level files, with the gcc repo being the master, then I
think the gcc project needs to extend review and commit rights to
binutils and gdb maintainers for areas that affect binutils and gdb.
  
Tom Tromey Oct. 11, 2022, 6:21 p.m. UTC | #6
>>>>> "Alan" == Alan Modra via Binutils <binutils@sourceware.org> writes:

Alan> To merge with gcc's copy of configure.ac we need to revert changes to
Alan> configure.ac in the following gcc commits:
Alan> dc832fb39fc0 2022-08-25
Alan> fc259b522c0f 2022-06-25
Alan> Then reapply configure.ac changes in binutils from these binutils
Alan> commits:
Alan> 50ad1254d503 2021-01-09
Alan> bb368aad297f 2022-03-11
Alan> e5f2f7d901ee 2022-07-26
Alan> 2cac01e3ffff 2022-09-26
Alan> Plus copy over gcc's config/ax_cxx_compile_stdcxx.m4, then regenerate
Alan> configure.  configure.ac diff from current binutila shown below.

After this commit I get this when running configure:

../binutils-gdb/configure: line 5699: ACX_PROG_GDC: command not found

I didn't look but I suppose some .m4 file has to be copied over from gcc
as well.

Tom
  
Alan Modra Oct. 11, 2022, 11:40 p.m. UTC | #7
On Tue, Oct 11, 2022 at 12:21:44PM -0600, Tom Tromey wrote:
> >>>>> "Alan" == Alan Modra via Binutils <binutils@sourceware.org> writes:
> 
> Alan> To merge with gcc's copy of configure.ac we need to revert changes to
> Alan> configure.ac in the following gcc commits:
> Alan> dc832fb39fc0 2022-08-25
> Alan> fc259b522c0f 2022-06-25
> Alan> Then reapply configure.ac changes in binutils from these binutils
> Alan> commits:
> Alan> 50ad1254d503 2021-01-09
> Alan> bb368aad297f 2022-03-11
> Alan> e5f2f7d901ee 2022-07-26
> Alan> 2cac01e3ffff 2022-09-26
> Alan> Plus copy over gcc's config/ax_cxx_compile_stdcxx.m4, then regenerate
> Alan> configure.  configure.ac diff from current binutila shown below.
> 
> After this commit I get this when running configure:
> 
> ../binutils-gdb/configure: line 5699: ACX_PROG_GDC: command not found
> 
> I didn't look but I suppose some .m4 file has to be copied over from gcc
> as well.

Yes, config/acx.m4 needs refreshing.  Fixed.
  
Tom Tromey Oct. 13, 2022, 4:32 a.m. UTC | #8
>> I didn't look but I suppose some .m4 file has to be copied over from gcc
>> as well.

Alan> Yes, config/acx.m4 needs refreshing.  Fixed.

Thank you.

Tom
  

Patch

diff -U0 -r binutils-2.37/Makefile.in binutils-2.38/Makefile.in
--- binutils-2.37/Makefile.in   2021-07-18 11:47:23.000000000 -0500
+++ binutils-2.38/Makefile.in   2022-02-09 06:04:43.000000000 -0600
@@ -342,0 +367,2 @@ 
+CPP_FOR_BUILD = @CPP_FOR_BUILD@
+CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
@@ -345,0 +372 @@ 
+DSYMUTIL_FOR_BUILD = @DSYMUTIL_FOR_BUILD@
@@ -347,0 +375 @@ 
+GDC_FOR_BUILD = @GDC_FOR_BUILD@
@@ -394,0 +423 @@ 
+DSYMUTIL = @DSYMUTIL@
@@ -398,0 +428 @@ 
+OTOOL = @OTOOL@
@@ -404,0 +435 @@ 
+GDC = @GDC@