d: Add windows support for D compiler [PR91595]

gcc/ChangeLog:

	PR d/91595
	* config.gcc (*-*-cygwin*): Add winnt-d.o
	(*-*-mingw*): Likewise.
	* config/i386/cygwin.h (EXTRA_TARGET_D_OS_VERSIONS): New macro.
	* config/i386/mingw32.h (EXTRA_TARGET_D_OS_VERSIONS): Likewise.
	* config/i386/t-cygming: Add winnt-d.o.
	* config/i386/winnt-d.c: New file.
This commit is contained in:
Iain Buclaw 2020-03-22 01:18:42 +01:00
parent 74ed3fc279
commit 2892e2f702
5 changed files with 87 additions and 0 deletions

View file

@ -2123,6 +2123,8 @@ i[34567]86-*-cygwin*)
extra_objs="${extra_objs} winnt.o winnt-stubs.o"
c_target_objs="${c_target_objs} msformat-c.o"
cxx_target_objs="${cxx_target_objs} winnt-cxx.o msformat-c.o"
d_target_objs="${d_target_objs} winnt-d.o"
target_has_targetdm="yes"
if test x$enable_threads = xyes; then
thread_file='posix'
fi
@ -2139,6 +2141,8 @@ x86_64-*-cygwin*)
extra_objs="${extra_objs} winnt.o winnt-stubs.o"
c_target_objs="${c_target_objs} msformat-c.o"
cxx_target_objs="${cxx_target_objs} winnt-cxx.o msformat-c.o"
d_target_objs="${d_target_objs} winnt-d.o"
target_has_targetdm="yes"
if test x$enable_threads = xyes; then
thread_file='posix'
fi
@ -2151,7 +2155,9 @@ i[34567]86-*-mingw* | x86_64-*-mingw*)
xm_file=i386/xm-mingw32.h
c_target_objs="${c_target_objs} winnt-c.o"
cxx_target_objs="${cxx_target_objs} winnt-c.o"
d_target_objs="${d_target_objs} winnt-d.o"
target_has_targetcm="yes"
target_has_targetdm="yes"
case ${target} in
x86_64-*-* | *-w64-*)
need_64bit_isa=yes

View file

@ -29,6 +29,15 @@ along with GCC; see the file COPYING3. If not see
} \
while (0)
#define EXTRA_TARGET_D_OS_VERSIONS() \
do \
{ \
builtin_version ("Cygwin"); \
builtin_version ("Posix"); \
builtin_version ("CRuntime_Newlib"); \
} \
while (0)
#undef CPP_SPEC
#define CPP_SPEC "%(cpp_cpu) %{posix:-D_POSIX_SOURCE} \
%{!ansi:-Dunix} \

View file

@ -53,6 +53,18 @@ along with GCC; see the file COPYING3. If not see
} \
while (0)
#define EXTRA_TARGET_D_OS_VERSIONS() \
do \
{ \
builtin_version ("MinGW"); \
if (TARGET_64BIT && ix86_abi == MS_ABI) \
builtin_version ("Win64"); \
else if (!TARGET_64BIT) \
builtin_version ("Win32"); \
builtin_version ("CRuntime_Microsoft"); \
} \
while (0)
#ifndef TARGET_USE_PTHREAD_BY_DEFAULT
#define SPEC_PTHREAD1 "pthread"
#define SPEC_PTHREAD2 "!no-pthread"

View file

@ -39,6 +39,10 @@ winnt-stubs.o: $(srcdir)/config/i386/winnt-stubs.c $(CONFIG_H) $(SYSTEM_H) coret
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
$(srcdir)/config/i386/winnt-stubs.c
winnt-d.o: $(srcdir)/config/i386/winnt-d.c
$(COMPILE) $<
$(POSTCOMPILE)
msformat-c.o: $(srcdir)/config/i386/msformat-c.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
$(TM_P_H) $(HASHTAB_H) $(GGC_H)

56
gcc/config/i386/winnt-d.c Normal file
View file

@ -0,0 +1,56 @@
/* Windows support needed only by D front-end.
Copyright (C) 2021 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 "target.h"
#include "d/d-target.h"
#include "d/d-target-def.h"
#include "tm_p.h"
/* Implement TARGET_D_OS_VERSIONS for Windows targets. */
static void
winnt_d_os_builtins (void)
{
d_add_builtin_version ("Windows");
#define builtin_version(TXT) d_add_builtin_version (TXT)
#ifdef EXTRA_TARGET_D_OS_VERSIONS
EXTRA_TARGET_D_OS_VERSIONS ();
#endif
}
#undef TARGET_D_OS_VERSIONS
#define TARGET_D_OS_VERSIONS winnt_d_os_builtins
/* Define TARGET_D_MINFO_SECTION for Windows targets. */
#undef TARGET_D_MINFO_SECTION
#define TARGET_D_MINFO_SECTION "minfo"
#undef TARGET_D_MINFO_START_NAME
#define TARGET_D_MINFO_START_NAME "__start_minfo"
#undef TARGET_D_MINFO_END_NAME
#define TARGET_D_MINFO_END_NAME "__stop_minfo"
struct gcc_targetdm targetdm = TARGETDM_INITIALIZER;