public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Thomas Schwinge <thomas@codesourcery.com>
To: Arthur Cohen <arthur.cohen@embecosm.com>,
	Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Cc: <gcc-rust@gcc.gnu.org>, <gcc-patches@gcc.gnu.org>,
	Iain Sandoe <iain@sandoe.co.uk>
Subject: Re: [PATCH v2 2/4] libgrust: Add libproc_macro and build system
Date: Thu, 26 Oct 2023 10:21:18 +0200	[thread overview]
Message-ID: <87edhhu741.fsf@euler.schwinge.homeip.net> (raw)
In-Reply-To: <20231025110658.1232737-3-arthur.cohen@embecosm.com>

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.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

  reply	other threads:[~2023-10-26  8:21 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-25 11:06 [PATCH v2 1/4] libgrust: Add entry for maintainers and stub changelog file Arthur Cohen
2023-10-25 11:06 ` [PATCH v2 2/4] libgrust: Add libproc_macro and build system Arthur Cohen
2023-10-26  8:21   ` Thomas Schwinge [this message]
2023-10-27  7:51     ` Iain Sandoe
2023-10-27 14:20       ` Thomas Schwinge
2023-10-27 20:32         ` Disable target libgrust if we're not building target libstdc++ (was: [PATCH v2 2/4] libgrust: Add libproc_macro and build system) Thomas Schwinge
2023-12-18 16:58       ` libgrust: 'AM_ENABLE_MULTILIB' only for target builds [PR113056] " Thomas Schwinge
2024-01-04 15:43         ` libgrust: 'AM_ENABLE_MULTILIB' only for target builds [PR113056] Pierre-Emmanuel Patry
2023-12-15  9:53     ` [PATCH v2 2/4] libgrust: Add libproc_macro and build system Thomas Schwinge
2024-01-16 15:07       ` Jason Merrill
2023-10-25 11:06 ` [PATCH v2 3/4] build: Add libgrust as compilation modules Arthur Cohen
2023-10-25 11:09   ` [PATCH v2 4/4] build: Regenerate build files Arthur Cohen
2023-10-25 21:40   ` [PATCH v2 3/4] build: Add libgrust as compilation modules Thomas Schwinge
2023-10-26 12:07     ` Arthur Cohen
2023-10-27 10:24     ` Only build host libgrust if the Rust language is enabled (was: [PATCH v2 3/4] build: Add libgrust as compilation modules) Thomas Schwinge
2023-10-25 11:06 ` [PATCH v2 4/4] build: Regenerate build files Arthur Cohen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87edhhu741.fsf@euler.schwinge.homeip.net \
    --to=thomas@codesourcery.com \
    --cc=arthur.cohen@embecosm.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=gcc-rust@gcc.gnu.org \
    --cc=iain@sandoe.co.uk \
    --cc=pierre-emmanuel.patry@embecosm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).