* [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks.
@ 2023-09-07 13:36 arthur.cohen
2023-09-07 13:36 ` [PATCH 02/14] rust: Reintroduce TARGET_RUST_CPU_INFO hook arthur.cohen
` (12 more replies)
0 siblings, 13 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
To: gcc-patches; +Cc: gcc-rust, ibuclaw
From: Iain Buclaw <ibuclaw@gdcproject.org>
gcc/ChangeLog:
* Makefile.in (tm_rust_file_list, tm_rust_include_list, TM_RUST_H,
RUST_TARGET_DEF, RUST_TARGET_H, RUST_TARGET_OBJS): New variables.
(tm_rust.h, cs-tm_rust.h, default-rust.o,
rust/rust-target-hooks-def.h, s-rust-target-hooks-def-h): New rules.
(s-tm-texi): Also check timestamp on rust-target.def.
(generated_files): Add TM_RUST_H and rust-target-hooks-def.h.
(build/genhooks.o): Also depend on RUST_TARGET_DEF.
* config.gcc (tm_rust_file, rust_target_objs, target_has_targetrustm):
New variables.
* configure: Regenerate.
* configure.ac (tm_rust_file_list, tm_rust_include_list,
rust_target_objs): Add substitutes.
* doc/tm.texi: Regenerate.
* doc/tm.texi.in (targetrustm): Document.
(target_has_targetrustm): Document.
* genhooks.cc: Include rust/rust-target.def.
* config/default-rust.cc: New file.
gcc/rust/ChangeLog:
* rust-target-def.h: New file.
* rust-target.def: New file.
* rust-target.h: New file.
---
gcc/Makefile.in | 34 +++++++++++++++++++++++++++++++++-
gcc/config.gcc | 25 +++++++++++++++++++++++++
gcc/config/default-rust.cc | 29 +++++++++++++++++++++++++++++
gcc/configure | 21 +++++++++++++++++++--
gcc/configure.ac | 14 ++++++++++++++
gcc/doc/tm.texi | 8 ++++++++
gcc/doc/tm.texi.in | 8 ++++++++
gcc/genhooks.cc | 1 +
gcc/rust/rust-target-def.h | 20 ++++++++++++++++++++
gcc/rust/rust-target.def | 32 ++++++++++++++++++++++++++++++++
gcc/rust/rust-target.h | 31 +++++++++++++++++++++++++++++++
11 files changed, 220 insertions(+), 3 deletions(-)
create mode 100644 gcc/config/default-rust.cc
create mode 100644 gcc/rust/rust-target-def.h
create mode 100644 gcc/rust/rust-target.def
create mode 100644 gcc/rust/rust-target.h
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 6d608db4dd2..9cc16268abf 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -600,6 +600,8 @@ tm_p_file_list=@tm_p_file_list@
tm_p_include_list=@tm_p_include_list@
tm_d_file_list=@tm_d_file_list@
tm_d_include_list=@tm_d_include_list@
+tm_rust_file_list=@tm_rust_file_list@
+tm_rust_include_list=@tm_rust_include_list@
build_xm_file_list=@build_xm_file_list@
build_xm_include_list=@build_xm_include_list@
build_xm_defines=@build_xm_defines@
@@ -898,6 +900,7 @@ TCONFIG_H = tconfig.h $(xm_file_list)
# Some $(target)-protos.h depends on tree.h
TM_P_H = tm_p.h $(tm_p_file_list) $(TREE_H)
TM_D_H = tm_d.h $(tm_d_file_list)
+TM_RUST_H = tm_rust.h $(tm_rust_file_list)
GTM_H = tm.h $(tm_file_list) insn-constants.h
TM_H = $(GTM_H) insn-flags.h $(OPTIONS_H)
@@ -956,10 +959,12 @@ TARGET_DEF = target.def target-hooks-macros.h target-insns.def
C_TARGET_DEF = c-family/c-target.def target-hooks-macros.h
COMMON_TARGET_DEF = common/common-target.def target-hooks-macros.h
D_TARGET_DEF = d/d-target.def target-hooks-macros.h
+RUST_TARGET_DEF = rust/rust-target.def target-hooks-macros.h
TARGET_H = $(TM_H) target.h $(TARGET_DEF) insn-modes.h insn-codes.h
C_TARGET_H = c-family/c-target.h $(C_TARGET_DEF)
COMMON_TARGET_H = common/common-target.h $(INPUT_H) $(COMMON_TARGET_DEF)
D_TARGET_H = d/d-target.h $(D_TARGET_DEF)
+RUST_TARGET_H = rust/rust-target.h $(RUST_TARGET_DEF)
MACHMODE_H = machmode.h mode-classes.def
HOOKS_H = hooks.h
HOSTHOOKS_DEF_H = hosthooks-def.h $(HOOKS_H)
@@ -1268,6 +1273,9 @@ D_TARGET_OBJS=@d_target_objs@
# Target specific, Fortran specific object file
FORTRAN_TARGET_OBJS=@fortran_target_objs@
+# Target specific, Rust specific object file
+RUST_TARGET_OBJS=@rust_target_objs@
+
# Object files for gcc many-languages driver.
GCC_OBJS = gcc.o gcc-main.o ggc-none.o
@@ -1999,6 +2007,7 @@ tconfig.h: cs-tconfig.h ; @true
tm.h: cs-tm.h ; @true
tm_p.h: cs-tm_p.h ; @true
tm_d.h: cs-tm_d.h ; @true
+tm_rust.h: cs-tm_rust.h ; @true
cs-config.h: Makefile
TARGET_CPU_DEFAULT="" \
@@ -2030,6 +2039,11 @@ cs-tm_d.h: Makefile
HEADERS="$(tm_d_include_list)" DEFINES="" \
$(SHELL) $(srcdir)/mkconfig.sh tm_d.h
+cs-tm_rust.h: Makefile
+ TARGET_CPU_DEFAULT="" \
+ HEADERS="$(tm_rust_include_list)" DEFINES="" \
+ $(SHELL) $(srcdir)/mkconfig.sh tm_rust.h
+
# Don't automatically run autoconf, since configure.ac might be accidentally
# newer than configure. Also, this writes into the source directory which
# might be on a read-only file system. If configured for maintainer mode
@@ -2366,6 +2380,12 @@ default-d.o: config/default-d.cc
$(COMPILE) $<
$(POSTCOMPILE)
+# Files used by the Rust language front end.
+
+default-rust.o: config/default-rust.cc
+ $(COMPILE) $<
+ $(POSTCOMPILE)
+
# Language-independent files.
DRIVER_DEFINES = \
@@ -2672,6 +2692,15 @@ s-d-target-hooks-def-h: build/genhooks$(build_exeext)
d/d-target-hooks-def.h
$(STAMP) s-d-target-hooks-def-h
+rust/rust-target-hooks-def.h: s-rust-target-hooks-def-h; @true
+
+s-rust-target-hooks-def-h: build/genhooks$(build_exeext)
+ $(RUN_GEN) build/genhooks$(build_exeext) "Rust Target Hook" \
+ > tmp-rust-target-hooks-def.h
+ $(SHELL) $(srcdir)/../move-if-change tmp-rust-target-hooks-def.h \
+ rust/rust-target-hooks-def.h
+ $(STAMP) s-rust-target-hooks-def-h
+
# check if someone mistakenly only changed tm.texi.
# We use a different pathname here to avoid a circular dependency.
s-tm-texi: $(srcdir)/doc/../doc/tm.texi
@@ -2696,6 +2725,7 @@ s-tm-texi: build/genhooks$(build_exeext) $(srcdir)/doc/tm.texi.in
|| test $(srcdir)/doc/tm.texi -nt $(srcdir)/c-family/c-target.def \
|| test $(srcdir)/doc/tm.texi -nt $(srcdir)/common/common-target.def \
|| test $(srcdir)/doc/tm.texi -nt $(srcdir)/d/d-target.def \
+ || test $(srcdir)/doc/tm.texi -nt $(srcdir)/rust/rust-target.def \
); then \
echo >&2 ; \
echo You should edit $(srcdir)/doc/tm.texi.in rather than $(srcdir)/doc/tm.texi . >&2 ; \
@@ -2872,6 +2902,7 @@ generated_files = config.h tm.h $(TM_P_H) $(TM_D_H) $(TM_H) multilib.h \
$(GIMPLE_MATCH_PD_SEQ_SRC) $(GENERIC_MATCH_PD_SEQ_SRC) \
gimple-match-auto.h generic-match-auto.h \
c-family/c-target-hooks-def.h d/d-target-hooks-def.h \
+ $(TM_RUST_H) rust/rust-target-hooks-def.h \
case-cfn-macros.h \
cfn-operators.pd omp-device-properties.h
@@ -3006,7 +3037,8 @@ build/genrecog.o : genrecog.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \
$(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) \
$(HASH_TABLE_H) inchash.h
build/genhooks.o : genhooks.cc $(TARGET_DEF) $(C_TARGET_DEF) \
- $(COMMON_TARGET_DEF) $(D_TARGET_DEF) $(BCONFIG_H) $(SYSTEM_H) errors.h
+ $(COMMON_TARGET_DEF) $(D_TARGET_DEF) $(RUST_TARGET_DEF) $(BCONFIG_H) \
+ $(SYSTEM_H) errors.h
build/genmddump.o : genmddump.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \
$(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)
build/genmatch.o : genmatch.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \
diff --git a/gcc/config.gcc b/gcc/config.gcc
index b2fe7c7ceef..13c575839ef 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -90,6 +90,9 @@
# tm_d_file A list of headers with definitions of target hook
# macros for the D compiler.
#
+# tm_rust_file list of headers with definitions of target hook
+# macros for the Rust compiler.
+#
# out_file The name of the machine description C support
# file, if different from "$cpu_type/$cpu_type.c".
#
@@ -149,6 +152,9 @@
# fortran_target_objs List of extra target-dependent objects that be
# linked into the fortran compiler only.
#
+# rust_target_objs List of extra target-dependent objects that be
+# linked into the Rust compiler only.
+#
# target_gtfiles List of extra source files with type information.
#
# xm_defines List of macros to define when compiling for the
@@ -201,6 +207,9 @@
#
# target_has_targetdm Set to yes or no depending on whether the target
# has its own definition of targetdm.
+#
+# target_has_targetrustm Set to yes or no depending on whether the target
+# has its own definition of targetrustm.
out_file=
common_out_file=
@@ -218,9 +227,11 @@ c_target_objs=
cxx_target_objs=
d_target_objs=
fortran_target_objs=
+rust_target_objs=
target_has_targetcm=no
target_has_targetm_common=yes
target_has_targetdm=no
+target_has_targetrustm=no
tm_defines=
xm_defines=
# Set this to force installation and use of collect2.
@@ -590,6 +601,16 @@ then
tm_d_file="${tm_d_file} ${cpu_type}/${cpu_type}-d.h"
fi
+tm_rust_file=
+if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-rust.h
+then
+ tm_rust_file="${cpu_type}/${cpu_type}-rust.h"
+fi
+if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-rust.cc
+then
+ rust_target_objs="${rust_target_objs} ${cpu_type}-rust.o"
+fi
+
extra_modes=
if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-modes.def
then
@@ -3606,6 +3627,10 @@ if [ "$target_has_targetdm" = "no" ]; then
d_target_objs="$d_target_objs default-d.o"
fi
+if [ "$target_has_targetrustm" = "no" ]; then
+ rust_target_objs="$rust_target_objs default-rust.o"
+fi
+
# Support for --with-cpu and related options (and a few unrelated options,
# too).
case ${with_cpu} in
diff --git a/gcc/config/default-rust.cc b/gcc/config/default-rust.cc
new file mode 100644
index 00000000000..aa098cbb806
--- /dev/null
+++ b/gcc/config/default-rust.cc
@@ -0,0 +1,29 @@
+/* Default Rust language target hooks initializer.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Do not include tm.h or tm_p.h here; definitions needed by the target
+ architecture to initialize targetrustm should instead be added to tm_rust.h.
+ */
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/configure b/gcc/configure
index 07e8a64afbb..53a32373a18 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -645,6 +645,7 @@ ISLLIBS
GMPINC
GMPLIBS
target_cpu_default
+rust_target_objs
d_target_objs
fortran_target_objs
cxx_target_objs
@@ -653,6 +654,8 @@ use_gcc_stdint
xm_defines
xm_include_list
xm_file_list
+tm_rust_include_list
+tm_rust_file_list
tm_d_include_list
tm_d_file_list
tm_p_include_list
@@ -13562,6 +13565,17 @@ for f in $tm_d_file; do
esac
done
+tm_rust_file_list=
+tm_rust_include_list=
+for f in $tm_rust_file; do
+ case $f in
+ * )
+ tm_rust_file_list="${tm_rust_file_list} \$(srcdir)/config/$f"
+ tm_rust_include_list="${tm_rust_include_list} config/$f"
+ ;;
+ esac
+done
+
xm_file_list=
xm_include_list=
for f in $xm_file; do
@@ -19886,7 +19900,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 19889 "configure"
+#line 19903 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -19992,7 +20006,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 19995 "configure"
+#line 20009 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -31903,6 +31917,9 @@ fi
+
+
+
diff --git a/gcc/configure.ac b/gcc/configure.ac
index cb4be11facd..c193c96452a 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -2405,6 +2405,17 @@ for f in $tm_d_file; do
esac
done
+tm_rust_file_list=
+tm_rust_include_list=
+for f in $tm_rust_file; do
+ case $f in
+ * )
+ tm_rust_file_list="${tm_rust_file_list} \$(srcdir)/config/$f"
+ tm_rust_include_list="${tm_rust_include_list} config/$f"
+ ;;
+ esac
+done
+
xm_file_list=
xm_include_list=
for f in $xm_file; do
@@ -7381,6 +7392,8 @@ AC_SUBST(tm_p_file_list)
AC_SUBST(tm_p_include_list)
AC_SUBST(tm_d_file_list)
AC_SUBST(tm_d_include_list)
+AC_SUBST(tm_rust_file_list)
+AC_SUBST(tm_rust_include_list)
AC_SUBST(xm_file_list)
AC_SUBST(xm_include_list)
AC_SUBST(xm_defines)
@@ -7389,6 +7402,7 @@ AC_SUBST(c_target_objs)
AC_SUBST(cxx_target_objs)
AC_SUBST(fortran_target_objs)
AC_SUBST(d_target_objs)
+AC_SUBST(rust_target_objs)
AC_SUBST(target_cpu_default)
AC_SUBST_FILE(language_hooks)
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index ff69207fb9f..69123f00298 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -115,6 +115,14 @@ initialize @code{targetdm} themselves, they should set
@code{target_has_targetdm=yes} in @file{config.gcc}; otherwise a default
definition is used.
+Similarly, there is a @code{targetrustm} variable for hooks that are
+specific to the Rust language front end, documented as ``Rust Target
+Hook''. This is declared in @file{rust/rust-target.h}, the initializer
+@code{TARGETRUSTM_INITIALIZER} in @file{rust/rust-target-def.h}.
+If targets initialize @code{targetrustm} themselves, they should set
+@code{target_has_targetrustm=yes} in @file{config.gcc}; otherwise a
+default definition is used.
+
@node Driver
@section Controlling the Compilation Driver, @file{gcc}
@cindex driver
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index cad6308a87c..9bac02b9b66 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -115,6 +115,14 @@ initialize @code{targetdm} themselves, they should set
@code{target_has_targetdm=yes} in @file{config.gcc}; otherwise a default
definition is used.
+Similarly, there is a @code{targetrustm} variable for hooks that are
+specific to the Rust language front end, documented as ``Rust Target
+Hook''. This is declared in @file{rust/rust-target.h}, the initializer
+@code{TARGETRUSTM_INITIALIZER} in @file{rust/rust-target-def.h}.
+If targets initialize @code{targetrustm} themselves, they should set
+@code{target_has_targetrustm=yes} in @file{config.gcc}; otherwise a
+default definition is used.
+
@node Driver
@section Controlling the Compilation Driver, @file{gcc}
@cindex driver
diff --git a/gcc/genhooks.cc b/gcc/genhooks.cc
index 8bcf9929207..49414eca531 100644
--- a/gcc/genhooks.cc
+++ b/gcc/genhooks.cc
@@ -35,6 +35,7 @@ static struct hook_desc hook_array[] = {
#include "c-family/c-target.def"
#include "common/common-target.def"
#include "d/d-target.def"
+#include "rust/rust-target.def"
#undef DEFHOOK
};
diff --git a/gcc/rust/rust-target-def.h b/gcc/rust/rust-target-def.h
new file mode 100644
index 00000000000..8534c4b68c3
--- /dev/null
+++ b/gcc/rust/rust-target-def.h
@@ -0,0 +1,20 @@
+/* Default initializers for Rust target hooks.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING3. If not see
+ <http://www.gnu.org/licenses/>. */
+
+#include "rust/rust-target-hooks-def.h"
+#include "tree.h"
+#include "hooks.h"
diff --git a/gcc/rust/rust-target.def b/gcc/rust/rust-target.def
new file mode 100644
index 00000000000..c800eefcfaa
--- /dev/null
+++ b/gcc/rust/rust-target.def
@@ -0,0 +1,32 @@
+/* Target hook definitions for the Rust front end.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING3. If not see
+ <http://www.gnu.org/licenses/>. */
+
+/* See target-hooks-macros.h for details of macros that should be
+ provided by the including file, and how to use them here. */
+
+#include "target-hooks-macros.h"
+
+#undef HOOK_TYPE
+#define HOOK_TYPE "Rust Target Hook"
+
+HOOK_VECTOR (TARGETRUSTM_INITIALIZER, gcc_targetrustm)
+
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_"
+
+/* Close the 'struct gcc_targetrustm' definition. */
+HOOK_VECTOR_END (C90_EMPTY_HACK)
diff --git a/gcc/rust/rust-target.h b/gcc/rust/rust-target.h
new file mode 100644
index 00000000000..79edd786cdd
--- /dev/null
+++ b/gcc/rust/rust-target.h
@@ -0,0 +1,31 @@
+/* Data structure definitions for target-specific Rust behavior.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING3. If not see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef GCC_RUST_TARGET_H
+#define GCC_RUST_TARGET_H
+
+#define DEFHOOKPOD(NAME, DOC, TYPE, INIT) TYPE NAME;
+#define DEFHOOK(NAME, DOC, TYPE, PARAMS, INIT) TYPE (*NAME) PARAMS;
+#define DEFHOOK_UNDOC DEFHOOK
+#define HOOKSTRUCT(FRAGMENT) FRAGMENT
+
+#include "rust-target.def"
+
+/* Each target can provide their own. */
+extern struct gcc_targetrustm targetrustm;
+
+#endif /* GCC_RUST_TARGET_H */
--
2.42.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 02/14] rust: Reintroduce TARGET_RUST_CPU_INFO hook
2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
2023-09-07 13:36 ` [PATCH 03/14] rust: Reintroduce TARGET_RUST_OS_INFO hook arthur.cohen
` (11 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
To: gcc-patches; +Cc: gcc-rust, ibuclaw
From: Iain Buclaw <ibuclaw@gdcproject.org>
gcc/ChangeLog:
* doc/tm.texi: Regenerate.
* doc/tm.texi.in: Add @node for Rust language and ABI, and document
TARGET_RUST_CPU_INFO.
gcc/rust/ChangeLog:
* rust-lang.cc (rust_add_target_info): Remove sorry.
* rust-session-manager.cc: Replace include of target.h with
include of tm.h and rust-target.h.
(Session::init): Call targetrustm.rust_cpu_info.
* rust-target.def (rust_cpu_info): New hook.
* rust-target.h (rust_add_target_info): Declare.
---
gcc/doc/tm.texi | 13 +++++++++++++
gcc/doc/tm.texi.in | 7 +++++++
gcc/rust/rust-lang.cc | 2 --
gcc/rust/rust-session-manager.cc | 7 ++++++-
gcc/rust/rust-target.def | 12 ++++++++++++
gcc/rust/rust-target.h | 4 ++++
6 files changed, 42 insertions(+), 3 deletions(-)
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index 69123f00298..f7a2f8be542 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -53,6 +53,7 @@ through the macros defined in the @file{.h} file.
* PCH Target:: Validity checking for precompiled headers.
* C++ ABI:: Controlling C++ ABI changes.
* D Language and ABI:: Controlling D ABI changes.
+* Rust Language and ABI:: Controlling Rust ABI changes.
* Named Address Spaces:: Adding support for named address spaces
* Misc:: Everything else.
@end menu
@@ -10962,6 +10963,18 @@ if they have external linkage. If this flag is false, then instantiated
decls will be emitted as weak symbols. The default is @code{false}.
@end deftypevr
+@node Rust Language and ABI
+@section Rust ABI parameters
+@cindex parameters, rust abi
+
+@deftypefn {Rust Target Hook} void TARGET_RUST_CPU_INFO (void)
+Declare all environmental CPU info and features relating to the target CPU
+using the function @code{rust_add_target_info}, which takes a string
+representing the feature key and a string representing the feature value.
+Configuration pairs predefined by this hook apply to all files that are being
+compiled.
+@end deftypefn
+
@node Named Address Spaces
@section Adding support for named address spaces
@cindex named address spaces
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index 9bac02b9b66..cd4e687aea1 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -53,6 +53,7 @@ through the macros defined in the @file{.h} file.
* PCH Target:: Validity checking for precompiled headers.
* C++ ABI:: Controlling C++ ABI changes.
* D Language and ABI:: Controlling D ABI changes.
+* Rust Language and ABI:: Controlling Rust ABI changes.
* Named Address Spaces:: Adding support for named address spaces
* Misc:: Everything else.
@end menu
@@ -7143,6 +7144,12 @@ floating-point support; they are not included in this mechanism.
@hook TARGET_D_TEMPLATES_ALWAYS_COMDAT
+@node Rust Language and ABI
+@section Rust ABI parameters
+@cindex parameters, rust abi
+
+@hook TARGET_RUST_CPU_INFO
+
@node Named Address Spaces
@section Adding support for named address spaces
@cindex named address spaces
diff --git a/gcc/rust/rust-lang.cc b/gcc/rust/rust-lang.cc
index 1fb1c25da7a..978b8b9ead2 100644
--- a/gcc/rust/rust-lang.cc
+++ b/gcc/rust/rust-lang.cc
@@ -101,8 +101,6 @@ struct GTY (()) language_function
void
rust_add_target_info (const char *key, const char *value)
{
- sorry ("TODO");
-
Rust::Session::get_instance ().options.target_data.insert_key_value_pair (
key, value);
}
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc
index 074bad9c5d7..112960ad3c0 100644
--- a/gcc/rust/rust-session-manager.cc
+++ b/gcc/rust/rust-session-manager.cc
@@ -44,7 +44,8 @@
#include "diagnostic.h"
#include "input.h"
#include "selftest.h"
-#include "target.h"
+#include "tm.h"
+#include "rust-target.h"
extern bool
saw_errors (void);
@@ -137,6 +138,10 @@ validate_crate_name (const std::string &crate_name, Error &error)
void
Session::init ()
{
+ // initialize target hooks
+ targetrustm.rust_cpu_info ();
+
+ // target-independent values that should exist in all targets
options.target_data.insert_key_value_pair ("target_pointer_width",
std::to_string (POINTER_SIZE));
options.target_data.insert_key_value_pair ("target_endian", BYTES_BIG_ENDIAN
diff --git a/gcc/rust/rust-target.def b/gcc/rust/rust-target.def
index c800eefcfaa..285b7503528 100644
--- a/gcc/rust/rust-target.def
+++ b/gcc/rust/rust-target.def
@@ -28,5 +28,17 @@ HOOK_VECTOR (TARGETRUSTM_INITIALIZER, gcc_targetrustm)
#undef HOOK_PREFIX
#define HOOK_PREFIX "TARGET_"
+/* Environmental CPU info and features (e.g. endianness, pointer size) relating
+ to the target CPU. */
+DEFHOOK
+(rust_cpu_info,
+ "Declare all environmental CPU info and features relating to the target CPU\n\
+using the function @code{rust_add_target_info}, which takes a string\n\
+representing the feature key and a string representing the feature value.\n\
+Configuration pairs predefined by this hook apply to all files that are being\n\
+compiled.",
+ void, (void),
+ hook_void_void)
+
/* Close the 'struct gcc_targetrustm' definition. */
HOOK_VECTOR_END (C90_EMPTY_HACK)
diff --git a/gcc/rust/rust-target.h b/gcc/rust/rust-target.h
index 79edd786cdd..7fcdfc99b81 100644
--- a/gcc/rust/rust-target.h
+++ b/gcc/rust/rust-target.h
@@ -25,6 +25,10 @@
#include "rust-target.def"
+/* Used by target to add target-related info. */
+extern void
+rust_add_target_info (const char *, const char *);
+
/* Each target can provide their own. */
extern struct gcc_targetrustm targetrustm;
--
2.42.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 03/14] rust: Reintroduce TARGET_RUST_OS_INFO hook
2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
2023-09-07 13:36 ` [PATCH 02/14] rust: Reintroduce TARGET_RUST_CPU_INFO hook arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
2023-09-07 13:36 ` [PATCH 04/14] rust: Implement TARGET_RUST_CPU_INFO for i[34567]86-*-* and x86_64-*-* arthur.cohen
` (10 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
To: gcc-patches; +Cc: gcc-rust, ibuclaw
From: Iain Buclaw <ibuclaw@gdcproject.org>
gcc/ChangeLog:
* doc/tm.texi: Regenerate.
* doc/tm.texi.in: Document TARGET_RUST_OS_INFO.
gcc/rust/ChangeLog:
* rust-session-manager.cc (Session::init): Call
targetrustm.rust_os_info.
* rust-target.def (rust_os_info): New hook.
---
gcc/doc/tm.texi | 5 +++++
gcc/doc/tm.texi.in | 2 ++
gcc/rust/rust-session-manager.cc | 1 +
gcc/rust/rust-target.def | 8 ++++++++
4 files changed, 16 insertions(+)
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index f7a2f8be542..b0779724d30 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -10975,6 +10975,11 @@ Configuration pairs predefined by this hook apply to all files that are being
compiled.
@end deftypefn
+@deftypefn {Rust Target Hook} void TARGET_RUST_OS_INFO (void)
+Similar to @code{TARGET_RUST_CPU_INFO}, but is used for configuration info
+relating to the target operating system.
+@end deftypefn
+
@node Named Address Spaces
@section Adding support for named address spaces
@cindex named address spaces
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index cd4e687aea1..d3e18955628 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -7150,6 +7150,8 @@ floating-point support; they are not included in this mechanism.
@hook TARGET_RUST_CPU_INFO
+@hook TARGET_RUST_OS_INFO
+
@node Named Address Spaces
@section Adding support for named address spaces
@cindex named address spaces
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc
index 112960ad3c0..ce1fdbb02af 100644
--- a/gcc/rust/rust-session-manager.cc
+++ b/gcc/rust/rust-session-manager.cc
@@ -140,6 +140,7 @@ Session::init ()
{
// initialize target hooks
targetrustm.rust_cpu_info ();
+ targetrustm.rust_os_info ();
// target-independent values that should exist in all targets
options.target_data.insert_key_value_pair ("target_pointer_width",
diff --git a/gcc/rust/rust-target.def b/gcc/rust/rust-target.def
index 285b7503528..9c72c1c86d3 100644
--- a/gcc/rust/rust-target.def
+++ b/gcc/rust/rust-target.def
@@ -40,5 +40,13 @@ compiled.",
void, (void),
hook_void_void)
+/* Environmental OS info relating to the target OS. */
+DEFHOOK
+(rust_os_info,
+ "Similar to @code{TARGET_RUST_CPU_INFO}, but is used for configuration info\n\
+relating to the target operating system.",
+ void, (void),
+ hook_void_void)
+
/* Close the 'struct gcc_targetrustm' definition. */
HOOK_VECTOR_END (C90_EMPTY_HACK)
--
2.42.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 04/14] rust: Implement TARGET_RUST_CPU_INFO for i[34567]86-*-* and x86_64-*-*
2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
2023-09-07 13:36 ` [PATCH 02/14] rust: Reintroduce TARGET_RUST_CPU_INFO hook arthur.cohen
2023-09-07 13:36 ` [PATCH 03/14] rust: Reintroduce TARGET_RUST_OS_INFO hook arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
2023-09-07 13:36 ` [PATCH 05/14] rust: Implement TARGET_RUST_OS_INFO for *-*-darwin* arthur.cohen
` (9 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
To: gcc-patches; +Cc: gcc-rust, ibuclaw
From: Iain Buclaw <ibuclaw@gdcproject.org>
There are still quite a lot of the previously reverted i386-rust.cc
missing, so it's only a partial reimplementation.
gcc/ChangeLog:
* config/i386/t-i386 (i386-rust.o): New rule.
* config/i386/i386-rust.cc: New file.
* config/i386/i386-rust.h: New file.
---
gcc/config/i386/i386-rust.cc | 129 +++++++++++++++++++++++++++++++++++
gcc/config/i386/i386-rust.h | 22 ++++++
gcc/config/i386/t-i386 | 4 ++
3 files changed, 155 insertions(+)
create mode 100644 gcc/config/i386/i386-rust.cc
create mode 100644 gcc/config/i386/i386-rust.h
diff --git a/gcc/config/i386/i386-rust.cc b/gcc/config/i386/i386-rust.cc
new file mode 100644
index 00000000000..a00c4f8cee1
--- /dev/null
+++ b/gcc/config/i386/i386-rust.cc
@@ -0,0 +1,129 @@
+/* Subroutines for the Rust front end on the x86 architecture.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#define IN_TARGET_CODE 1
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+
+/* Implement TARGET_RUST_CPU_INFO for x86 targets. */
+
+void
+ix86_rust_target_cpu_info (void)
+{
+ if (TARGET_64BIT)
+ rust_add_target_info ("target_arch", "x86_64");
+ else
+ rust_add_target_info ("target_arch", "x86");
+
+ // features officially "stabilised" in rustc
+ if (TARGET_MMX)
+ rust_add_target_info ("target_feature", "mmx");
+ if (TARGET_SSE)
+ rust_add_target_info ("target_feature", "sse");
+ if (TARGET_SSE2)
+ rust_add_target_info ("target_feature", "sse2");
+ if (TARGET_SSE3)
+ rust_add_target_info ("target_feature", "sse3");
+ if (TARGET_SSSE3)
+ rust_add_target_info ("target_feature", "ssse3");
+ if (TARGET_SSE4_1)
+ rust_add_target_info ("target_feature", "sse4.1");
+ if (TARGET_SSE4_2)
+ rust_add_target_info ("target_feature", "sse4.2");
+ if (TARGET_AES)
+ rust_add_target_info ("target_feature", "aes");
+ if (TARGET_SHA)
+ rust_add_target_info ("target_feature", "sha");
+ if (TARGET_AVX)
+ rust_add_target_info ("target_feature", "avx");
+ if (TARGET_AVX2)
+ rust_add_target_info ("target_feature", "avx2");
+ if (TARGET_AVX512F)
+ rust_add_target_info ("target_feature", "avx512f");
+ if (TARGET_AVX512ER)
+ rust_add_target_info ("target_feature", "avx512er");
+ if (TARGET_AVX512CD)
+ rust_add_target_info ("target_feature", "avx512cd");
+ if (TARGET_AVX512PF)
+ rust_add_target_info ("target_feature", "avx512pf");
+ if (TARGET_AVX512DQ)
+ rust_add_target_info ("target_feature", "avx512dq");
+ if (TARGET_AVX512BW)
+ rust_add_target_info ("target_feature", "avx512bw");
+ if (TARGET_AVX512VL)
+ rust_add_target_info ("target_feature", "avx512vl");
+ if (TARGET_AVX512VBMI)
+ rust_add_target_info ("target_feature", "avx512vbmi");
+ if (TARGET_AVX512IFMA)
+ rust_add_target_info ("target_feature", "avx512ifma");
+ if (TARGET_AVX512VPOPCNTDQ)
+ rust_add_target_info ("target_feature", "avx512vpopcntdq");
+ if (TARGET_FMA)
+ rust_add_target_info ("target_feature", "fma");
+ if (TARGET_RTM)
+ rust_add_target_info ("target_feature", "rtm");
+ if (TARGET_SSE4A)
+ rust_add_target_info ("target_feature", "sse4a");
+ if (TARGET_BMI)
+ {
+ rust_add_target_info ("target_feature", "bmi1");
+ rust_add_target_info ("target_feature", "bmi");
+ }
+ if (TARGET_BMI2)
+ rust_add_target_info ("target_feature", "bmi2");
+ if (TARGET_LZCNT)
+ rust_add_target_info ("target_feature", "lzcnt");
+ if (TARGET_TBM)
+ rust_add_target_info ("target_feature", "tbm");
+ if (TARGET_POPCNT)
+ rust_add_target_info ("target_feature", "popcnt");
+ if (TARGET_RDRND)
+ {
+ rust_add_target_info ("target_feature", "rdrand");
+ rust_add_target_info ("target_feature", "rdrnd");
+ }
+ if (TARGET_F16C)
+ rust_add_target_info ("target_feature", "f16c");
+ if (TARGET_RDSEED)
+ rust_add_target_info ("target_feature", "rdseed");
+ if (TARGET_ADX)
+ rust_add_target_info ("target_feature", "adx");
+ if (TARGET_FXSR)
+ rust_add_target_info ("target_feature", "fxsr");
+ if (TARGET_XSAVE)
+ rust_add_target_info ("target_feature", "xsave");
+ if (TARGET_XSAVEOPT)
+ rust_add_target_info ("target_feature", "xsaveopt");
+ if (TARGET_XSAVEC)
+ rust_add_target_info ("target_feature", "xsavec");
+ if (TARGET_XSAVES)
+ rust_add_target_info ("target_feature", "xsaves");
+ if (TARGET_VPCLMULQDQ)
+ {
+ rust_add_target_info ("target_feature", "pclmulqdq");
+ rust_add_target_info ("target_feature", "vpclmulqdq");
+ }
+ if (TARGET_CMPXCHG16B)
+ rust_add_target_info ("target_feature", "cmpxchg16b");
+ if (TARGET_MOVBE)
+ rust_add_target_info ("target_feature", "movbe");
+}
diff --git a/gcc/config/i386/i386-rust.h b/gcc/config/i386/i386-rust.h
new file mode 100644
index 00000000000..a837e2f1c74
--- /dev/null
+++ b/gcc/config/i386/i386-rust.h
@@ -0,0 +1,22 @@
+/* Definitions for the Rust front end on the x86 architecture.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+/* In i386-rust.cc */
+extern void ix86_rust_target_cpu_info (void);
+
+/* Target CPU info for Rust. */
+#define TARGET_RUST_CPU_INFO ix86_rust_target_cpu_info
diff --git a/gcc/config/i386/t-i386 b/gcc/config/i386/t-i386
index b417c7f17ec..f85817d698c 100644
--- a/gcc/config/i386/t-i386
+++ b/gcc/config/i386/t-i386
@@ -46,6 +46,10 @@ i386-d.o: $(srcdir)/config/i386/i386-d.cc
$(COMPILE) $<
$(POSTCOMPILE)
+i386-rust.o: $(srcdir)/config/i386/i386-rust.cc
+ $(COMPILE) $<
+ $(POSTCOMPILE)
+
i386-options.o: $(srcdir)/config/i386/i386-options.cc
$(COMPILE) $<
$(POSTCOMPILE)
--
2.42.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 05/14] rust: Implement TARGET_RUST_OS_INFO for *-*-darwin*
2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
` (2 preceding siblings ...)
2023-09-07 13:36 ` [PATCH 04/14] rust: Implement TARGET_RUST_CPU_INFO for i[34567]86-*-* and x86_64-*-* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
2023-09-07 13:36 ` [PATCH 06/14] rust: Implement TARGET_RUST_OS_INFO for *-*-freebsd* arthur.cohen
` (8 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
To: gcc-patches; +Cc: gcc-rust, ibuclaw
From: Iain Buclaw <ibuclaw@gdcproject.org>
gcc/ChangeLog:
* config.gcc (*-*-darwin*): Set rust_target_objs and
target_has_targetrustm.
* config/t-darwin (darwin-rust.o): New rule.
* config/darwin-rust.cc: New file.
---
gcc/config.gcc | 2 ++
gcc/config/darwin-rust.cc | 44 +++++++++++++++++++++++++++++++++++++++
gcc/config/t-darwin | 4 ++++
3 files changed, 50 insertions(+)
create mode 100644 gcc/config/darwin-rust.cc
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 13c575839ef..a654c7c5a83 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -779,8 +779,10 @@ case ${target} in
cxx_target_objs="${cxx_target_objs} darwin-c.o"
d_target_objs="${d_target_objs} darwin-d.o"
fortran_target_objs="darwin-f.o"
+ rust_target_objs="${rust_target_objs} darwin-rust.o"
target_has_targetcm=yes
target_has_targetdm=yes
+ target_has_targetrustm=yes
extra_objs="${extra_objs} darwin.o"
extra_gcc_objs="darwin-driver.o"
default_use_cxa_atexit=yes
diff --git a/gcc/config/darwin-rust.cc b/gcc/config/darwin-rust.cc
new file mode 100644
index 00000000000..4b014b88c52
--- /dev/null
+++ b/gcc/config/darwin-rust.cc
@@ -0,0 +1,44 @@
+/* Darwin support needed only by Rust front-end.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for Darwin targets. */
+
+static void
+darwin_rust_target_os_info (void)
+{
+ rust_add_target_info ("target_family", "unix");
+
+ /* TODO: rust actually has "macos", "ios", and "tvos" for darwin targets, but
+ gcc seems to have no current support for them, so assuming that target_os
+ is always macos for now. */
+ rust_add_target_info ("target_os", "macos");
+ rust_add_target_info ("target_vendor", "apple");
+ rust_add_target_info ("target_env", "");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO darwin_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/config/t-darwin b/gcc/config/t-darwin
index e22a579e951..52b6d89b6d4 100644
--- a/gcc/config/t-darwin
+++ b/gcc/config/t-darwin
@@ -34,6 +34,10 @@ darwin-f.o: $(srcdir)/config/darwin-f.cc
$(COMPILE) $<
$(POSTCOMPILE)
+darwin-rust.o: $(srcdir)/config/darwin-rust.cc
+ $(COMPILE) $<
+ $(POSTCOMPILE)
+
darwin-driver.o: $(srcdir)/config/darwin-driver.cc
$(COMPILE) $<
$(POSTCOMPILE)
--
2.42.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 06/14] rust: Implement TARGET_RUST_OS_INFO for *-*-freebsd*
2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
` (3 preceding siblings ...)
2023-09-07 13:36 ` [PATCH 05/14] rust: Implement TARGET_RUST_OS_INFO for *-*-darwin* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
2023-09-07 13:36 ` [PATCH 07/14] rust: Implement TARGET_RUST_OS_INFO for *-*-netbsd* arthur.cohen
` (7 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
To: gcc-patches; +Cc: gcc-rust, ibuclaw
From: Iain Buclaw <ibuclaw@gdcproject.org>
gcc/ChangeLog:
* config.gcc (*-*-freebsd*): Set rust_target_objs and
target_has_targetrustm.
* config/t-freebsd (freebsd-rust.o): New rule.
* config/freebsd-rust.cc: New file.
---
gcc/config.gcc | 2 ++
gcc/config/freebsd-rust.cc | 40 ++++++++++++++++++++++++++++++++++++++
gcc/config/t-freebsd | 4 ++++
3 files changed, 46 insertions(+)
create mode 100644 gcc/config/freebsd-rust.cc
diff --git a/gcc/config.gcc b/gcc/config.gcc
index a654c7c5a83..61d77567bb6 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -864,6 +864,8 @@ case ${target} in
d_target_objs="${d_target_objs} freebsd-d.o"
tmake_file="${tmake_file} t-freebsd"
target_has_targetdm=yes
+ rust_target_objs="${rust_target_objs} freebsd-rust.o"
+ target_has_targetrustm=yes
;;
*-*-fuchsia*)
native_system_header_dir=/include
diff --git a/gcc/config/freebsd-rust.cc b/gcc/config/freebsd-rust.cc
new file mode 100644
index 00000000000..1dbf2ed8ef9
--- /dev/null
+++ b/gcc/config/freebsd-rust.cc
@@ -0,0 +1,40 @@
+/* FreeBSD support needed only by Rust front-end.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for FreeBSD targets. */
+
+static void
+freebsd_rust_target_os_info (void)
+{
+ rust_add_target_info ("target_family", "unix");
+ rust_add_target_info ("target_os", "freebsd");
+ rust_add_target_info ("target_vendor", "unknown");
+ rust_add_target_info ("target_env", "");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO freebsd_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/config/t-freebsd b/gcc/config/t-freebsd
index fb36685653a..d4b4615e567 100644
--- a/gcc/config/t-freebsd
+++ b/gcc/config/t-freebsd
@@ -19,3 +19,7 @@
freebsd-d.o: $(srcdir)/config/freebsd-d.cc
$(COMPILE) $<
$(POSTCOMPILE)
+
+freebsd-rust.o: $(srcdir)/config/freebsd-rust.cc
+ $(COMPILE) $<
+ $(POSTCOMPILE)
--
2.42.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 07/14] rust: Implement TARGET_RUST_OS_INFO for *-*-netbsd*
2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
` (4 preceding siblings ...)
2023-09-07 13:36 ` [PATCH 06/14] rust: Implement TARGET_RUST_OS_INFO for *-*-freebsd* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
2023-09-07 13:36 ` [PATCH 08/14] rust: Implement TARGET_RUST_OS_INFO for *-*-openbsd* arthur.cohen
` (6 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
To: gcc-patches; +Cc: gcc-rust, ibuclaw
From: Iain Buclaw <ibuclaw@gdcproject.org>
gcc/ChangeLog:
* config.gcc (*-*-netbsd*): Set rust_target_objs and
target_has_targetrustm.
* config/t-netbsd (netbsd-rust.o): New rule.
* config/netbsd-rust.cc: New file.
---
gcc/config.gcc | 2 ++
gcc/config/netbsd-rust.cc | 40 +++++++++++++++++++++++++++++++++++++++
gcc/config/t-netbsd | 4 ++++
3 files changed, 46 insertions(+)
create mode 100644 gcc/config/netbsd-rust.cc
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 61d77567bb6..ad4c01dfc89 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -973,6 +973,8 @@ case ${target} in
default_gnu_indirect_function=yes
;;
esac
+ rust_target_objs="${rust_target_objs} netbsd-rust.o"
+ target_has_targetrustm=yes
;;
*-*-openbsd*)
tmake_file="t-openbsd"
diff --git a/gcc/config/netbsd-rust.cc b/gcc/config/netbsd-rust.cc
new file mode 100644
index 00000000000..9395466cbbe
--- /dev/null
+++ b/gcc/config/netbsd-rust.cc
@@ -0,0 +1,40 @@
+/* NetBSD support needed only by Rust front-end.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for NetBSD targets. */
+
+static void
+netbsd_rust_target_os_info (void)
+{
+ rust_add_target_info ("target_family", "unix");
+ rust_add_target_info ("target_os", "netbsd");
+ rust_add_target_info ("target_vendor", "unknown");
+ rust_add_target_info ("target_env", "");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO netbsd_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/config/t-netbsd b/gcc/config/t-netbsd
index 1d9a8ce8c7b..fdbfda52412 100644
--- a/gcc/config/t-netbsd
+++ b/gcc/config/t-netbsd
@@ -23,3 +23,7 @@ netbsd.o: $(srcdir)/config/netbsd.cc
netbsd-d.o: $(srcdir)/config/netbsd-d.cc
$(COMPILE) $<
$(POSTCOMPILE)
+
+netbsd-rust.o: $(srcdir)/config/netbsd-rust.cc
+ $(COMPILE) $<
+ $(POSTCOMPILE)
--
2.42.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 08/14] rust: Implement TARGET_RUST_OS_INFO for *-*-openbsd*
2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
` (5 preceding siblings ...)
2023-09-07 13:36 ` [PATCH 07/14] rust: Implement TARGET_RUST_OS_INFO for *-*-netbsd* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
2023-09-07 13:36 ` [PATCH 09/14] rust: Implement TARGET_RUST_OS_INFO for *-*-solaris2* arthur.cohen
` (5 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
To: gcc-patches; +Cc: gcc-rust, ibuclaw
From: Iain Buclaw <ibuclaw@gdcproject.org>
gcc/ChangeLog:
* config.gcc (*-*-openbsd*): Set rust_target_objs and
target_has_targetrustm.
* config/t-openbsd (openbsd-rust.o): New rule.
* config/openbsd-rust.cc: New file.
---
gcc/config.gcc | 2 ++
gcc/config/openbsd-rust.cc | 40 ++++++++++++++++++++++++++++++++++++++
gcc/config/t-openbsd | 5 +++++
3 files changed, 47 insertions(+)
create mode 100644 gcc/config/openbsd-rust.cc
diff --git a/gcc/config.gcc b/gcc/config.gcc
index ad4c01dfc89..f2b4381362c 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -990,6 +990,8 @@ case ${target} in
esac
d_target_objs="${d_target_objs} openbsd-d.o"
target_has_targetdm=yes
+ rust_target_objs="${rust_target_objs} openbsd-rust.o"
+ target_has_targetrustm=yes
;;
*-*-phoenix*)
gas=yes
diff --git a/gcc/config/openbsd-rust.cc b/gcc/config/openbsd-rust.cc
new file mode 100644
index 00000000000..c4721ea18e9
--- /dev/null
+++ b/gcc/config/openbsd-rust.cc
@@ -0,0 +1,40 @@
+/* OpenBSD support needed only by Rust front-end.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for OpenBSD targets. */
+
+static void
+openbsd_rust_target_os_info (void)
+{
+ rust_add_target_info ("target_family", "unix");
+ rust_add_target_info ("target_os", "openbsd");
+ rust_add_target_info ("target_vendor", "unknown");
+ rust_add_target_info ("target_env", "");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO openbsd_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/config/t-openbsd b/gcc/config/t-openbsd
index 69643f521fb..3b625d62b30 100644
--- a/gcc/config/t-openbsd
+++ b/gcc/config/t-openbsd
@@ -5,3 +5,8 @@ USER_H = $(EXTRA_HEADERS)
openbsd-d.o: $(srcdir)/config/openbsd-d.cc
$(COMPILE) $<
$(POSTCOMPILE)
+
+# OpenBSD-specific Rust support.
+openbsd-rust.o: $(srcdir)/config/openbsd-rust.cc
+ $(COMPILE) $<
+ $(POSTCOMPILE)
--
2.42.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 09/14] rust: Implement TARGET_RUST_OS_INFO for *-*-solaris2*.
2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
` (6 preceding siblings ...)
2023-09-07 13:36 ` [PATCH 08/14] rust: Implement TARGET_RUST_OS_INFO for *-*-openbsd* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
2023-09-07 13:36 ` [PATCH 10/14] rust: Implement TARGET_RUST_OS_INFO for *-*-dragonfly* arthur.cohen
` (4 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
To: gcc-patches; +Cc: gcc-rust, ibuclaw
From: Iain Buclaw <ibuclaw@gdcproject.org>
gcc/ChangeLog:
* config.gcc (*-*-solaris2*): Set rust_target_objs and
target_has_targetrustm.
* config/t-sol2 (sol2-rust.o): New rule.
* config/sol2-rust.cc: New file.
---
gcc/config.gcc | 2 ++
gcc/config/sol2-rust.cc | 40 ++++++++++++++++++++++++++++++++++++++++
gcc/config/t-sol2 | 5 +++++
3 files changed, 47 insertions(+)
create mode 100644 gcc/config/sol2-rust.cc
diff --git a/gcc/config.gcc b/gcc/config.gcc
index f2b4381362c..81142763ac2 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1056,6 +1056,8 @@ case ${target} in
;;
esac
target_has_targetdm=yes
+ rust_target_objs="${rust_target_objs} sol2-rust.o"
+ target_has_targetrustm=yes
;;
*-*-*vms*)
extra_options="${extra_options} vms/vms.opt"
diff --git a/gcc/config/sol2-rust.cc b/gcc/config/sol2-rust.cc
new file mode 100644
index 00000000000..e36bd450bcc
--- /dev/null
+++ b/gcc/config/sol2-rust.cc
@@ -0,0 +1,40 @@
+/* Solaris support needed only by Rust front-end.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for Solaris targets. */
+
+static void
+solaris_rust_target_os_info (void)
+{
+ rust_add_target_info ("target_family", "unix");
+ rust_add_target_info ("target_os", "solaris");
+ rust_add_target_info ("target_vendor", "sun");
+ rust_add_target_info ("target_env", "");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO solaris_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/config/t-sol2 b/gcc/config/t-sol2
index 83d4c85fdeb..d454409d346 100644
--- a/gcc/config/t-sol2
+++ b/gcc/config/t-sol2
@@ -31,6 +31,11 @@ sol2-d.o: $(srcdir)/config/sol2-d.cc
$(COMPILE) $<
$(POSTCOMPILE)
+# Solaris-specific Rust support.
+sol2-rust.o: $(srcdir)/config/sol2-rust.cc
+ $(COMPILE) $<
+ $(POSTCOMPILE)
+
# Corresponding stub routines.
sol2-stubs.o: $(srcdir)/config/sol2-stubs.cc
$(COMPILE) $<
--
2.42.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 10/14] rust: Implement TARGET_RUST_OS_INFO for *-*-dragonfly*
2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
` (7 preceding siblings ...)
2023-09-07 13:36 ` [PATCH 09/14] rust: Implement TARGET_RUST_OS_INFO for *-*-solaris2* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
2023-09-07 13:36 ` [PATCH 11/14] rust: Implement TARGET_RUST_OS_INFO for *-*-vxworks* arthur.cohen
` (3 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
To: gcc-patches; +Cc: gcc-rust, ibuclaw
From: Iain Buclaw <ibuclaw@gdcproject.org>
gcc/ChangeLog:
* config.gcc (*-*-dragonfly*): Set rust_target_objs and
target_has_targetrustm.
* config/t-dragonfly (dragonfly-rust.o): New rule.
* config/dragonfly-rust.cc: New file.
---
gcc/config.gcc | 2 ++
gcc/config/dragonfly-rust.cc | 40 ++++++++++++++++++++++++++++++++++++
gcc/config/t-dragonfly | 4 ++++
3 files changed, 46 insertions(+)
create mode 100644 gcc/config/dragonfly-rust.cc
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 81142763ac2..9344e26a48e 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -813,6 +813,8 @@ case ${target} in
d_target_objs="${d_target_objs} dragonfly-d.o"
tmake_file="${tmake_file} t-dragonfly"
target_has_targetdm=yes
+ rust_target_objs="${rust_target_objs} dragonfly-rust.o"
+ target_has_targetrustm=yes
;;
*-*-freebsd*)
# This is the generic ELF configuration of FreeBSD. Later
diff --git a/gcc/config/dragonfly-rust.cc b/gcc/config/dragonfly-rust.cc
new file mode 100644
index 00000000000..ce501d1b6fd
--- /dev/null
+++ b/gcc/config/dragonfly-rust.cc
@@ -0,0 +1,40 @@
+/* DragonFly support needed only by Rust front-end.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for DragonFly targets. */
+
+static void
+dragonfly_rust_target_os_info (void)
+{
+ rust_add_target_info ("target_family", "unix");
+ rust_add_target_info ("target_os", "dragonfly");
+ rust_add_target_info ("target_vendor", "unknown");
+ rust_add_target_info ("target_env", "");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO dragonfly_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/config/t-dragonfly b/gcc/config/t-dragonfly
index b80587dd0d3..e60fa18f116 100644
--- a/gcc/config/t-dragonfly
+++ b/gcc/config/t-dragonfly
@@ -19,3 +19,7 @@
dragonfly-d.o: $(srcdir)/config/dragonfly-d.cc
$(COMPILE) $<
$(POSTCOMPILE)
+
+dragonfly-rust.o: $(srcdir)/config/dragonfly-rust.cc
+ $(COMPILE) $<
+ $(POSTCOMPILE)
--
2.42.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 11/14] rust: Implement TARGET_RUST_OS_INFO for *-*-vxworks*
2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
` (8 preceding siblings ...)
2023-09-07 13:36 ` [PATCH 10/14] rust: Implement TARGET_RUST_OS_INFO for *-*-dragonfly* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
2023-09-07 13:36 ` [PATCH 12/14] rust: Implement TARGET_RUST_OS_INFO for *-*-fuchsia* arthur.cohen
` (2 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
To: gcc-patches; +Cc: gcc-rust, ibuclaw
From: Iain Buclaw <ibuclaw@gdcproject.org>
gcc/ChangeLog:
* config.gcc (*-*-vxworks*): Set rust_target_objs and
target_has_targetrustm.
* config/t-vxworks (vxworks-rust.o): New rule.
* config/vxworks-rust.cc: New file.
---
gcc/config.gcc | 3 +++
gcc/config/t-vxworks | 4 ++++
gcc/config/vxworks-rust.cc | 40 ++++++++++++++++++++++++++++++++++++++
3 files changed, 47 insertions(+)
create mode 100644 gcc/config/vxworks-rust.cc
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 9344e26a48e..da59fa3eecd 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1092,6 +1092,9 @@ case ${target} in
extra_headers="${extra_headers} ../vxworks/vxworks-predef.h"
target_has_targetcm="yes"
+ rust_target_objs="${rust_target_objs} vxworks-rust.o"
+ target_has_targetrustm=yes
+
extra_gcc_objs="vxworks-driver.o"
# This private header exposes a consistent interface for checks on
diff --git a/gcc/config/t-vxworks b/gcc/config/t-vxworks
index 164869a7bf0..639b2fd7a21 100644
--- a/gcc/config/t-vxworks
+++ b/gcc/config/t-vxworks
@@ -28,6 +28,10 @@ vxworks-c.o: $(srcdir)/config/vxworks-c.cc
$(COMPILE) $<
$(POSTCOMPILE)
+vxworks-rust.o: $(srcdir)/config/vxworks-rust.cc
+ $(COMPILE) $<
+ $(POSTCOMPILE)
+
# We leverage $sysroot to find target system headers only, distributed
# in a VxWorks (a)typical fashion with a different set of headers for
# rtp vs kernel mode. We setup SYSROOT_HEADERS_SUFFIX_SPEC to handle
diff --git a/gcc/config/vxworks-rust.cc b/gcc/config/vxworks-rust.cc
new file mode 100644
index 00000000000..76d618cdcd1
--- /dev/null
+++ b/gcc/config/vxworks-rust.cc
@@ -0,0 +1,40 @@
+/* VxWorks support needed only by Rust front-end.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for VxWorks targets. */
+
+static void
+vxworks_rust_target_os_info (void)
+{
+ rust_add_target_info ("target_family", "unix");
+ rust_add_target_info ("target_os", "vxworks");
+ rust_add_target_info ("target_vendor", "wrs");
+ rust_add_target_info ("target_env", "gnu");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO vxworks_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
--
2.42.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 12/14] rust: Implement TARGET_RUST_OS_INFO for *-*-fuchsia*.
2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
` (9 preceding siblings ...)
2023-09-07 13:36 ` [PATCH 11/14] rust: Implement TARGET_RUST_OS_INFO for *-*-vxworks* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
2023-09-07 13:36 ` [PATCH 13/14] rust: Implement TARGET_RUST_OS_INFO for i[34567]86-*-mingw* and x86_64-*-mingw* arthur.cohen
2023-09-07 13:36 ` [PATCH 14/14] rust: Implement TARGET_RUST_OS_INFO for *-*-*linux* arthur.cohen
12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
To: gcc-patches; +Cc: gcc-rust, ibuclaw
From: Iain Buclaw <ibuclaw@gdcproject.org>
gcc/ChangeLog:
* config.gcc (*-*-fuchsia): Set tmake_rule, rust_target_objs,
and target_has_targetrustm.
* config/fuchsia-rust.cc: New file.
* config/t-fuchsia: New file.
---
gcc/config.gcc | 3 +++
gcc/config/fuchsia-rust.cc | 40 ++++++++++++++++++++++++++++++++++++++
gcc/config/t-fuchsia | 21 ++++++++++++++++++++
3 files changed, 64 insertions(+)
create mode 100644 gcc/config/fuchsia-rust.cc
create mode 100644 gcc/config/t-fuchsia
diff --git a/gcc/config.gcc b/gcc/config.gcc
index da59fa3eecd..a512eb37275 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -871,6 +871,9 @@ case ${target} in
;;
*-*-fuchsia*)
native_system_header_dir=/include
+ tmake_file="t-fuchsia"
+ rust_target_objs="${rust_target_objs} fuchsia-rust.o"
+ target_has_targetrustm=yes
;;
*-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu | *-*-uclinuxfdpiceabi)
extra_options="$extra_options gnu-user.opt"
diff --git a/gcc/config/fuchsia-rust.cc b/gcc/config/fuchsia-rust.cc
new file mode 100644
index 00000000000..86262504ac2
--- /dev/null
+++ b/gcc/config/fuchsia-rust.cc
@@ -0,0 +1,40 @@
+/* Fuchsia support needed only by Rust front-end.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for Fuchsia targets. */
+
+static void
+fushsia_rust_target_os_info (void)
+{
+ rust_add_target_info ("target_family", "unix");
+ rust_add_target_info ("target_os", "fushsia");
+ rust_add_target_info ("target_vendor", "unknown");
+ rust_add_target_info ("target_env", "");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO fushsia_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/config/t-fuchsia b/gcc/config/t-fuchsia
new file mode 100644
index 00000000000..55c884bcb2e
--- /dev/null
+++ b/gcc/config/t-fuchsia
@@ -0,0 +1,21 @@
+# Copyright (C) 2022 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+fuchsia-rust.o: $(srcdir)/config/fuchsia-rust.cc
+ $(COMPILE) $<
+ $(POSTCOMPILE)
--
2.42.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 13/14] rust: Implement TARGET_RUST_OS_INFO for i[34567]86-*-mingw* and x86_64-*-mingw*.
2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
` (10 preceding siblings ...)
2023-09-07 13:36 ` [PATCH 12/14] rust: Implement TARGET_RUST_OS_INFO for *-*-fuchsia* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
2023-09-07 13:36 ` [PATCH 14/14] rust: Implement TARGET_RUST_OS_INFO for *-*-*linux* arthur.cohen
12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
To: gcc-patches; +Cc: gcc-rust, ibuclaw
From: Iain Buclaw <ibuclaw@gdcproject.org>
gcc/ChangeLog:
* config.gcc (i[34567]86-*-mingw* | x86_64-*-mingw*): Set
rust_target_objs and target_has_targetrustm.
* config/t-winnt (winnt-rust.o): New rule.
* config/winnt-rust.cc: New file.
---
gcc/config.gcc | 2 ++
gcc/config/t-winnt | 4 ++++
gcc/config/winnt-rust.cc | 40 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 46 insertions(+)
create mode 100644 gcc/config/winnt-rust.cc
diff --git a/gcc/config.gcc b/gcc/config.gcc
index a512eb37275..a7a36fccd8d 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -2170,6 +2170,8 @@ i[34567]86-*-mingw* | x86_64-*-mingw*)
d_target_objs="${d_target_objs} winnt-d.o"
target_has_targetcm="yes"
target_has_targetdm="yes"
+ rust_target_objs="${rust_target_objs} winnt-rust.o"
+ target_has_targetrustm="yes"
case ${target} in
x86_64-*-* | *-w64-*)
need_64bit_isa=yes
diff --git a/gcc/config/t-winnt b/gcc/config/t-winnt
index 73ce48af12b..b70c7f799e4 100644
--- a/gcc/config/t-winnt
+++ b/gcc/config/t-winnt
@@ -20,3 +20,7 @@ winnt-c.o: config/winnt-c.cc $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(C_TARGET_H) $(C_TARGET_DEF_H)
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) \
$< $(OUTPUT_OPTION)
+
+winnt-rust.o: $(srcdir)/config/winnt-rust.cc
+ $(COMPILE) $<
+ $(POSTCOMPILE)
diff --git a/gcc/config/winnt-rust.cc b/gcc/config/winnt-rust.cc
new file mode 100644
index 00000000000..190584d3961
--- /dev/null
+++ b/gcc/config/winnt-rust.cc
@@ -0,0 +1,40 @@
+/* Windows support needed only by Rust front-end.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for Windows targets. */
+
+static void
+winnt_rust_target_os_info (void)
+{
+ rust_add_target_info ("target_family", "windows");
+ rust_add_target_info ("target_os", "windows");
+ rust_add_target_info ("target_vendor", "pc");
+ rust_add_target_info ("target_env", "gnu");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO winnt_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
--
2.42.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 14/14] rust: Implement TARGET_RUST_OS_INFO for *-*-*linux*.
2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
` (11 preceding siblings ...)
2023-09-07 13:36 ` [PATCH 13/14] rust: Implement TARGET_RUST_OS_INFO for i[34567]86-*-mingw* and x86_64-*-mingw* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
To: gcc-patches; +Cc: gcc-rust, ibuclaw
From: Iain Buclaw <ibuclaw@gdcproject.org>
gcc/ChangeLog:
* config.gcc (*linux*): Set rust target_objs, and
target_has_targetrustm,
* config/t-linux (linux-rust.o): New rule.
* config/linux-rust.cc: New file.
---
gcc/config.gcc | 2 ++
gcc/config/linux-rust.cc | 57 ++++++++++++++++++++++++++++++++++++++++
gcc/config/t-linux | 4 +++
3 files changed, 63 insertions(+)
create mode 100644 gcc/config/linux-rust.cc
diff --git a/gcc/config.gcc b/gcc/config.gcc
index a7a36fccd8d..0c8d756a895 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -944,6 +944,8 @@ case ${target} in
*-*-*linux*)
d_target_objs="${d_target_objs} linux-d.o"
target_has_targetdm=yes
+ rust_target_objs="${rust_target_objs} linux-rust.o"
+ target_has_targetrustm=yes
;;
*-*-kfreebsd*-gnu)
d_target_objs="${d_target_objs} kfreebsd-d.o"
diff --git a/gcc/config/linux-rust.cc b/gcc/config/linux-rust.cc
new file mode 100644
index 00000000000..3eaa91818ff
--- /dev/null
+++ b/gcc/config/linux-rust.cc
@@ -0,0 +1,57 @@
+/* Linux support needed only by Rust front-end.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* `-mandroid' is not available as an command-line option. */
+#ifndef TARGET_ANDROID
+#define TARGET_ANDROID 0
+#endif
+
+/* Implement TARGET_RUST_OS_INFO for Linux targets. */
+
+static void
+linux_rust_target_os_info (void)
+{
+ rust_add_target_info ("target_family", "unix");
+ rust_add_target_info ("target_vendor", "unknown");
+
+ if (TARGET_ANDROID)
+ rust_add_target_info ("target_os", "android");
+ else
+ rust_add_target_info ("target_os", "linux");
+
+ if (OPTION_GLIBC)
+ rust_add_target_info ("target_env", "gnu");
+ else if (OPTION_MUSL)
+ rust_add_target_info ("target_env", "musl");
+ else if (OPTION_UCLIBC)
+ rust_add_target_info ("target_env", "uclibc");
+ else
+ rust_add_target_info ("target_env", "");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO linux_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/config/t-linux b/gcc/config/t-linux
index 03966d5ce96..96593fbf27f 100644
--- a/gcc/config/t-linux
+++ b/gcc/config/t-linux
@@ -23,3 +23,7 @@ linux.o: $(srcdir)/config/linux.cc
linux-d.o: $(srcdir)/config/linux-d.cc
$(COMPILE) $<
$(POSTCOMPILE)
+
+linux-rust.o: $(srcdir)/config/linux-rust.cc
+ $(COMPILE) $<
+ $(POSTCOMPILE)
--
2.42.0
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2023-09-07 13:38 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
2023-09-07 13:36 ` [PATCH 02/14] rust: Reintroduce TARGET_RUST_CPU_INFO hook arthur.cohen
2023-09-07 13:36 ` [PATCH 03/14] rust: Reintroduce TARGET_RUST_OS_INFO hook arthur.cohen
2023-09-07 13:36 ` [PATCH 04/14] rust: Implement TARGET_RUST_CPU_INFO for i[34567]86-*-* and x86_64-*-* arthur.cohen
2023-09-07 13:36 ` [PATCH 05/14] rust: Implement TARGET_RUST_OS_INFO for *-*-darwin* arthur.cohen
2023-09-07 13:36 ` [PATCH 06/14] rust: Implement TARGET_RUST_OS_INFO for *-*-freebsd* arthur.cohen
2023-09-07 13:36 ` [PATCH 07/14] rust: Implement TARGET_RUST_OS_INFO for *-*-netbsd* arthur.cohen
2023-09-07 13:36 ` [PATCH 08/14] rust: Implement TARGET_RUST_OS_INFO for *-*-openbsd* arthur.cohen
2023-09-07 13:36 ` [PATCH 09/14] rust: Implement TARGET_RUST_OS_INFO for *-*-solaris2* arthur.cohen
2023-09-07 13:36 ` [PATCH 10/14] rust: Implement TARGET_RUST_OS_INFO for *-*-dragonfly* arthur.cohen
2023-09-07 13:36 ` [PATCH 11/14] rust: Implement TARGET_RUST_OS_INFO for *-*-vxworks* arthur.cohen
2023-09-07 13:36 ` [PATCH 12/14] rust: Implement TARGET_RUST_OS_INFO for *-*-fuchsia* arthur.cohen
2023-09-07 13:36 ` [PATCH 13/14] rust: Implement TARGET_RUST_OS_INFO for i[34567]86-*-mingw* and x86_64-*-mingw* arthur.cohen
2023-09-07 13:36 ` [PATCH 14/14] rust: Implement TARGET_RUST_OS_INFO for *-*-*linux* arthur.cohen
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).