Disable target libgrust if we're not building target libstdc++ (was: [PATCH v2 2/4] libgrust: Add libproc_macro and build system)

Message ID 8734xv24dd.fsf@euler.schwinge.homeip.net
State Accepted
Headers
Series Disable target libgrust if we're not building target libstdc++ (was: [PATCH v2 2/4] libgrust: Add libproc_macro and build system) |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

Thomas Schwinge Oct. 27, 2023, 8:32 p.m. UTC
  Hi!

Short Friday evening status update:

On 2023-10-27T16:20:34+0200, I wrote:
> Short Friday afternoon status update:
>
> On 2023-10-27T08:51:12+0100, Iain Sandoe <iain@sandoe.co.uk> wrote:
>>> On 26 Oct 2023, at 09:21, Thomas Schwinge <thomas@codesourcery.com> wrote:
>>> First, I've pushed into GCC upstream Git branch devel/rust/libgrust-v2
>>> the "v2" libgrust changes as posted by Arthur, so that people can easily
>>> test this before it getting into Git master branch.
>>>
>>> I'll myself later try this for GCN and nvptx targets -- in their current
>>> form where they don't support C++ (standard library)
>
> Indeed, this currently fails to build:
>
>     [...]
>     make[3]: Entering directory `[...]/build-gcc/amdgcn-amdhsa/libgrust/libproc_macro'
>     [...]
>     libtool: compile:  [...]/build-gcc/./gcc/xg++ -B[...]/build-gcc/./gcc/ -nostdinc++ -funconfigured-libstdc++-v3 [...] -c [...]/source-gcc/libgrust/libproc_macro/proc_macro.cc
>     xg++: error: unrecognized command-line option ‘-funconfigured-libstdc++-v3’
>     make[3]: *** [proc_macro.lo] Error 1
>     make[3]: Leaving directory `[...]/build-gcc/amdgcn-amdhsa/libgrust/libproc_macro'
>     make[2]: *** [all-recursive] Error 1
>     make[2]: Leaving directory `[...]/build-gcc/amdgcn-amdhsa/libgrust'
>     make[1]: *** [all-target-libgrust] Error 2
>     make[1]: Leaving directory `[...]/build-gcc'
>     make: *** [all] Error 2
>
> ("error: unrecognized command-line option ‘-funconfigured-libstdc++-v3’"
> indeed is the expected outcome if libstdc++ is not available, as I
> understand.)
>
> Same for nvptx-none target.
>
> We need two things: (a) make sure that target libgrust build depends on
> target libstdc++, and (b) disable target libgrust if target libstdc++ is
> not available (and, later, gracefully handle that situation in the Rust
> front end).
>
> As far as I remember, patches exist for (a), and Arthur is going to
> integrate/re-submit those.

In fact, for (a), it seem that we just this one
GCC/Rust commit 6a8b207b9ef7f9038e0cae7766117428783825d8
"libgrust: Add dependency to libstdc++"; see
<https://github.com/Rust-GCC/gccrs/pull/2143>
"Add libstdc++ dependency to libgrust".

> Arthur, before re-submission, feel free to
> first cherr-pick and push'these into the GCC upstream Git branch
> devel/rust/libgrust-v2, so that I can re-test.

> I'm not sure about (b),
> whether that fell out of the (a) changes, too?  I can otherwise look into
> that later.

..., which I've now done.  Indeed that is still broken.  We need, if I
understand this correctly, the attached
"Disable target libgrust if we're not building target libstdc++" to
address that issue.

