cygwin.h revision 259563
1/* Operating system specific defines to be used when targeting GCC for 2 hosting on Windows32, using a Unix style C library and tools. 3 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 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#define TARGET_VERSION fprintf (stderr, " (x86 Cygwin)"); 24 25#define EXTRA_OS_CPP_BUILTINS() /* Nothing. */ 26 27#undef CPP_SPEC 28#define CPP_SPEC "%(cpp_cpu) %{posix:-D_POSIX_SOURCE} \ 29 %{mno-win32:%{mno-cygwin: %emno-cygwin and mno-win32 are not compatible}} \ 30 %{mno-cygwin:-D__MSVCRT__ -D__MINGW32__ %{!ansi:%{mthreads:-D_MT}}}\ 31 %{!mno-cygwin:-D__CYGWIN32__ -D__CYGWIN__ %{!ansi:-Dunix} -D__unix__ -D__unix }\ 32 %{mwin32|mno-cygwin:-DWIN32 -D_WIN32 -D__WIN32 -D__WIN32__ %{!ansi:-DWINNT}}\ 33 %{!nostdinc:%{!mno-win32|mno-cygwin:-idirafter ../include/w32api%s -idirafter ../../include/w32api%s}}\ 34" 35 36#undef STARTFILE_SPEC 37#define STARTFILE_SPEC "\ 38 %{shared|mdll: %{mno-cygwin:dllcrt2%O%s}}\ 39 %{!shared: %{!mdll: %{!mno-cygwin:crt0%O%s} %{mno-cygwin:crt2%O%s}\ 40 %{pg:gcrt0%O%s}}}\ 41" 42 43/* Normally, -lgcc is not needed since everything in it is in the DLL, but we 44 want to allow things to be added to it when installing new versions of 45 GCC without making a new CYGWIN.DLL, so we leave it. Profiling is handled 46 by calling the init function from main. */ 47 48#undef LIBGCC_SPEC 49#define LIBGCC_SPEC \ 50 "%{mno-cygwin: %{mthreads:-lmingwthrd} -lmingw32} -lgcc \ 51 %{mno-cygwin:-lmoldname -lmingwex -lmsvcrt}" 52 53/* We have to dynamic link to get to the system DLLs. All of libc, libm and 54 the Unix stuff is in cygwin.dll. The import library is called 55 'libcygwin.a'. For Windows applications, include more libraries, but 56 always include kernel32. We'd like to specific subsystem windows to 57 ld, but that doesn't work just yet. */ 58 59#undef LIB_SPEC 60#define LIB_SPEC "\ 61 %{pg:-lgmon} \ 62 %{!mno-cygwin:-lcygwin} \ 63 %{mno-cygwin:%{mthreads:-lmingwthrd} -lmingw32} \ 64 %{mwindows:-lgdi32 -lcomdlg32} \ 65 -luser32 -lkernel32 -ladvapi32 -lshell32" 66 67#define LINK_SPEC "\ 68 %{mwindows:--subsystem windows} \ 69 %{mconsole:--subsystem console} \ 70 %{shared: %{mdll: %eshared and mdll are not compatible}} \ 71 %{shared: --shared} %{mdll:--dll} \ 72 %{static:-Bstatic} %{!static:-Bdynamic} \ 73 %{shared|mdll: -e \ 74 %{mno-cygwin:_DllMainCRTStartup@12} \ 75 %{!mno-cygwin:__cygwin_dll_entry@12}}\ 76 %{!mno-cygwin:--dll-search-prefix=cyg}" 77 78/* Allocate space for all of the machine-spec-specific stuff. 79 Allocate enough space for cygwin -> mingw32 munging plus 80 possible addition of "/mingw". */ 81 82#ifndef CYGWIN_MINGW_SUBDIR 83#define CYGWIN_MINGW_SUBDIR "/mingw" 84#endif 85#define CYGWIN_MINGW_SUBDIR_LEN (sizeof (CYGWIN_MINGW_SUBDIR) - 1) 86 87#ifdef GPLUSPLUS_INCLUDE_DIR 88char cygwin_gplusplus_include_dir[sizeof (GPLUSPLUS_INCLUDE_DIR) + 1 89 + (CYGWIN_MINGW_SUBDIR_LEN)] 90 = GPLUSPLUS_INCLUDE_DIR; 91#undef GPLUSPLUS_INCLUDE_DIR 92#define GPLUSPLUS_INCLUDE_DIR ((const char *) cygwin_gplusplus_include_dir) 93#ifndef GEN_CVT_ARRAY 94#define GEN_CVT_ARRAY 95#endif 96#endif 97 98#ifdef GPLUSPLUS_TOOL_INCLUDE_DIR 99char cygwin_gplusplus_tool_include_dir[sizeof (GPLUSPLUS_TOOL_INCLUDE_DIR) + 1 100 + CYGWIN_MINGW_SUBDIR_LEN] 101 = GPLUSPLUS_TOOL_INCLUDE_DIR; 102#undef GPLUSPLUS_TOOL_INCLUDE_DIR 103#define GPLUSPLUS_TOOL_INCLUDE_DIR ((const char *) cygwin_gplusplus_tool_include_dir) 104#ifndef GEN_CVT_ARRAY 105#define GEN_CVT_ARRAY 106#endif 107#endif 108 109#ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR 110char cygwin_gplusplus_backward_include_dir[sizeof (GPLUSPLUS_BACKWARD_INCLUDE_DIR) + 1 111 + CYGWIN_MINGW_SUBDIR_LEN] 112 = GPLUSPLUS_BACKWARD_INCLUDE_DIR; 113#undef GPLUSPLUS_BACKWARD_INCLUDE_DIR 114#define GPLUSPLUS_BACKWARD_INCLUDE_DIR ((const char *) cygwin_gplusplus_backward_include_dir) 115#ifndef GEN_CVT_ARRAY 116#define GEN_CVT_ARRAY 117#endif 118#endif 119 120#ifdef LOCAL_INCLUDE_DIR 121char cygwin_local_include_dir[sizeof (LOCAL_INCLUDE_DIR) + 1 122 + CYGWIN_MINGW_SUBDIR_LEN] 123 = LOCAL_INCLUDE_DIR; 124#undef LOCAL_INCLUDE_DIR 125#define LOCAL_INCLUDE_DIR ((const char *) cygwin_local_include_dir) 126#ifndef GEN_CVT_ARRAY 127#define GEN_CVT_ARRAY 128#endif 129#endif 130 131#ifdef CROSS_INCLUDE_DIR 132char cygwin_cross_include_dir[sizeof (CROSS_INCLUDE_DIR) + 1 133 + CYGWIN_MINGW_SUBDIR_LEN] 134 = CROSS_INCLUDE_DIR; 135#undef CROSS_INCLUDE_DIR 136#define CROSS_INCLUDE_DIR ((const char *) cygwin_cross_include_dir) 137#ifndef GEN_CVT_ARRAY 138#define GEN_CVT_ARRAY 139#endif 140#endif 141 142#ifdef TOOL_INCLUDE_DIR 143char cygwin_tool_include_dir[sizeof (TOOL_INCLUDE_DIR) + 1 144 + CYGWIN_MINGW_SUBDIR_LEN] 145 = TOOL_INCLUDE_DIR; 146#undef TOOL_INCLUDE_DIR 147#define TOOL_INCLUDE_DIR ((const char *) cygwin_tool_include_dir) 148 149#ifndef CROSS_DIRECTORY_STRUCTURE 150#undef STANDARD_INCLUDE_DIR 151#define STANDARD_INCLUDE_DIR "/usr/include" 152char cygwin_standard_include_dir[sizeof (STANDARD_INCLUDE_DIR) + 1 153 + CYGWIN_MINGW_SUBDIR_LEN] 154 = STANDARD_INCLUDE_DIR; 155#undef STANDARD_INCLUDE_DIR 156#define STANDARD_INCLUDE_DIR ((const char *) cygwin_standard_include_dir) 157#endif 158 159#ifndef GEN_CVT_ARRAY 160#define GEN_CVT_ARRAY 161#endif 162#endif 163 164#ifndef GEN_CVT_ARRAY 165extern char *cvt_to_mingw[]; 166#else 167char *cvt_to_mingw[] = 168 { 169#ifdef GPLUSPLUS_INCLUDE_DIR 170 cygwin_gplusplus_include_dir, 171#endif 172 173#ifdef GPLUSPLUS_TOOL_INCLUDE_DIR 174 cygwin_gplusplus_tool_include_dir, 175#endif 176 177#ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR 178 cygwin_gplusplus_backward_include_dir, 179#endif 180 181#ifdef LOCAL_INCLUDE_DIR 182 cygwin_local_include_dir, 183#endif 184 185#ifdef CROSS_INCLUDE_DIR 186 cygwin_cross_include_dir, 187#endif 188 189#ifdef TOOL_INCLUDE_DIR 190 cygwin_tool_include_dir, 191#endif 192 193#ifdef STANDARD_INCLUDE_DIR 194 cygwin_standard_include_dir, 195#endif 196 197 NULL 198 }; 199#undef GEN_CVT_ARRAY 200#endif /*GEN_CVT_ARRAY*/ 201 202void mingw_scan (int, const char * const *, char **); 203#if 1 204#define GCC_DRIVER_HOST_INITIALIZATION \ 205do \ 206{ \ 207 mingw_scan(argc, (const char * const *) argv, (char **) &spec_machine); \ 208 } \ 209while (0) 210#else 211#define GCC_DRIVER_HOST_INITIALIZATION \ 212do \ 213{ \ 214 char *cprefix = concat (tooldir_base_prefix, spec_machine, \ 215 dir_separator_str, NULL); \ 216 if (!IS_ABSOLUTE_PATH (cprefix)) \ 217 cprefix = concat (standard_exec_prefix, spec_machine, dir_separator_str, \ 218 spec_version, dir_separator_str, tooldir_prefix, NULL); \ 219 add_prefix (&exec_prefixes,\ 220 concat (cprefix, "../../../../", spec_machine, "/bin/", NULL), \ 221 "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); \ 222 add_prefix (&exec_prefixes, cprefix, \ 223 "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); \ 224 add_prefix (&startfile_prefixes,\ 225 concat (standard_startfile_prefix, "w32api", NULL),\ 226 "GCC", PREFIX_PRIORITY_LAST, 0, NULL);\ 227 mingw_scan(argc, (const char * const *) argv, &spec_machine); \ 228 } \ 229while (0) 230#endif 231 232/* Binutils does not handle weak symbols from dlls correctly. For now, 233 do not use them unnecessarily in gthr-posix.h. */ 234#define GTHREAD_USE_WEAK 0 235 236/* Every program on cygwin links against cygwin1.dll which contains 237 the pthread routines. There is no need to explicitly link them 238 and the -pthread flag is not recognized. */ 239#undef GOMP_SELF_SPECS 240#define GOMP_SELF_SPECS "" 241