1/* Operating system specific defines to be used when targeting GCC for
2   hosting on Windows32, using GNU tools and the Windows32 API Library.
3   Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
4   Free Software Foundation, Inc.
5
6This file is part of GCC.
7
8GCC is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2, or (at your option)
11any later version.
12
13GCC is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with GCC; see the file COPYING.  If not, write to
20the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21Boston, MA 02110-1301, USA.  */
22
23#undef TARGET_VERSION
24#define TARGET_VERSION fprintf (stderr, " (x86 MinGW)");
25
26/* See i386/crtdll.h for an alternative definition.  */
27#define EXTRA_OS_CPP_BUILTINS()					\
28  do								\
29    {								\
30      builtin_define ("__MSVCRT__");				\
31      builtin_define ("__MINGW32__");			   	\
32      builtin_define ("_WIN32");				\
33      builtin_define_std ("WIN32");				\
34      builtin_define_std ("WINNT");				\
35    }								\
36  while (0)
37
38/* Override the standard choice of /usr/include as the default prefix
39   to try when searching for header files.  */
40#undef STANDARD_INCLUDE_DIR
41#define STANDARD_INCLUDE_DIR "/mingw/include"
42#undef STANDARD_INCLUDE_COMPONENT
43#define STANDARD_INCLUDE_COMPONENT "MINGW"
44
45#undef CPP_SPEC
46#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT}"
47
48/* For Windows applications, include more libraries, but always include
49   kernel32.  */
50#undef LIB_SPEC
51#define LIB_SPEC "%{pg:-lgmon} %{mwindows:-lgdi32 -lcomdlg32} \
52                  -luser32 -lkernel32 -ladvapi32 -lshell32"
53
54/* Include in the mingw32 libraries with libgcc */
55#undef LINK_SPEC
56#define LINK_SPEC "%{mwindows:--subsystem windows} \
57  %{mconsole:--subsystem console} \
58  %{shared: %{mdll: %eshared and mdll are not compatible}} \
59  %{shared: --shared} %{mdll:--dll} \
60  %{static:-Bstatic} %{!static:-Bdynamic} \
61  %{shared|mdll: -e _DllMainCRTStartup@12}"
62
63/* Include in the mingw32 libraries with libgcc */
64#undef LIBGCC_SPEC
65#define LIBGCC_SPEC \
66  "%{mthreads:-lmingwthrd} -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt"
67
68#undef STARTFILE_SPEC
69#define STARTFILE_SPEC "%{shared|mdll:dllcrt2%O%s} \
70  %{!shared:%{!mdll:crt2%O%s}} %{pg:gcrt2%O%s}"
71
72/* Override startfile prefix defaults.  */
73#ifndef STANDARD_STARTFILE_PREFIX_1
74#define STANDARD_STARTFILE_PREFIX_1 "/mingw/lib/"
75#endif
76#ifndef STANDARD_STARTFILE_PREFIX_2
77#define STANDARD_STARTFILE_PREFIX_2 ""
78#endif
79
80/* Output STRING, a string representing a filename, to FILE.
81   We canonicalize it to be in Unix format (backslashes are replaced
82   forward slashes.  */
83#undef OUTPUT_QUOTED_STRING
84#define OUTPUT_QUOTED_STRING(FILE, STRING)               \
85do {						         \
86  char c;					         \
87						         \
88  putc ('\"', asm_file);			         \
89						         \
90  while ((c = *string++) != 0)			         \
91    {						         \
92      if (c == '\\')				         \
93	c = '/';				         \
94						         \
95      if (ISPRINT (c))                                   \
96        {                                                \
97          if (c == '\"')			         \
98	    putc ('\\', asm_file);		         \
99          putc (c, asm_file);			         \
100        }                                                \
101      else                                               \
102        fprintf (asm_file, "\\%03o", (unsigned char) c); \
103    }						         \
104						         \
105  putc ('\"', asm_file);			         \
106} while (0)
107
108/* Define as short unsigned for compatibility with MS runtime.  */
109#undef WINT_TYPE
110#define WINT_TYPE "short unsigned int"
111
112/* mingw32 uses the  -mthreads option to enable thread support.  */
113#undef GOMP_SELF_SPECS
114#define GOMP_SELF_SPECS "%{fopenmp: -mthreads}"
115