Pierre-Emmanuel: In this case (that is we cannot build target libgrust
because we're not building target libstdc++), do we also disable host
libgrust, or do we still build that one?  (This can be settled later.)


>>> and in my hacky WIP
>>> trees where C++ (standard library) is supported to some extent.
>
> This does built

..., but only if target libstdc++ already happens to have been built.  If
not, you'll run into funny libtool errors like:

    [...]
    libtool: compile: unrecognized option `-B[...]/build-gcc/amdgcn-amdhsa/libstdc++-v3/src/.libs'
    libtool: compile: Try `libtool --help' for more information.
    make[3]: *** [proc_macro.lo] Error 1
    make[3]: Leaving directory `[...]/build-gcc/amdgcn-amdhsa/libgrust/libproc_macro'
    make[2]: *** [all-recursive] Error 1
    make[2]: Leaving directory `[...]/build-gcc/amdgcn-amdhsa/libgrust'
    make[1]: *** [all-target-libgrust] Error 2
    [...]

(This translates into: target libstdc++ has not (yet) been built;
'[...]/build-gcc/amdgcn-amdhsa/libstdc++-v3/src/.libs' is not (yet)
available.)

Need "libgrust: Add dependency to libstdc++" (see above) to make this
work reliably.


Grüße
 Thomas


> -- but the default multilib only, as Iain already
> reported:
>
>>> (This
>>> should, roughly, match C++ functionality (not) provided by a number of
>>> other GCC "embedded" targets.)
>>
>> on Darwin, it works for later systems without multilibs, but fails to build multilibs.
>
> I see that, too.
>
>> —— so….
>>
>> With the patch below bootstrap suceeded on x86_64-darwin17 and produced a correct
>> architecture multilib.
>
> Confirmed, thanks!
>
>> Of course, there is no way to test this at the moment - I’d suggest
>> that the next step might be something small in functionality that can allow at least one
>> test to be wired up.
>
> ACK.
>
>> ^^^ this is “lightly tested” of course, as I cycle through other versions of the OS will see
>> how it pans out.
>>
>> Do you want me to make a PR with this change against upstream?
>
> Yes, please.  (But no hurry.)
>
>
> Grüße
>  Thomas
>
>
>> From 027bc2c5255a6f1b75592e896dd99fac55bfb9b8 Mon Sep 17 00:00:00 2001
>> From: Iain Sandoe <iain@sandoe.co.uk>
>> Date: Thu, 26 Oct 2023 23:19:36 +0100
>> Subject: [PATCH] libgrust: enable multilib
>>
>> Most of this change is the regenerated files, the multilib config macro
>> was already present, but commented out.
>>
>> libgrust/ChangeLog:
>>
>>       * Makefile.in:
>>       * aclocal.m4: Regenerate.
>>       * configure: Regenerate.
>>       * configure.ac: Uncomment AM_ENABLE_MULTILIB.
>>       * libproc_macro/Makefile.in:
>>
>> Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
>> ---
>>  libgrust/Makefile.in               |  2 +
>>  libgrust/aclocal.m4                |  1 +
>>  libgrust/configure                 | 68 ++++++++++++++++++++++++++++--
>>  libgrust/configure.ac              |  2 +-
>>  libgrust/libproc_macro/Makefile.in |  2 +
>>  5 files changed, 71 insertions(+), 4 deletions(-)
>>
>> diff --git a/libgrust/Makefile.in b/libgrust/Makefile.in
>> index bc9b6cc227a..2dc39adff24 100644
>> --- a/libgrust/Makefile.in
>> +++ b/libgrust/Makefile.in
>> @@ -93,6 +93,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
>>  am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
>>       $(top_srcdir)/../config/depstand.m4 \
>>       $(top_srcdir)/../config/lead-dot.m4 \
>> +     $(top_srcdir)/../config/multi.m4 \
>>       $(top_srcdir)/../config/no-executables.m4 \
>>       $(top_srcdir)/../config/override.m4 \
>>       $(top_srcdir)/../config/toolexeclibdir.m4 \
>> @@ -275,6 +276,7 @@ localedir = @localedir@
>>  localstatedir = @localstatedir@
>>  mandir = @mandir@
>>  mkdir_p = @mkdir_p@
>> +multi_basedir = @multi_basedir@
>>  oldincludedir = @oldincludedir@
>>  pdfdir = @pdfdir@
>>  prefix = @prefix@
>> diff --git a/libgrust/aclocal.m4 b/libgrust/aclocal.m4
>> index 1bd42c34d74..5d808f05afa 100644
>> --- a/libgrust/aclocal.m4
>> +++ b/libgrust/aclocal.m4
>> @@ -1250,6 +1250,7 @@ AC_SUBST([am__untar])
>>  m4_include([../config/acx.m4])
>>  m4_include([../config/depstand.m4])
>>  m4_include([../config/lead-dot.m4])
>> +m4_include([../config/multi.m4])
>>  m4_include([../config/no-executables.m4])
>>  m4_include([../config/override.m4])
>>  m4_include([../config/toolexeclibdir.m4])
>> diff --git a/libgrust/configure b/libgrust/configure
>> index 2756bddd10b..282027873bd 100755
>> --- a/libgrust/configure
>> +++ b/libgrust/configure
>> @@ -732,6 +732,7 @@ build_os
>>  build_vendor
>>  build_cpu
>>  build
>> +multi_basedir
>>  target_alias
>>  host_alias
>>  build_alias
>> @@ -773,6 +774,7 @@ SHELL'
>>  ac_subst_files=''
>>  ac_user_opts='
>>  enable_option_checking
>> +enable_multilib
>>  enable_maintainer_mode
>>  enable_silent_rules
>>  with_toolexeclibdir
>> @@ -1421,6 +1423,7 @@ 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]
>> +  --enable-multilib       build many library versions (default)
>>    --enable-maintainer-mode
>>                            enable make rules and dependencies not useful (and
>>                            sometimes confusing) to the casual installer
>> @@ -2376,7 +2379,43 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
>>  ac_config_files="$ac_config_files Makefile"
>>
>>
>> -# AM_ENABLE_MULTILIB(, ..)
>> +# Default to --enable-multilib
>> +# Check whether --enable-multilib was given.
>> +if test "${enable_multilib+set}" = set; then :
>> +  enableval=$enable_multilib; case "$enableval" in
>> +  yes) multilib=yes ;;
>> +  no)  multilib=no ;;
>> +  *)   as_fn_error $? "bad value $enableval for multilib option" "$LINENO" 5 ;;
>> + esac
>> +else
>> +  multilib=yes
>> +fi
>> +
>> +
>> +# We may get other options which we leave undocumented:
>> +# --with-target-subdir, --with-multisrctop, --with-multisubdir
>> +# See config-ml.in if you want the gory details.
>> +
>> +if test "$srcdir" = "."; then
>> +  if test "$with_target_subdir" != "."; then
>> +    multi_basedir="$srcdir/$with_multisrctop../.."
>> +  else
>> +    multi_basedir="$srcdir/$with_multisrctop.."
>> +  fi
>> +else
>> +  multi_basedir="$srcdir/.."
>> +fi
>> +
>> +
>> +# Even if the default multilib is not a cross compilation,
>> +# it may be that some of the other multilibs are.
>> +if test $cross_compiling = no && test $multilib = yes \
>> +   && test "x${with_multisubdir}" != x ; then
>> +   cross_compiling=maybe
>> +fi
>> +
>> +ac_config_commands="$ac_config_commands default-1"
>> +
>>
>>  # Do not delete or change the following two lines.  For why, see
>>  # http://gcc.gnu.org/ml/libstdc++/2003-07/msg00451.html
>> @@ -12512,7 +12551,7 @@ else
>>    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
>>    lt_status=$lt_dlunknown
>>    cat > conftest.$ac_ext <<_LT_EOF
>> -#line 12515 "configure"
>> +#line 12554 "configure"
>>  #include "confdefs.h"
>>
>>  #if HAVE_DLFCN_H
>> @@ -12618,7 +12657,7 @@ else
>>    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
>>    lt_status=$lt_dlunknown
>>    cat > conftest.$ac_ext <<_LT_EOF
>> -#line 12621 "configure"
>> +#line 12660 "configure"
>>  #include "confdefs.h"
>>
>>  #if HAVE_DLFCN_H
>> @@ -16804,6 +16843,20 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
>>  #
>>  # INIT-COMMANDS
>>  #
>> +
>> +srcdir="$srcdir"
>> +host="$host"
>> +target="$target"
>> +with_multisubdir="$with_multisubdir"
>> +with_multisrctop="$with_multisrctop"
>> +with_target_subdir="$with_target_subdir"
>> +ac_configure_args="${multilib_arg} ${ac_configure_args}"
>> +multi_basedir="$multi_basedir"
>> +CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
>> +CC="$CC"
>> +CXX="$CXX"
>> +GFORTRAN="$GFORTRAN"
>> +GDC="$GDC"
>>  AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
>>
>>
>> @@ -17175,6 +17228,7 @@ for ac_config_target in $ac_config_targets
>>  do
>>    case $ac_config_target in
>>      "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
>> +    "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
>>      "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
>>      "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
>>      "libproc_macro/Makefile") CONFIG_FILES="$CONFIG_FILES libproc_macro/Makefile" ;;
>> @@ -17607,6 +17661,14 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
>>
>>
>>    case $ac_file$ac_mode in
>> +    "default-1":C)
>> +# Only add multilib support code if we just rebuilt the top-level
>> +# Makefile.
>> +case " $CONFIG_FILES " in
>> + *" Makefile "*)
>> +   ac_file=Makefile . ${multi_basedir}/config-ml.in
>> +   ;;
>> +esac ;;
>>      "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
>>    # Older Autoconf quotes --file arguments for eval, but not when files
>>    # are listed without --file.  Let's play safe and only enable the eval
>> diff --git a/libgrust/configure.ac b/libgrust/configure.ac
>> index 7aed489a643..d75aa632462 100644
>> --- a/libgrust/configure.ac
>> +++ b/libgrust/configure.ac
>> @@ -2,7 +2,7 @@ AC_INIT([libgrust], version-unused,,librust)
>>  AC_CONFIG_SRCDIR(Makefile.am)
>>  AC_CONFIG_FILES([Makefile])
>>
>> -# AM_ENABLE_MULTILIB(, ..)
>> +AM_ENABLE_MULTILIB(, ..)
>>
>>  # Do not delete or change the following two lines.  For why, see
>>  # http://gcc.gnu.org/ml/libstdc++/2003-07/msg00451.html
>> diff --git a/libgrust/libproc_macro/Makefile.in b/libgrust/libproc_macro/Makefile.in
>> index d3a39736679..46eb6484094 100644
>> --- a/libgrust/libproc_macro/Makefile.in
>> +++ b/libgrust/libproc_macro/Makefile.in
>> @@ -95,6 +95,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
>>  am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
>>       $(top_srcdir)/../config/depstand.m4 \
>>       $(top_srcdir)/../config/lead-dot.m4 \
>> +     $(top_srcdir)/../config/multi.m4 \
>>       $(top_srcdir)/../config/no-executables.m4 \
>>       $(top_srcdir)/../config/override.m4 \
>>       $(top_srcdir)/../config/toolexeclibdir.m4 \
>> @@ -316,6 +317,7 @@ localedir = @localedir@
>>  localstatedir = @localstatedir@
>>  mandir = @mandir@
>>  mkdir_p = @mkdir_p@
>> +multi_basedir = @multi_basedir@
>>  oldincludedir = @oldincludedir@
>>  pdfdir = @pdfdir@
>>  prefix = @prefix@
>> --
>> 2.39.2 (Apple Git-143)
>>
>>
>>>
>>>
>>> Then:
>>>
>>> On 2023-10-25T13:06:46+0200, Arthur Cohen <arthur.cohen@embecosm.com> wrote:
>>>> From: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
>>>>
>>>> Add some dummy files in libproc_macro along with its build system.
>>>
>>> I've not reviewed the build system in detail, just had a very quick look.
>>>
>>> Three instances of 'librust'; should be 'libgrust':
>>>
>>>    configure.ac:AC_INIT([libgrust], version-unused,,librust)
>>>
>>>    configure.ac:AC_MSG_NOTICE([librust has been configured.])
>>>
>>>    Makefile.am:        "TARGET_LIB_PATH_librust=$(TARGET_LIB_PATH_librust)" \
>>>
>>> Compared to libgomp (which I'm reasonably familiar with), I found missing
>>> in 'libgrust' at 'configure'-level:
>>>
>>>      --enable-multilib       build many library versions (default)
>>>
>>>      --disable-werror        disable building with -Werror
>>>
>>>      --enable-symvers=STYLE  enables symbol versioning of the shared library
>>>                              [default=yes]
>>>
>>>      --enable-cet            enable Intel CET in target libraries [default=auto]
>>>
>>>      --with-gcc-major-version-only
>>>                              use only GCC major number in filesystem paths
>>>
>>> I can't tell off-hand whether all these are important, however.
>>>
>>> Additionally, the new one that's being discussed in
>>> <https://github.com/Rust-GCC/gccrs/issues/2714>
>>> 'Update libgrust for upstream GCC commit 6a6d3817afa02bbcd2388c8e005da6faf88932f1 "Config,Darwin: Allow for configuring Darwin to use embedded runpath"'.
>>>
>>>
>>> Grüße
>>> Thomas
>>>
>>>
>>>> libgrust/Changelog:
>>>>
>>>>      * Makefile.am: New file.
>>>>      * configure.ac: New file.
>>>>      * libproc_macro/Makefile.am: New file.
>>>>      * libproc_macro/proc_macro.cc: New file.
>>>>      * libproc_macro/proc_macro.h: New file.
>>>>
>>>> Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
>>>> ---
>>>> libgrust/Makefile.am                 |  68 ++++++++++++++++
>>>> libgrust/configure.ac                | 113 +++++++++++++++++++++++++++
>>>> libgrust/libproc_macro/Makefile.am   |  58 ++++++++++++++
>>>> libgrust/libproc_macro/proc_macro.cc |   7 ++
>>>> libgrust/libproc_macro/proc_macro.h  |   7 ++
>>>> 5 files changed, 253 insertions(+)
>>>> create mode 100644 libgrust/Makefile.am
>>>> create mode 100644 libgrust/configure.ac
>>>> create mode 100644 libgrust/libproc_macro/Makefile.am
>>>> create mode 100644 libgrust/libproc_macro/proc_macro.cc
>>>> create mode 100644 libgrust/libproc_macro/proc_macro.h
>>>>
>>>> diff --git a/libgrust/Makefile.am b/libgrust/Makefile.am
>>>> new file mode 100644
>>>> index 00000000000..8e5274922c5
>>>> --- /dev/null
>>>> +++ b/libgrust/Makefile.am
>>>> @@ -0,0 +1,68 @@
>>>> +AUTOMAKE_OPTIONS = 1.8 foreign
>>>> +
>>>> +SUFFIXES = .c .rs .def .o .lo .a
>>>> +
>>>> +ACLOCAL_AMFLAGS = -I . -I .. -I ../config
>>>> +
>>>> +AM_CFLAGS = -I $(srcdir)/../libgcc -I $(MULTIBUILDTOP)../../gcc/include
>>>> +
>>>> +TOP_GCCDIR := $(shell cd $(top_srcdir) && cd .. && pwd)
>>>> +
>>>> +GCC_DIR = $(TOP_GCCDIR)/gcc
>>>> +RUST_SRC = $(GCC_DIR)/rust
>>>> +
>>>> +toolexeclibdir=@toolexeclibdir@
>>>> +toolexecdir=@toolexecdir@
>>>> +
>>>> +SUBDIRS = libproc_macro
>>>> +
>>>> +RUST_BUILDDIR := $(shell pwd)
>>>> +
>>>> +# Work around what appears to be a GNU make bug handling MAKEFLAGS
>>>> +# values defined in terms of make variables, as is the case for CC and
>>>> +# friends when we are called from the top level Makefile.
>>>> +AM_MAKEFLAGS = \
>>>> +        "GCC_DIR=$(GCC_DIR)" \
>>>> +        "RUST_SRC=$(RUST_SRC)" \
>>>> +     "AR_FLAGS=$(AR_FLAGS)" \
>>>> +     "CC_FOR_BUILD=$(CC_FOR_BUILD)" \
>>>> +     "CC_FOR_TARGET=$(CC_FOR_TARGET)" \
>>>> +     "RUST_FOR_TARGET=$(RUST_FOR_TARGET)" \
>>>> +     "CFLAGS=$(CFLAGS)" \
>>>> +     "CXXFLAGS=$(CXXFLAGS)" \
>>>> +     "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
>>>> +     "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \
>>>> +     "INSTALL=$(INSTALL)" \
>>>> +     "INSTALL_DATA=$(INSTALL_DATA)" \
>>>> +     "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
>>>> +     "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
>>>> +     "LDFLAGS=$(LDFLAGS)" \
>>>> +     "LIBCFLAGS=$(LIBCFLAGS)" \
>>>> +     "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \
>>>> +     "MAKE=$(MAKE)" \
>>>> +     "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \
>>>> +     "PICFLAG=$(PICFLAG)" \
>>>> +     "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \
>>>> +     "SHELL=$(SHELL)" \
>>>> +     "RUNTESTFLAGS=$(RUNTESTFLAGS)" \
>>>> +     "exec_prefix=$(exec_prefix)" \
>>>> +     "infodir=$(infodir)" \
>>>> +     "libdir=$(libdir)" \
>>>> +     "includedir=$(includedir)" \
>>>> +     "prefix=$(prefix)" \
>>>> +     "tooldir=$(tooldir)" \
>>>> +     "gxx_include_dir=$(gxx_include_dir)" \
>>>> +     "AR=$(AR)" \
>>>> +     "AS=$(AS)" \
>>>> +     "LD=$(LD)" \
>>>> +     "RANLIB=$(RANLIB)" \
>>>> +     "NM=$(NM)" \
>>>> +     "NM_FOR_BUILD=$(NM_FOR_BUILD)" \
>>>> +     "NM_FOR_TARGET=$(NM_FOR_TARGET)" \
>>>> +     "DESTDIR=$(DESTDIR)" \
>>>> +     "WERROR=$(WERROR)" \
>>>> +        "TARGET_LIB_PATH=$(TARGET_LIB_PATH)" \
>>>> +        "TARGET_LIB_PATH_librust=$(TARGET_LIB_PATH_librust)" \
>>>> +     "LIBTOOL=$(RUST_BUILDDIR)/libtool"
>>>> +
>>>> +include $(top_srcdir)/../multilib.am
>>>> diff --git a/libgrust/configure.ac b/libgrust/configure.ac
>>>> new file mode 100644
>>>> index 00000000000..7aed489a643
>>>> --- /dev/null
>>>> +++ b/libgrust/configure.ac
>>>> @@ -0,0 +1,113 @@
>>>> +AC_INIT([libgrust], version-unused,,librust)
>>>> +AC_CONFIG_SRCDIR(Makefile.am)
>>>> +AC_CONFIG_FILES([Makefile])
>>>> +
>>>> +# AM_ENABLE_MULTILIB(, ..)
>>>> +
>>>> +# Do not delete or change the following two lines.  For why, see
>>>> +# http://gcc.gnu.org/ml/libstdc++/2003-07/msg00451.html
>>>> +AC_CANONICAL_SYSTEM
>>>> +target_alias=${target_alias-$host_alias}
>>>> +AC_SUBST(target_alias)
>>>> +
>>>> +# Automake should never attempt to rebuild configure
>>>> +AM_MAINTAINER_MODE
>>>> +
>>>> +AM_INIT_AUTOMAKE([1.15.1 foreign no-dist -Wall])
>>>> +
>>>> +# Make sure we don't test executables when making cross-tools.
>>>> +GCC_NO_EXECUTABLES
>>>> +
>>>> +
>>>> +# Add the ability to change LIBTOOL directory
>>>> +GCC_WITH_TOOLEXECLIBDIR
>>>> +
>>>> +# Use system specific extensions
>>>> +AC_USE_SYSTEM_EXTENSIONS
>>>> +
>>>> +
>>>> +# Checks for header files.
>>>> +AC_HEADER_STDC
>>>> +AC_HEADER_SYS_WAIT
>>>> +AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h \
>>>> +                 time.h sys/stat.h wchar.h)
>>>> +
>>>> +# Check for tools
>>>> +AM_PROG_AR
>>>> +AC_PROG_CC
>>>> +AC_PROG_CXX
>>>> +AM_PROG_AS
>>>> +AC_PROG_MAKE_SET
>>>> +AC_PROG_INSTALL
>>>> +
>>>> +# Enable libtool
>>>> +LT_INIT
>>>> +
>>>> +# target_noncanonical variables...
>>>> +AC_CANONICAL_HOST
>>>> +ACX_NONCANONICAL_HOST
>>>> +ACX_NONCANONICAL_TARGET
>>>> +GCC_TOPLEV_SUBDIRS
>>>> +
>>>> +AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
>>>> +AC_ARG_ENABLE(version-specific-runtime-libs,
>>>> +[  --enable-version-specific-runtime-libs    Specify that runtime libraries should be installed in a compiler-specific directory ],
>>>> +[case "$enableval" in
>>>> + yes) version_specific_libs=yes ;;
>>>> + no)  version_specific_libs=no ;;
>>>> + *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
>>>> + esac],
>>>> +[version_specific_libs=no])
>>>> +AC_MSG_RESULT($version_specific_libs)
>>>> +
>>>> +toolexecdir=no
>>>> +toolexeclibdir=no
>>>> +
>>>> +# Calculate toolexeclibdir
>>>> +# Also toolexecdir, though it's only used in toolexeclibdir
>>>> +case ${version_specific_libs} in
>>>> +  yes)
>>>> +    # Need the gcc compiler version to know where to install libraries
>>>> +    # and header files if --enable-version-specific-runtime-libs option
>>>> +    # is selected.
>>>> +    toolexecdir='$(libdir)/gcc/$(target_noncanonical)'
>>>> +    toolexeclibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)'
>>>> +    ;;
>>>> +  no)
>>>> +    if test -n "$with_cross_host" &&
>>>> +       test x"$with_cross_host" != x"no"; then
>>>> +      # Install a library built with a cross compiler in tooldir, not libdir.
>>>> +      toolexecdir='$(exec_prefix)/$(target_noncanonical)'
>>>> +      toolexeclibdir='$(toolexecdir)/lib'
>>>> +    else
>>>> +      toolexecdir='$(libdir)/gcc-lib/$(target_noncanonical)'
>>>> +      toolexeclibdir='$(libdir)'
>>>> +    fi
>>>> +    multi_os_directory=`$CC -print-multi-os-directory`
>>>> +    case $multi_os_directory in
>>>> +      .) ;; # Avoid trailing /.
>>>> +      *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
>>>> +    esac
>>>> +    ;;
>>>> +esac
>>>> +
>>>> +AC_SUBST(toolexecdir)
>>>> +AC_SUBST(toolexeclibdir)
>>>> +
>>>> +
>>>> +AC_CONFIG_FILES(AC_FOREACH([DIR], [libproc_macro], [DIR/Makefile ]),
>>>> + [ cat > vpsed$$ << \_EOF
>>>> +s!`test -f '$<' || echo '$(srcdir)/'`!!
>>>> +_EOF
>>>> +   sed -f vpsed$$ $ac_file > tmp$$
>>>> +   mv tmp$$ $ac_file
>>>> +   rm vpsed$$
>>>> +   echo 'MULTISUBDIR =' >> $ac_file
>>>> +   ml_norecursion=yes
>>>> +   AS_UNSET([ml_norecursion])
>>>> +])
>>>> +
>>>> +
>>>> +AC_MSG_NOTICE([librust has been configured.])
>>>> +
>>>> +AC_OUTPUT
>>>> diff --git a/libgrust/libproc_macro/Makefile.am b/libgrust/libproc_macro/Makefile.am
>>>> new file mode 100644
>>>> index 00000000000..1e61d12e506
>>>> --- /dev/null
>>>> +++ b/libgrust/libproc_macro/Makefile.am
>>>> @@ -0,0 +1,58 @@
>>>> +SUFFIXES = .cc .o .a .lo .la
>>>> +
>>>> +ACLOCAL_AMFLAGS = -I .. -I ../../config
>>>> +
>>>> +toolexeclibdir=@toolexeclibdir@
>>>> +toolexecdir=@toolexecdir@
>>>> +
>>>> +# Work around what appears to be a GNU make bug handling MAKEFLAGS
>>>> +# values defined in terms of make variables, as is the case for CC and
>>>> +# friends when we are called from the top level Makefile.
>>>> +AM_MAKEFLAGS = \
>>>> +     "AR_FLAGS=$(AR_FLAGS)" \
>>>> +     "CC_FOR_BUILD=$(CC_FOR_BUILD)" \
>>>> +     "CC_FOR_TARGET=$(CC_FOR_TARGET)" \
>>>> +     "CFLAGS=$(CFLAGS)" \
>>>> +     "CXXFLAGS=$(CXXFLAGS)" \
>>>> +     "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
>>>> +     "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \
>>>> +     "INSTALL=$(INSTALL)" \
>>>> +     "INSTALL_DATA=$(INSTALL_DATA)" \
>>>> +     "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
>>>> +     "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
>>>> +     "LDFLAGS=$(LDFLAGS)" \
>>>> +     "LIBCFLAGS=$(LIBCFLAGS)" \
>>>> +     "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \
>>>> +     "MAKE=$(MAKE)" \
>>>> +     "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \
>>>> +     "PICFLAG=$(PICFLAG)" \
>>>> +     "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \
>>>> +     "SHELL=$(SHELL)" \
>>>> +     "RUNTESTFLAGS=$(RUNTESTFLAGS)" \
>>>> +     "exec_prefix=$(exec_prefix)" \
>>>> +     "infodir=$(infodir)" \
>>>> +     "libdir=$(libdir)" \
>>>> +     "includedir=$(includedir)" \
>>>> +     "prefix=$(prefix)" \
>>>> +     "tooldir=$(tooldir)" \
>>>> +     "gxx_include_dir=$(gxx_include_dir)" \
>>>> +     "AR=$(AR)" \
>>>> +     "AS=$(AS)" \
>>>> +     "LD=$(LD)" \
>>>> +     "RANLIB=$(RANLIB)" \
>>>> +     "NM=$(NM)" \
>>>> +     "NM_FOR_BUILD=$(NM_FOR_BUILD)" \
>>>> +     "NM_FOR_TARGET=$(NM_FOR_TARGET)" \
>>>> +     "DESTDIR=$(DESTDIR)" \
>>>> +     "WERROR=$(WERROR)" \
>>>> +        "TARGET_LIB_PATH=$(TARGET_LIB_PATH)" \
>>>> +        "TARGET_LIB_PATH_libgm2=$(TARGET_LIB_PATH_libgm2)"
>>>> +
>>>> +toolexeclib_LTLIBRARIES = libproc_macro.la
>>>> +
>>>> +libproc_macro_la_SOURCES = \
>>>> +     proc_macro.cc
>>>> +
>>>> +include_HEADERS = \
>>>> +     proc_macro.h
>>>> +
>>>> diff --git a/libgrust/libproc_macro/proc_macro.cc b/libgrust/libproc_macro/proc_macro.cc
>>>> new file mode 100644
>>>> index 00000000000..d13276294aa
>>>> --- /dev/null
>>>> +++ b/libgrust/libproc_macro/proc_macro.cc
>>>> @@ -0,0 +1,7 @@
>>>> +#include "proc_macro.h"
>>>> +
>>>> +int
>>>> +test ()
>>>> +{
>>>> +  return 0;
>>>> +}
>>>> diff --git a/libgrust/libproc_macro/proc_macro.h b/libgrust/libproc_macro/proc_macro.h
>>>> new file mode 100644
>>>> index 00000000000..2c96b3de685
>>>> --- /dev/null
>>>> +++ b/libgrust/libproc_macro/proc_macro.h
>>>> @@ -0,0 +1,7 @@
>>>> +#ifndef PROC_MACRO_H
>>>> +#define PROC_MACRO_H
>>>> +
>>>> +int
>>>> +test ();
>>>> +
>>>> +#endif /* ! PROC_MACRO_H */
>>>> --
>>>> 2.42.0
>>> -----------------
>>> Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
> -----------------
> Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955


