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

Reply via email to