Hi! 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), and in my hacky WIP trees where C++ (standard library) is supported to some extent. (This should, roughly, match C++ functionality (not) provided by a number of other GCC "embedded" targets.) Then: On 2023-10-25T13:06:46+0200, Arthur Cohen <arthur.co...@embecosm.com> wrote: > From: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@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.pa...@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