-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
  

Patch

From 9efa75c6fa0a24c42d7be1e40ac6cd5f26cab045 Mon Sep 17 00:00:00 2001
From: Thomas Schwinge <thomas@codesourcery.com>
Date: Fri, 27 Oct 2023 21:53:03 +0200
Subject: [PATCH] Disable target libgrust if we're not building target
 libstdc++

This complements "libgrust: Add dependency to libstdc++".
---
 configure    | 11 +++++++++++
 configure.ac | 11 +++++++++++
 2 files changed, 22 insertions(+)

diff --git a/configure b/configure
index 2b35e4b300b6..a4cf47df42e5 100755
--- a/configure
+++ b/configure
@@ -9259,6 +9259,17 @@  case ,${enable_languages}, in
     ;;
 esac
 
+case ,${enable_languages}, in
+  *,rust,*)
+    case " ${noconfigdirs} " in
+      *\ target-libstdc++-v3\ *)
+        # Disable target libgrust if we're not building target libstdc++.
+        noconfigdirs="$noconfigdirs target-libgrust"
+        ;;
+    esac
+    ;;
+esac
+
 # If gcc/ is not in the source tree then we'll not be building a
 # target compiler, assume in that case we don't want to build any
 # target libraries or tools.
diff --git a/configure.ac b/configure.ac
index d65848b9fe09..2dffdbf49ce2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2455,6 +2455,17 @@  case ,${enable_languages}, in
     ;;
 esac
 
+case ,${enable_languages}, in
+  *,rust,*)
+    case " ${noconfigdirs} " in
+      *\ target-libstdc++-v3\ *)
+        # Disable target libgrust if we're not building target libstdc++.
+        noconfigdirs="$noconfigdirs target-libgrust"
+        ;;
+    esac
+    ;;
+esac
+
 # If gcc/ is not in the source tree then we'll not be building a
 # target compiler, assume in that case we don't want to build any
 # target libraries or tools.
-- 
2.40.1