Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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, 2007, 2008,
  4.    2009, 2010 Free Software Foundation, Inc.
  5.  
  6. This file is part of GCC.
  7.  
  8. GCC is free software; you can redistribute it and/or modify
  9. it under the terms of the GNU General Public License as published by
  10. the Free Software Foundation; either version 3, or (at your option)
  11. any later version.
  12.  
  13. GCC is distributed in the hope that it will be useful,
  14. but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. GNU General Public License for more details.
  17.  
  18. You should have received a copy of the GNU General Public License
  19. along with GCC; see the file COPYING3.  If not see
  20. <http://www.gnu.org/licenses/>.  */
  21.  
  22. #undef TARGET_VERSION
  23. #if TARGET_64BIT_DEFAULT
  24. #define TARGET_VERSION fprintf (stderr,"(x86_64 MinGW");
  25. #else
  26. #define TARGET_VERSION fprintf (stderr," (x86 MinGW)");
  27. #endif
  28.  
  29. /* See i386/crtdll.h for an alternative definition. _INTEGRAL_MAX_BITS
  30.    is for compatibility with native compiler.  */
  31. #define EXTRA_OS_CPP_BUILTINS()                                 \
  32.   do                                                            \
  33.     {                                                           \
  34.       builtin_define ("__MSVCRT__");                            \
  35.       builtin_define ("__MINGW32__");                           \
  36.       builtin_define ("_WIN32");                                \
  37.       builtin_define_std ("WIN32");                             \
  38.       builtin_define_std ("WINNT");                             \
  39.       builtin_define_with_int_value ("_INTEGRAL_MAX_BITS",      \
  40.                                      TYPE_PRECISION (intmax_type_node));\
  41.       if (TARGET_64BIT && ix86_abi == MS_ABI)                   \
  42.         {                                                       \
  43.           builtin_define ("__MINGW64__");                       \
  44.           builtin_define_std ("WIN64");                         \
  45.           builtin_define_std ("_WIN64");                        \
  46.         }                                                       \
  47.     }                                                           \
  48.   while (0)
  49.  
  50. #undef SUB_LINK_ENTRY32
  51. #undef SUB_LINK_ENTRY64
  52. #define SUB_LINK_ENTRY32 "-e _DllMainCRTStartup@12"
  53. #if defined(USE_MINGW64_LEADING_UNDERSCORES)
  54. #define SUB_LINK_ENTRY64 "-e _DllMainCRTStartup"
  55. #else
  56. #define SUB_LINK_ENTRY64 "-e DllMainCRTStartup"
  57. #endif
  58.  
  59. #undef SUB_LINK_ENTRY
  60. #if TARGET_64BIT_DEFAULT
  61. #define SUB_LINK_ENTRY SUB_LINK_ENTRY64
  62. #else
  63. #define SUB_LINK_ENTRY SUB_LINK_ENTRY32
  64. #endif
  65.  
  66. /* Override the standard choice of /usr/include as the default prefix
  67.    to try when searching for header files.  */
  68. #undef STANDARD_INCLUDE_DIR
  69. #define STANDARD_INCLUDE_DIR "/mingw/include"
  70. #undef STANDARD_INCLUDE_COMPONENT
  71. #define STANDARD_INCLUDE_COMPONENT "MINGW"
  72.  
  73. #undef CPP_SPEC
  74. #define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT}"
  75.  
  76. /* For Windows applications, include more libraries, but always include
  77.    kernel32.  */
  78. #undef LIB_SPEC
  79. #define LIB_SPEC "%{pg:-lgmon} %{mwindows:-lgdi32 -lcomdlg32} \
  80.                   -luser32 -lkernel32 -ladvapi32 -lshell32"
  81.  
  82. /* Weak symbols do not get resolved if using a Windows dll import lib.
  83.    Make the unwind registration references strong undefs.  */
  84. #if DWARF2_UNWIND_INFO
  85. /* DW2-unwind is just available for 32-bit mode.  */
  86. #if TARGET_64BIT_DEFAULT
  87. #error DW2 unwind is not available for 64-bit.
  88. #endif
  89. #define SHARED_LIBGCC_UNDEFS_SPEC \
  90.  "%{shared-libgcc: -u ___register_frame_info -u ___deregister_frame_info}"
  91. #else
  92. #define SHARED_LIBGCC_UNDEFS_SPEC ""
  93. #endif
  94.  
  95. #undef  SUBTARGET_EXTRA_SPECS
  96. #define SUBTARGET_EXTRA_SPECS                                           \
  97.   { "shared_libgcc_undefs", SHARED_LIBGCC_UNDEFS_SPEC }
  98.  
  99. #define LINK_SPEC "%{mwindows:--subsystem windows} \
  100.   %{mconsole:--subsystem console} \
  101.   %{shared: %{mdll: %eshared and mdll are not compatible}} \
  102.   %{shared: --shared} %{mdll:--dll} \
  103.   %{static:-Bstatic} %{!static:-Bdynamic} \
  104.   %{shared|mdll: " SUB_LINK_ENTRY " --enable-auto-image-base} \
  105.   %(shared_libgcc_undefs)"
  106.  
  107. /* Include in the mingw32 libraries with libgcc */
  108. #ifdef ENABLE_SHARED_LIBGCC
  109. #define SHARED_LIBGCC_SPEC "%{shared-libgcc:-lgcc_s} %{!shared-libgcc:-lgcc_eh}"
  110. #else
  111. #define SHARED_LIBGCC_SPEC /*empty*/
  112. #endif
  113. #undef REAL_LIBGCC_SPEC
  114. #define REAL_LIBGCC_SPEC \
  115.   "%{mthreads:-lmingwthrd} -lmingw32 \
  116.    "SHARED_LIBGCC_SPEC" \
  117.    -lgcc \
  118.    -lmoldname -lmingwex -lmsvcrt"
  119.  
  120. #undef STARTFILE_SPEC
  121. #define STARTFILE_SPEC "%{shared|mdll:dllcrt2%O%s} \
  122.   %{!shared:%{!mdll:crt2%O%s}} %{pg:gcrt2%O%s} \
  123.   crtbegin.o%s"
  124.  
  125. #undef ENDFILE_SPEC
  126. #define ENDFILE_SPEC \
  127.   "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \
  128.   crtend.o%s"
  129.  
  130. /* Override startfile prefix defaults.  */
  131. #ifndef STANDARD_STARTFILE_PREFIX_1
  132. #define STANDARD_STARTFILE_PREFIX_1 "/mingw/lib/"
  133. #endif
  134. #ifndef STANDARD_STARTFILE_PREFIX_2
  135. #define STANDARD_STARTFILE_PREFIX_2 ""
  136. #endif
  137.  
  138. /* Put all *tf routines in libgcc.  */
  139. #undef LIBGCC2_HAS_TF_MODE
  140. #define LIBGCC2_HAS_TF_MODE 1
  141. #undef LIBGCC2_TF_CEXT
  142. #define LIBGCC2_TF_CEXT q
  143. #undef TF_SIZE
  144. #define TF_SIZE 113
  145.  
  146. /* Output STRING, a string representing a filename, to FILE.
  147.    We canonicalize it to be in Unix format (backslashes are replaced
  148.    forward slashes.  */
  149. #undef OUTPUT_QUOTED_STRING
  150. #define OUTPUT_QUOTED_STRING(FILE, STRING)               \
  151. do {                                                     \
  152.   char c;                                                \
  153.                                                          \
  154.   putc ('\"', asm_file);                                 \
  155.                                                          \
  156.   while ((c = *string++) != 0)                           \
  157.     {                                                    \
  158.       if (c == '\\')                                     \
  159.         c = '/';                                         \
  160.                                                          \
  161.       if (ISPRINT (c))                                   \
  162.         {                                                \
  163.           if (c == '\"')                                 \
  164.             putc ('\\', asm_file);                       \
  165.           putc (c, asm_file);                            \
  166.         }                                                \
  167.       else                                               \
  168.         fprintf (asm_file, "\\%03o", (unsigned char) c); \
  169.     }                                                    \
  170.                                                          \
  171.   putc ('\"', asm_file);                                 \
  172. } while (0)
  173.  
  174. /* Define as short unsigned for compatibility with MS runtime.  */
  175. #undef WINT_TYPE
  176. #define WINT_TYPE "short unsigned int"
  177.  
  178. /* mingw32 uses the  -mthreads option to enable thread support.  */
  179. #undef GOMP_SELF_SPECS
  180. #define GOMP_SELF_SPECS "%{fopenmp: -mthreads}"
  181.  
  182. /* mingw32 atexit function is safe to use in shared libraries.  Use it
  183.    to register C++ static destructors.  */
  184. #define TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT hook_bool_void_true
  185.  
  186. /* Contains a pointer to type target_ovr_attr defining the target specific
  187.    overrides of format attributes.  See c-format.h for structure
  188.    definition.  */
  189. #undef TARGET_OVERRIDES_FORMAT_ATTRIBUTES
  190. #define TARGET_OVERRIDES_FORMAT_ATTRIBUTES mingw_format_attribute_overrides
  191.  
  192. /* Specify the count of elements in TARGET_OVERRIDES_ATTRIBUTE.  */
  193. #undef TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT
  194. #define TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT 3
  195.  
  196. /* Custom initialization for warning -Wpedantic-ms-format for c-format.  */
  197. #undef TARGET_OVERRIDES_FORMAT_INIT
  198. #define TARGET_OVERRIDES_FORMAT_INIT msformat_init
  199.  
  200. /* MS specific format attributes for ms_printf, ms_scanf, ms_strftime.  */
  201. #undef TARGET_FORMAT_TYPES
  202. #define TARGET_FORMAT_TYPES mingw_format_attributes
  203.  
  204. #undef TARGET_N_FORMAT_TYPES
  205. #define TARGET_N_FORMAT_TYPES 3
  206.  
  207. /* Let defaults.h definition of TARGET_USE_JCR_SECTION apply. */
  208. #undef TARGET_USE_JCR_SECTION
  209.  
  210. #undef MINGW_ENABLE_EXECUTE_STACK
  211. #define MINGW_ENABLE_EXECUTE_STACK     \
  212. extern void __enable_execute_stack (void *);    \
  213. void         \
  214. __enable_execute_stack (void *addr)                                     \
  215. {                                                                       \
  216.   MEMORY_BASIC_INFORMATION b;                                           \
  217.   if (!VirtualQuery (addr, &b, sizeof(b)))                              \
  218.     abort ();                                                           \
  219.   VirtualProtect (b.BaseAddress, b.RegionSize, PAGE_EXECUTE_READWRITE,  \
  220.                   &b.Protect);                                          \
  221. }
  222.  
  223. #undef ENABLE_EXECUTE_STACK
  224. #define ENABLE_EXECUTE_STACK MINGW_ENABLE_EXECUTE_STACK
  225. #undef  CHECK_EXECUTE_STACK_ENABLED
  226. #define CHECK_EXECUTE_STACK_ENABLED flag_setstackexecutable
  227.  
  228. #ifdef IN_LIBGCC2
  229. #include <windows.h>
  230. #endif
  231.  
  232. /* For 64-bit Windows we can't use DW2 unwind info. Also for multilib
  233.    builds we can't use it, too.  */
  234. #if !TARGET_64BIT_DEFAULT && !defined (TARGET_BI_ARCH)
  235. #define MD_UNWIND_SUPPORT "config/i386/w32-unwind.h"
  236. #endif
  237.  
  238. /* This matches SHLIB_SONAME and SHLIB_SOVERSION in t-cygming. */
  239. /* This matches SHLIB_SONAME and SHLIB_SOVERSION in t-cygwin. */
  240. #if DWARF2_UNWIND_INFO
  241. #define LIBGCC_EH_EXTN "_dw2"
  242. #else
  243. #define LIBGCC_EH_EXTN "_sjlj"
  244. #endif
  245. #define LIBGCC_SONAME "libgcc_s" LIBGCC_EH_EXTN "-1.dll"
  246.  
  247. /* We should find a way to not have to update this manually.  */
  248. #define LIBGCJ_SONAME "libgcj" /*LIBGCC_EH_EXTN*/ "-11.dll"
  249.  
  250.