* [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