| /* Operating system specific defines to be used when targeting GCC for |
| hosting on Windows32, using a Unix style C library and tools. |
| Copyright (C) 1995-2021 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/>. */ |
| |
| #define EXTRA_OS_CPP_BUILTINS() \ |
| do \ |
| { \ |
| builtin_define ("__CYGWIN__"); \ |
| if (!TARGET_64BIT) \ |
| builtin_define ("__CYGWIN32__"); \ |
| builtin_define ("__unix__"); \ |
| builtin_define ("__unix"); \ |
| } \ |
| 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} \ |
| %{pthread:-D_REENTRANT} \ |
| %{mwin32:-DWIN32 -D_WIN32 -D__WIN32 -D__WIN32__ %{!ansi:-DWINNT}} \ |
| %{!nostdinc:%{!mno-win32:-idirafter ../include/w32api%s -idirafter ../../include/w32api%s}}\ |
| " |
| |
| #undef STARTFILE_SPEC |
| #define STARTFILE_SPEC "\ |
| %{!shared: %{!mdll: crt0%O%s \ |
| %{pg:gcrt0%O%s}}}\ |
| %{shared:crtbeginS.o%s;:crtbegin.o%s} \ |
| %{fvtable-verify=none:%s; \ |
| fvtable-verify=preinit:vtv_start.o%s; \ |
| fvtable-verify=std:vtv_start.o%s}" |
| |
| #undef ENDFILE_SPEC |
| #define ENDFILE_SPEC \ |
| "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s}\ |
| %{!shared:%:if-exists(default-manifest.o%s)}\ |
| %{fvtable-verify=none:%s; \ |
| fvtable-verify=preinit:vtv_end.o%s; \ |
| fvtable-verify=std:vtv_end.o%s} \ |
| crtend.o%s" |
| |
| /* Normally, -lgcc is not needed since everything in it is in the DLL, but we |
| want to allow things to be added to it when installing new versions of |
| GCC without making a new CYGWIN.DLL, so we leave it. Profiling is handled |
| by calling the init function from main. */ |
| |
| #ifdef ENABLE_SHARED_LIBGCC |
| #define SHARED_LIBGCC_SPEC " \ |
| %{static|static-libgcc:-lgcc -lgcc_eh} \ |
| %{!static: \ |
| %{!static-libgcc: \ |
| -lgcc_s -lgcc \ |
| } \ |
| } " |
| #else |
| #define SHARED_LIBGCC_SPEC " -lgcc " |
| #endif |
| |
| #undef REAL_LIBGCC_SPEC |
| #define REAL_LIBGCC_SPEC SHARED_LIBGCC_SPEC |
| |
| /* We have to dynamic link to get to the system DLLs. All of libc, libm and |
| the Unix stuff is in cygwin.dll. The import library is called |
| 'libcygwin.a'. For Windows applications, include more libraries, but |
| always include kernel32. We'd like to specific subsystem windows to |
| ld, but that doesn't work just yet. */ |
| |
| #undef LIB_SPEC |
| #define LIB_SPEC "\ |
| %{pg:-lgmon} \ |
| %{pthread: } \ |
| -lcygwin \ |
| %{mwindows:-lgdi32 -lcomdlg32} \ |
| %{fvtable-verify=preinit:-lvtv -lpsapi; \ |
| fvtable-verify=std:-lvtv -lpsapi} \ |
| -ladvapi32 -lshell32 -luser32 -lkernel32" |
| |
| /* To implement C++ function replacement we always wrap the cxx |
| malloc-like operators. See N2800 #17.6.4.6 [replacement.functions] */ |
| #define CXX_WRAP_SPEC_LIST " \ |
| --wrap _Znwj \ |
| --wrap _Znaj \ |
| --wrap _ZdlPv \ |
| --wrap _ZdaPv \ |
| --wrap _ZnwjRKSt9nothrow_t \ |
| --wrap _ZnajRKSt9nothrow_t \ |
| --wrap _ZdlPvRKSt9nothrow_t \ |
| --wrap _ZdaPvRKSt9nothrow_t \ |
| " |
| |
| #if defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS) |
| |
| #if USE_CYGWIN_LIBSTDCXX_WRAPPERS |
| /* Default on, only explict -mno disables. */ |
| #define CXX_WRAP_SPEC_OPT "!mno-use-libstdc-wrappers" |
| #else |
| /* Default off, only explict -m enables. */ |
| #define CXX_WRAP_SPEC_OPT "muse-libstdc-wrappers" |
| #endif |
| |
| #define CXX_WRAP_SPEC "%{" CXX_WRAP_SPEC_OPT ":" CXX_WRAP_SPEC_LIST "}" |
| |
| #else /* !defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS) */ |
| |
| #define CXX_WRAP_SPEC "" |
| |
| #endif /* ?defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS) */ |
| |
| #define LINK_SPEC "\ |
| %{mwindows:--subsystem windows} \ |
| %{mconsole:--subsystem console} \ |
| " CXX_WRAP_SPEC " \ |
| %{shared: %{mdll: %eshared and mdll are not compatible}} \ |
| %{shared: --shared} %{mdll:--dll} \ |
| %{static:-Bstatic} %{!static:-Bdynamic} \ |
| %{shared|mdll: --enable-auto-image-base -e __cygwin_dll_entry@12} \ |
| --dll-search-prefix=cyg \ |
| %{!shared: %{!mdll: --large-address-aware --tsaware}}" |
| |
| /* Binutils does not handle weak symbols from dlls correctly. For now, |
| do not use them unnecessarily in gthr-posix.h. */ |
| #define GTHREAD_USE_WEAK 0 |
| |
| /* Every program on cygwin links against cygwin1.dll which contains |
| the pthread routines. There is no need to explicitly link them |
| and the -pthread flag is accepted only for compatibility. */ |
| #undef GOMP_SELF_SPECS |
| #define GOMP_SELF_SPECS "" |
| #undef GTM_SELF_SPECS |
| #define GTM_SELF_SPECS "" |
| |
| /* This matches SHLIB_SONAME and SHLIB_SOVERSION in t-cygwin. */ |
| #if DWARF2_UNWIND_INFO |
| #define LIBGCC_EH_EXTN "" |
| #else |
| #define LIBGCC_EH_EXTN "-sjlj" |
| #endif |
| #define LIBGCC_SONAME "cyggcc_s" LIBGCC_EH_EXTN "-1.dll" |
| |
| /* Make stack executable to avoid DEP problems with trampolines. */ |
| #define HAVE_ENABLE_EXECUTE_STACK |
| #undef CHECK_EXECUTE_STACK_ENABLED |
| #define CHECK_EXECUTE_STACK_ENABLED flag_setstackexecutable |