diff mbox series

d: Add freebsd support for D compiler and runtime

Message ID 20201128160435.72906-1-ibuclaw@gdcproject.org
State New
Headers show
Series d: Add freebsd support for D compiler and runtime | expand

Commit Message

Iain Buclaw Nov. 28, 2020, 4:04 p.m. UTC
Hi,

This patch adds the necessary version conditions and configure rules in
place to allow building the D compiler on FreeBSD.

Running the testsuite on both i386 and x86_64, all tests except for one
passes (gdc.test/runnable/test17338.d, though the problem appears to be
the linker producing a corrupt object).

OK for mainline?

Regards
Iain

---
gcc/ChangeLog:

	* config.gcc (*-*-freebsd*): Add freebsd-d.o and t-freebsd.
	* config/freebsd-d.c: New file.
	* config/t-freebsd: New file.

libphobos/ChangeLog:

	* configure.tgt: Add x86_64-*-freebsd* and i?86-*-freebsd* as
	supported targets.
---
 gcc/config.gcc          |  3 +++
 gcc/config/freebsd-d.c  | 42 +++++++++++++++++++++++++++++++++++++++++
 gcc/config/t-freebsd    | 21 +++++++++++++++++++++
 libphobos/configure.tgt |  3 +++
 4 files changed, 69 insertions(+)
 create mode 100644 gcc/config/freebsd-d.c
 create mode 100644 gcc/config/t-freebsd

Comments

Jeff Law Nov. 30, 2020, 1:16 a.m. UTC | #1
On 11/28/20 9:04 AM, Iain Buclaw via Gcc-patches wrote:
> Hi,
>
> This patch adds the necessary version conditions and configure rules in
> place to allow building the D compiler on FreeBSD.
>
> Running the testsuite on both i386 and x86_64, all tests except for one
> passes (gdc.test/runnable/test17338.d, though the problem appears to be
> the linker producing a corrupt object).
>
> OK for mainline?
>
> Regards
> Iain
>
> ---
> gcc/ChangeLog:
>
> 	* config.gcc (*-*-freebsd*): Add freebsd-d.o and t-freebsd.
> 	* config/freebsd-d.c: New file.
> 	* config/t-freebsd: New file.
>
> libphobos/ChangeLog:
>
> 	* configure.tgt: Add x86_64-*-freebsd* and i?86-*-freebsd* as
> 	supported targets.
OK
jeff
Iain Buclaw Nov. 30, 2020, 9:29 a.m. UTC | #2
Excerpts from Jeff Law's message of November 30, 2020 2:16 am:
> 
> 
> On 11/28/20 9:04 AM, Iain Buclaw via Gcc-patches wrote:
>> Hi,
>>
>> This patch adds the necessary version conditions and configure rules in
>> place to allow building the D compiler on FreeBSD.
>>
>> Running the testsuite on both i386 and x86_64, all tests except for one
>> passes (gdc.test/runnable/test17338.d, though the problem appears to be
>> the linker producing a corrupt object).
>>
>> OK for mainline?
>>
>> Regards
>> Iain
>>
>> ---
>> gcc/ChangeLog:
>>
>> 	* config.gcc (*-*-freebsd*): Add freebsd-d.o and t-freebsd.
>> 	* config/freebsd-d.c: New file.
>> 	* config/t-freebsd: New file.
>>
>> libphobos/ChangeLog:
>>
>> 	* configure.tgt: Add x86_64-*-freebsd* and i?86-*-freebsd* as
>> 	supported targets.
> OK
> jeff
> 

Thanks.

I've just noticed that there's PR 87818 (D runtime does not build on
FreeBSD), so I've committed the patch referencing that PR in the
changelog entry.

Iain.
diff mbox series

Patch

diff --git a/gcc/config.gcc b/gcc/config.gcc
index 0ae58482657..71209268aeb 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -782,6 +782,9 @@  case ${target} in
       default_use_cxa_atexit=yes;;
   esac
   use_gcc_stdint=wrap
+  d_target_objs="${d_target_objs} freebsd-d.o"
+  tmake_file="${tmake_file} t-freebsd"
+  target_has_targetdm=yes
   ;;
 *-*-fuchsia*)
   native_system_header_dir=/include
diff --git a/gcc/config/freebsd-d.c b/gcc/config/freebsd-d.c
new file mode 100644
index 00000000000..d79d82b5aa4
--- /dev/null
+++ b/gcc/config/freebsd-d.c
@@ -0,0 +1,42 @@ 
+/* FreeBSD support needed only by D front-end.
+   Copyright (C) 2020 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_p.h"
+#include "d/d-target.h"
+#include "d/d-target-def.h"
+
+/* Implement TARGET_D_OS_VERSIONS for FreeBSD targets.  */
+
+static void
+freebsd_d_os_builtins (void)
+{
+  char buf[16];
+  snprintf (buf, sizeof (buf), "FreeBSD_%d", FBSD_MAJOR);
+
+  d_add_builtin_version ("FreeBSD");
+  d_add_builtin_version (xstrdup (buf));
+  d_add_builtin_version ("Posix");
+}
+
+#undef TARGET_D_OS_VERSIONS
+#define TARGET_D_OS_VERSIONS freebsd_d_os_builtins
+
+struct gcc_targetdm targetdm = TARGETDM_INITIALIZER;
diff --git a/gcc/config/t-freebsd b/gcc/config/t-freebsd
new file mode 100644
index 00000000000..ca0cb2e60a8
--- /dev/null
+++ b/gcc/config/t-freebsd
@@ -0,0 +1,21 @@ 
+# Copyright (C) 2020 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/>.
+
+freebsd-d.o: $(srcdir)/config/freebsd-d.c
+	$(COMPILE) $<
+	$(POSTCOMPILE)
diff --git a/libphobos/configure.tgt b/libphobos/configure.tgt
index 1ea9e0c804c..7d9c6bc0c92 100644
--- a/libphobos/configure.tgt
+++ b/libphobos/configure.tgt
@@ -49,6 +49,9 @@  case "${target}" in
   s390*-linux*)
 	LIBPHOBOS_SUPPORTED=yes
 	;;
+  x86_64-*-freebsd* | i?86-*-freebsd*)
+	LIBPHOBOS_SUPPORTED=yes
+	;;
   x86_64-*-kfreebsd*-gnu | i?86-*-kfreebsd*-gnu)
 	LIBPHOBOS_SUPPORTED=yes
 	;;