]>
Commit | Line | Data |
---|---|---|
3a2c1cd8 | 1 | /* Operating system specific defines to be used when targeting GCC for |
db009825 | 2 | hosting on Windows32, using a Unix style C library and tools. |
cbe34bb5 | 3 | Copyright (C) 1995-2017 Free Software Foundation, Inc. |
3a2c1cd8 | 4 | |
e20285ad | 5 | This file is part of GCC. |
3a2c1cd8 | 6 | |
e20285ad | 7 | GCC is free software; you can redistribute it and/or modify |
3a2c1cd8 | 8 | it under the terms of the GNU General Public License as published by |
2f83c7d6 | 9 | the Free Software Foundation; either version 3, or (at your option) |
3a2c1cd8 MM |
10 | any later version. |
11 | ||
e20285ad | 12 | GCC is distributed in the hope that it will be useful, |
3a2c1cd8 MM |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | GNU General Public License for more details. | |
16 | ||
17 | You should have received a copy of the GNU General Public License | |
2f83c7d6 NC |
18 | along with GCC; see the file COPYING3. If not see |
19 | <http://www.gnu.org/licenses/>. */ | |
3a2c1cd8 | 20 | |
8269de54 KT |
21 | #define EXTRA_OS_CPP_BUILTINS() \ |
22 | do \ | |
23 | { \ | |
24 | builtin_define ("__CYGWIN__"); \ | |
661e6bd7 | 25 | if (!TARGET_64BIT) \ |
8269de54 KT |
26 | builtin_define ("__CYGWIN32__"); \ |
27 | builtin_define ("__unix__"); \ | |
28 | builtin_define ("__unix"); \ | |
29 | } \ | |
30 | while (0) | |
4e190cf3 CF |
31 | |
32 | #undef CPP_SPEC | |
70e5e841 | 33 | #define CPP_SPEC "%(cpp_cpu) %{posix:-D_POSIX_SOURCE} \ |
8269de54 | 34 | %{!ansi:-Dunix} \ |
301f4402 | 35 | %{pthread:-D_REENTRANT} \ |
3edeb30d DK |
36 | %{mwin32:-DWIN32 -D_WIN32 -D__WIN32 -D__WIN32__ %{!ansi:-DWINNT}} \ |
37 | %{!nostdinc:%{!mno-win32:-idirafter ../include/w32api%s -idirafter ../../include/w32api%s}}\ | |
9a33d505 CF |
38 | " |
39 | ||
40 | #undef STARTFILE_SPEC | |
2baa5453 | 41 | #define STARTFILE_SPEC "\ |
3edeb30d | 42 | %{!shared: %{!mdll: crt0%O%s \ |
9a33d505 | 43 | %{pg:gcrt0%O%s}}}\ |
f7f049fa CT |
44 | %{shared:crtbeginS.o%s;:crtbegin.o%s} \ |
45 | %{fvtable-verify=none:%s; \ | |
46 | fvtable-verify=preinit:vtv_start.o%s; \ | |
47 | fvtable-verify=std:vtv_start.o%s}" | |
ffb6cec0 | 48 | |
9bd196f0 ZM |
49 | #undef ENDFILE_SPEC |
50 | #define ENDFILE_SPEC \ | |
0691dde9 | 51 | "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s}\ |
f70df035 | 52 | %{!shared:%:if-exists(default-manifest.o%s)}\ |
f7f049fa CT |
53 | %{fvtable-verify=none:%s; \ |
54 | fvtable-verify=preinit:vtv_end.o%s; \ | |
55 | fvtable-verify=std:vtv_end.o%s} \ | |
76f5e200 | 56 | crtend.o%s" |
9bd196f0 | 57 | |
9a33d505 CF |
58 | /* Normally, -lgcc is not needed since everything in it is in the DLL, but we |
59 | want to allow things to be added to it when installing new versions of | |
60 | GCC without making a new CYGWIN.DLL, so we leave it. Profiling is handled | |
70e5e841 | 61 | by calling the init function from main. */ |
9a33d505 | 62 | |
b8a1087d DK |
63 | #ifdef ENABLE_SHARED_LIBGCC |
64 | #define SHARED_LIBGCC_SPEC " \ | |
65 | %{static|static-libgcc:-lgcc -lgcc_eh} \ | |
66 | %{!static: \ | |
67 | %{!static-libgcc: \ | |
f4b719c7 | 68 | -lgcc_s -lgcc \ |
b8a1087d DK |
69 | } \ |
70 | } " | |
71 | #else | |
72 | #define SHARED_LIBGCC_SPEC " -lgcc " | |
73 | #endif | |
74 | ||
75 | #undef REAL_LIBGCC_SPEC | |
3edeb30d | 76 | #define REAL_LIBGCC_SPEC SHARED_LIBGCC_SPEC |
956d6950 | 77 | |
f5089633 RK |
78 | /* We have to dynamic link to get to the system DLLs. All of libc, libm and |
79 | the Unix stuff is in cygwin.dll. The import library is called | |
80 | 'libcygwin.a'. For Windows applications, include more libraries, but | |
81 | always include kernel32. We'd like to specific subsystem windows to | |
82 | ld, but that doesn't work just yet. */ | |
3a2c1cd8 MM |
83 | |
84 | #undef LIB_SPEC | |
2baa5453 CF |
85 | #define LIB_SPEC "\ |
86 | %{pg:-lgmon} \ | |
301f4402 | 87 | %{pthread: } \ |
3edeb30d | 88 | -lcygwin \ |
03fb4780 | 89 | %{mwindows:-lgdi32 -lcomdlg32} \ |
f7f049fa CT |
90 | %{fvtable-verify=preinit:-lvtv -lpsapi; \ |
91 | fvtable-verify=std:-lvtv -lpsapi} \ | |
d323f47e | 92 | -ladvapi32 -lshell32 -luser32 -lkernel32" |
3a2c1cd8 | 93 | |
f7e413e2 DK |
94 | /* To implement C++ function replacement we always wrap the cxx |
95 | malloc-like operators. See N2800 #17.6.4.6 [replacement.functions] */ | |
907c6efd | 96 | #define CXX_WRAP_SPEC_LIST " \ |
f7e413e2 DK |
97 | --wrap _Znwj \ |
98 | --wrap _Znaj \ | |
99 | --wrap _ZdlPv \ | |
100 | --wrap _ZdaPv \ | |
101 | --wrap _ZnwjRKSt9nothrow_t \ | |
102 | --wrap _ZnajRKSt9nothrow_t \ | |
103 | --wrap _ZdlPvRKSt9nothrow_t \ | |
104 | --wrap _ZdaPvRKSt9nothrow_t \ | |
907c6efd | 105 | " |
f7e413e2 DK |
106 | |
107 | #if defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS) | |
108 | ||
109 | #if USE_CYGWIN_LIBSTDCXX_WRAPPERS | |
110 | /* Default on, only explict -mno disables. */ | |
111 | #define CXX_WRAP_SPEC_OPT "!mno-use-libstdc-wrappers" | |
112 | #else | |
113 | /* Default off, only explict -m enables. */ | |
114 | #define CXX_WRAP_SPEC_OPT "muse-libstdc-wrappers" | |
115 | #endif | |
116 | ||
3edeb30d | 117 | #define CXX_WRAP_SPEC "%{" CXX_WRAP_SPEC_OPT ":" CXX_WRAP_SPEC_LIST "}" |
f7e413e2 DK |
118 | |
119 | #else /* !defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS) */ | |
120 | ||
121 | #define CXX_WRAP_SPEC "" | |
122 | ||
123 | #endif /* ?defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS) */ | |
124 | ||
70e5e841 | 125 | #define LINK_SPEC "\ |
2baa5453 | 126 | %{mwindows:--subsystem windows} \ |
03fb4780 | 127 | %{mconsole:--subsystem console} \ |
f7e413e2 | 128 | " CXX_WRAP_SPEC " \ |
03fb4780 CF |
129 | %{shared: %{mdll: %eshared and mdll are not compatible}} \ |
130 | %{shared: --shared} %{mdll:--dll} \ | |
131 | %{static:-Bstatic} %{!static:-Bdynamic} \ | |
3edeb30d | 132 | %{shared|mdll: --enable-auto-image-base -e __cygwin_dll_entry@12} \ |
04017283 YS |
133 | --dll-search-prefix=cyg \ |
134 | %{!shared: %{!mdll: --large-address-aware --tsaware}}" | |
59b1a766 DS |
135 | |
136 | /* Binutils does not handle weak symbols from dlls correctly. For now, | |
137 | do not use them unnecessarily in gthr-posix.h. */ | |
138 | #define GTHREAD_USE_WEAK 0 | |
0f047685 DB |
139 | |
140 | /* Every program on cygwin links against cygwin1.dll which contains | |
141 | the pthread routines. There is no need to explicitly link them | |
301f4402 | 142 | and the -pthread flag is accepted only for compatibility. */ |
0f047685 DB |
143 | #undef GOMP_SELF_SPECS |
144 | #define GOMP_SELF_SPECS "" | |
255a9a1b EB |
145 | #undef GTM_SELF_SPECS |
146 | #define GTM_SELF_SPECS "" | |
3cbfaf98 DK |
147 | |
148 | /* This matches SHLIB_SONAME and SHLIB_SOVERSION in t-cygwin. */ | |
149 | #if DWARF2_UNWIND_INFO | |
150 | #define LIBGCC_EH_EXTN "" | |
151 | #else | |
152 | #define LIBGCC_EH_EXTN "-sjlj" | |
153 | #endif | |
154 | #define LIBGCC_SONAME "cyggcc_s" LIBGCC_EH_EXTN "-1.dll" | |
6a92b6c7 | 155 | |
c8f34527 JY |
156 | /* Make stack executable to avoid DEP problems with trampolines. */ |
157 | #define HAVE_ENABLE_EXECUTE_STACK | |
158 | #undef CHECK_EXECUTE_STACK_ENABLED | |
159 | #define CHECK_EXECUTE_STACK_ENABLED flag_setstackexecutable |