152284Sobrien/* Operating system specific defines to be used when targeting GCC for 290075Sobrien hosting on Windows32, using a Unix style C library and tools. 3117395Skan Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 490075Sobrien Free Software Foundation, Inc. 552284Sobrien 6132718SkanThis file is part of GCC. 752284Sobrien 8132718SkanGCC is free software; you can redistribute it and/or modify 952284Sobrienit under the terms of the GNU General Public License as published by 1052284Sobrienthe Free Software Foundation; either version 2, or (at your option) 1152284Sobrienany later version. 1252284Sobrien 13132718SkanGCC is distributed in the hope that it will be useful, 1452284Sobrienbut WITHOUT ANY WARRANTY; without even the implied warranty of 1552284SobrienMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1652284SobrienGNU General Public License for more details. 1752284Sobrien 1852284SobrienYou should have received a copy of the GNU General Public License 19132718Skanalong with GCC; see the file COPYING. If not, write to 20169689Skanthe Free Software Foundation, 51 Franklin Street, Fifth Floor, 21169689SkanBoston, MA 02110-1301, USA. */ 2252284Sobrien 23132718Skan#define TARGET_VERSION fprintf (stderr, " (x86 Cygwin)"); 2452284Sobrien 25132718Skan#define EXTRA_OS_CPP_BUILTINS() /* Nothing. */ 2690075Sobrien 2790075Sobrien#undef CPP_SPEC 28132718Skan#define CPP_SPEC "%(cpp_cpu) %{posix:-D_POSIX_SOURCE} \ 2990075Sobrien %{mno-win32:%{mno-cygwin: %emno-cygwin and mno-win32 are not compatible}} \ 30132718Skan %{mno-cygwin:-D__MSVCRT__ -D__MINGW32__ %{!ansi:%{mthreads:-D_MT}}}\ 31132718Skan %{!mno-cygwin:-D__CYGWIN32__ -D__CYGWIN__ %{!ansi:-Dunix} -D__unix__ -D__unix }\ 3290075Sobrien %{mwin32|mno-cygwin:-DWIN32 -D_WIN32 -D__WIN32 -D__WIN32__ %{!ansi:-DWINNT}}\ 33132718Skan %{!nostdinc:%{!mno-win32|mno-cygwin:-idirafter ../include/w32api%s -idirafter ../../include/w32api%s}}\ 3490075Sobrien" 3552284Sobrien 3690075Sobrien#undef STARTFILE_SPEC 3790075Sobrien#define STARTFILE_SPEC "\ 38132718Skan %{shared|mdll: %{mno-cygwin:dllcrt2%O%s}}\ 39132718Skan %{!shared: %{!mdll: %{!mno-cygwin:crt0%O%s} %{mno-cygwin:crt2%O%s}\ 4090075Sobrien %{pg:gcrt0%O%s}}}\ 4190075Sobrien" 4290075Sobrien 4352284Sobrien/* Normally, -lgcc is not needed since everything in it is in the DLL, but we 4452284Sobrien want to allow things to be added to it when installing new versions of 4552284Sobrien GCC without making a new CYGWIN.DLL, so we leave it. Profiling is handled 46132718Skan by calling the init function from main. */ 4752284Sobrien 4890075Sobrien#undef LIBGCC_SPEC 49132718Skan#define LIBGCC_SPEC \ 50132718Skan "%{mno-cygwin: %{mthreads:-lmingwthrd} -lmingw32} -lgcc \ 51132718Skan %{mno-cygwin:-lmoldname -lmingwex -lmsvcrt}" 5252284Sobrien 5352284Sobrien/* We have to dynamic link to get to the system DLLs. All of libc, libm and 5452284Sobrien the Unix stuff is in cygwin.dll. The import library is called 5552284Sobrien 'libcygwin.a'. For Windows applications, include more libraries, but 5652284Sobrien always include kernel32. We'd like to specific subsystem windows to 5752284Sobrien ld, but that doesn't work just yet. */ 5852284Sobrien 5952284Sobrien#undef LIB_SPEC 6090075Sobrien#define LIB_SPEC "\ 6190075Sobrien %{pg:-lgmon} \ 6290075Sobrien %{!mno-cygwin:-lcygwin} \ 6390075Sobrien %{mno-cygwin:%{mthreads:-lmingwthrd} -lmingw32} \ 6490075Sobrien %{mwindows:-lgdi32 -lcomdlg32} \ 6590075Sobrien -luser32 -lkernel32 -ladvapi32 -lshell32" 6652284Sobrien 67132718Skan#define LINK_SPEC "\ 6890075Sobrien %{mwindows:--subsystem windows} \ 6990075Sobrien %{mconsole:--subsystem console} \ 7090075Sobrien %{shared: %{mdll: %eshared and mdll are not compatible}} \ 7190075Sobrien %{shared: --shared} %{mdll:--dll} \ 7290075Sobrien %{static:-Bstatic} %{!static:-Bdynamic} \ 7390075Sobrien %{shared|mdll: -e \ 7490075Sobrien %{mno-cygwin:_DllMainCRTStartup@12} \ 7590075Sobrien %{!mno-cygwin:__cygwin_dll_entry@12}}\ 76132718Skan %{!mno-cygwin:--dll-search-prefix=cyg}" 7752284Sobrien 78132718Skan/* Allocate space for all of the machine-spec-specific stuff. 79132718Skan Allocate enough space for cygwin -> mingw32 munging plus 80132718Skan possible addition of "/mingw". */ 8152284Sobrien 82132718Skan#ifndef CYGWIN_MINGW_SUBDIR 83132718Skan#define CYGWIN_MINGW_SUBDIR "/mingw" 84132718Skan#endif 85132718Skan#define CYGWIN_MINGW_SUBDIR_LEN (sizeof (CYGWIN_MINGW_SUBDIR) - 1) 8652284Sobrien 87132718Skan#ifdef GPLUSPLUS_INCLUDE_DIR 88132718Skanchar cygwin_gplusplus_include_dir[sizeof (GPLUSPLUS_INCLUDE_DIR) + 1 89132718Skan + (CYGWIN_MINGW_SUBDIR_LEN)] 90132718Skan = GPLUSPLUS_INCLUDE_DIR; 91132718Skan#undef GPLUSPLUS_INCLUDE_DIR 92132718Skan#define GPLUSPLUS_INCLUDE_DIR ((const char *) cygwin_gplusplus_include_dir) 93132718Skan#ifndef GEN_CVT_ARRAY 94132718Skan#define GEN_CVT_ARRAY 95132718Skan#endif 96132718Skan#endif 9752284Sobrien 98132718Skan#ifdef GPLUSPLUS_TOOL_INCLUDE_DIR 99132718Skanchar cygwin_gplusplus_tool_include_dir[sizeof (GPLUSPLUS_TOOL_INCLUDE_DIR) + 1 100132718Skan + CYGWIN_MINGW_SUBDIR_LEN] 101132718Skan = GPLUSPLUS_TOOL_INCLUDE_DIR; 102132718Skan#undef GPLUSPLUS_TOOL_INCLUDE_DIR 103132718Skan#define GPLUSPLUS_TOOL_INCLUDE_DIR ((const char *) cygwin_gplusplus_tool_include_dir) 104132718Skan#ifndef GEN_CVT_ARRAY 105132718Skan#define GEN_CVT_ARRAY 106132718Skan#endif 107132718Skan#endif 10852284Sobrien 109132718Skan#ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR 110132718Skanchar cygwin_gplusplus_backward_include_dir[sizeof (GPLUSPLUS_BACKWARD_INCLUDE_DIR) + 1 111132718Skan + CYGWIN_MINGW_SUBDIR_LEN] 112132718Skan = GPLUSPLUS_BACKWARD_INCLUDE_DIR; 113132718Skan#undef GPLUSPLUS_BACKWARD_INCLUDE_DIR 114132718Skan#define GPLUSPLUS_BACKWARD_INCLUDE_DIR ((const char *) cygwin_gplusplus_backward_include_dir) 115132718Skan#ifndef GEN_CVT_ARRAY 116132718Skan#define GEN_CVT_ARRAY 117132718Skan#endif 118132718Skan#endif 11952284Sobrien 120132718Skan#ifdef LOCAL_INCLUDE_DIR 121132718Skanchar cygwin_local_include_dir[sizeof (LOCAL_INCLUDE_DIR) + 1 122132718Skan + CYGWIN_MINGW_SUBDIR_LEN] 123132718Skan = LOCAL_INCLUDE_DIR; 124132718Skan#undef LOCAL_INCLUDE_DIR 125132718Skan#define LOCAL_INCLUDE_DIR ((const char *) cygwin_local_include_dir) 126132718Skan#ifndef GEN_CVT_ARRAY 127132718Skan#define GEN_CVT_ARRAY 128132718Skan#endif 129132718Skan#endif 13052284Sobrien 131132718Skan#ifdef CROSS_INCLUDE_DIR 132132718Skanchar cygwin_cross_include_dir[sizeof (CROSS_INCLUDE_DIR) + 1 133132718Skan + CYGWIN_MINGW_SUBDIR_LEN] 134132718Skan = CROSS_INCLUDE_DIR; 135132718Skan#undef CROSS_INCLUDE_DIR 136132718Skan#define CROSS_INCLUDE_DIR ((const char *) cygwin_cross_include_dir) 137132718Skan#ifndef GEN_CVT_ARRAY 138132718Skan#define GEN_CVT_ARRAY 139132718Skan#endif 140132718Skan#endif 14152284Sobrien 142132718Skan#ifdef TOOL_INCLUDE_DIR 143132718Skanchar cygwin_tool_include_dir[sizeof (TOOL_INCLUDE_DIR) + 1 144132718Skan + CYGWIN_MINGW_SUBDIR_LEN] 145132718Skan = TOOL_INCLUDE_DIR; 146132718Skan#undef TOOL_INCLUDE_DIR 147132718Skan#define TOOL_INCLUDE_DIR ((const char *) cygwin_tool_include_dir) 14852284Sobrien 149258428Spfg#ifndef CROSS_DIRECTORY_STRUCTURE 150132718Skan#undef STANDARD_INCLUDE_DIR 151132718Skan#define STANDARD_INCLUDE_DIR "/usr/include" 152132718Skanchar cygwin_standard_include_dir[sizeof (STANDARD_INCLUDE_DIR) + 1 153132718Skan + CYGWIN_MINGW_SUBDIR_LEN] 154132718Skan = STANDARD_INCLUDE_DIR; 155132718Skan#undef STANDARD_INCLUDE_DIR 156132718Skan#define STANDARD_INCLUDE_DIR ((const char *) cygwin_standard_include_dir) 157132718Skan#endif 15852284Sobrien 159132718Skan#ifndef GEN_CVT_ARRAY 160132718Skan#define GEN_CVT_ARRAY 161132718Skan#endif 162132718Skan#endif 16352284Sobrien 164132718Skan#ifndef GEN_CVT_ARRAY 165132718Skanextern char *cvt_to_mingw[]; 166132718Skan#else 167132718Skanchar *cvt_to_mingw[] = 168132718Skan { 169132718Skan#ifdef GPLUSPLUS_INCLUDE_DIR 170132718Skan cygwin_gplusplus_include_dir, 171132718Skan#endif 17252284Sobrien 173132718Skan#ifdef GPLUSPLUS_TOOL_INCLUDE_DIR 174132718Skan cygwin_gplusplus_tool_include_dir, 175132718Skan#endif 17652284Sobrien 177132718Skan#ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR 178132718Skan cygwin_gplusplus_backward_include_dir, 179132718Skan#endif 18052284Sobrien 181132718Skan#ifdef LOCAL_INCLUDE_DIR 182132718Skan cygwin_local_include_dir, 183132718Skan#endif 18452284Sobrien 185132718Skan#ifdef CROSS_INCLUDE_DIR 186132718Skan cygwin_cross_include_dir, 187132718Skan#endif 18852284Sobrien 189132718Skan#ifdef TOOL_INCLUDE_DIR 190132718Skan cygwin_tool_include_dir, 191132718Skan#endif 19252284Sobrien 193132718Skan#ifdef STANDARD_INCLUDE_DIR 194132718Skan cygwin_standard_include_dir, 19552284Sobrien#endif 19652284Sobrien 197132718Skan NULL 198132718Skan }; 199132718Skan#undef GEN_CVT_ARRAY 200132718Skan#endif /*GEN_CVT_ARRAY*/ 20190075Sobrien 202132718Skanvoid mingw_scan (int, const char * const *, char **); 203132718Skan#if 1 204132718Skan#define GCC_DRIVER_HOST_INITIALIZATION \ 205132718Skando \ 206132718Skan{ \ 207169689Skan mingw_scan(argc, (const char * const *) argv, (char **) &spec_machine); \ 208132718Skan } \ 209132718Skanwhile (0) 210132718Skan#else 211132718Skan#define GCC_DRIVER_HOST_INITIALIZATION \ 212132718Skando \ 213132718Skan{ \ 214132718Skan char *cprefix = concat (tooldir_base_prefix, spec_machine, \ 215132718Skan dir_separator_str, NULL); \ 216132718Skan if (!IS_ABSOLUTE_PATH (cprefix)) \ 217132718Skan cprefix = concat (standard_exec_prefix, spec_machine, dir_separator_str, \ 218132718Skan spec_version, dir_separator_str, tooldir_prefix, NULL); \ 219132718Skan add_prefix (&exec_prefixes,\ 220132718Skan concat (cprefix, "../../../../", spec_machine, "/bin/", NULL), \ 221132718Skan "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); \ 222132718Skan add_prefix (&exec_prefixes, cprefix, \ 223132718Skan "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); \ 224132718Skan add_prefix (&startfile_prefixes,\ 225132718Skan concat (standard_startfile_prefix, "w32api", NULL),\ 226132718Skan "GCC", PREFIX_PRIORITY_LAST, 0, NULL);\ 227169689Skan mingw_scan(argc, (const char * const *) argv, &spec_machine); \ 228132718Skan } \ 229132718Skanwhile (0) 23090075Sobrien#endif 231169689Skan 232169689Skan/* Binutils does not handle weak symbols from dlls correctly. For now, 233169689Skan do not use them unnecessarily in gthr-posix.h. */ 234169689Skan#define GTHREAD_USE_WEAK 0 235169689Skan 236169689Skan/* Every program on cygwin links against cygwin1.dll which contains 237169689Skan the pthread routines. There is no need to explicitly link them 238169689Skan and the -pthread flag is not recognized. */ 239169689Skan#undef GOMP_SELF_SPECS 240169689Skan#define GOMP_SELF_SPECS "" 241