On Wed, Sep 20, 2023 at 2:04 PM Arthur Cohen <arthur.co...@embecosm.com> wrote: > > From: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com> > > This patch series adds the build system changes to allow the Rust > frontend to develop and distribute its own libraries. The first library > we have been working on is the `proc_macro` library, comprised of a C++ > library as well as a user-facing Rust library. > > Follow up commits containing the actual library code will be committed. > Should I submit patches to the MAINTAINERS file to allow Philip and I to > commit to this folder without first approval?
I think the Rust language frontend maintainership implicitly includes the rust runtime libraries. > This first commit adds a simple `libgrust` folder with on top of which the > full library will be built. OK. > All the best, > > Arthur > > ----- > > Add some dummy files in libproc_macro along with it's build system. > > ChangeLog: > > * libgrust/Makefile.am: New file. > * libgrust/configure.ac: New file. > * libgrust/libproc_macro/Makefile.am: New file. > * libgrust/libproc_macro/proc_macro.cc: New file. > * libgrust/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 >