Imported Upstream version 4.8.1
[platform/upstream/gcc48.git] / gcc / config / netbsd.h
1 /* Base configuration file for all NetBSD targets.
2    Copyright (C) 1997-2013 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
10
11 GCC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3.  If not see
18 <http://www.gnu.org/licenses/>.  */
19
20 /* TARGET_OS_CPP_BUILTINS() common to all NetBSD targets.  */
21 #define NETBSD_OS_CPP_BUILTINS_COMMON()         \
22   do                                            \
23     {                                           \
24       builtin_define ("__NetBSD__");            \
25       builtin_define ("__unix__");              \
26       builtin_assert ("system=bsd");            \
27       builtin_assert ("system=unix");           \
28       builtin_assert ("system=NetBSD");         \
29     }                                           \
30   while (0)
31
32 /* CPP_SPEC parts common to all NetBSD targets.  */
33 #define NETBSD_CPP_SPEC                         \
34   "%{posix:-D_POSIX_SOURCE} \
35    %{pthread:-D_REENTRANT -D_PTHREADS}"
36
37 /* NETBSD_NATIVE is defined when gcc is integrated into the NetBSD
38    source tree so it can be configured appropriately without using
39    the GNU configure/build mechanism.  */
40
41 #ifdef NETBSD_NATIVE
42
43 /* Look for the include files in the system-defined places.  */
44
45 #undef GPLUSPLUS_INCLUDE_DIR
46 #define GPLUSPLUS_INCLUDE_DIR "/usr/include/g++"
47
48 #undef GCC_INCLUDE_DIR
49 #define GCC_INCLUDE_DIR "/usr/include"
50
51 #undef INCLUDE_DEFAULTS
52 #define INCLUDE_DEFAULTS                        \
53   {                                             \
54     { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },     \
55     { GCC_INCLUDE_DIR, "GCC", 0, 0 },           \
56     { 0, 0, 0, 0 }                              \
57   }
58
59 /* Under NetBSD, the normal location of the compiler back ends is the
60    /usr/libexec directory.  */
61
62 #undef STANDARD_EXEC_PREFIX
63 #define STANDARD_EXEC_PREFIX            "/usr/libexec/"
64
65 /* Under NetBSD, the normal location of the various *crt*.o files is the
66    /usr/lib directory.  */
67
68 #undef STANDARD_STARTFILE_PREFIX
69 #define STANDARD_STARTFILE_PREFIX       "/usr/lib/"
70
71 #endif /* NETBSD_NATIVE */
72
73
74 /* Provide a LIB_SPEC appropriate for NetBSD.  Here we:
75
76    1. Select the appropriate set of libs, depending on whether we're
77       profiling.
78
79    2. Include the pthread library if -pthread is specified (only
80       if threads are enabled).
81
82    3. Include the posix library if -posix is specified.
83
84    FIXME: Could eliminate the duplication here if we were allowed to
85    use string concatenation.  */
86
87 #ifdef NETBSD_ENABLE_PTHREADS
88 #define NETBSD_LIB_SPEC         \
89   "%{pthread:                   \
90      %{!p:                      \
91        %{!pg:-lpthread}}        \
92      %{p:-lpthread_p}           \
93      %{pg:-lpthread_p}}         \
94    %{posix:                     \
95      %{!p:                      \
96        %{!pg:-lposix}}          \
97      %{p:-lposix_p}             \
98      %{pg:-lposix_p}}           \
99    %{!shared:                   \
100      %{!symbolic:               \
101        %{!p:                    \
102          %{!pg:-lc}}            \
103        %{p:-lc_p}               \
104        %{pg:-lc_p}}}"
105 #else
106 #define NETBSD_LIB_SPEC         \
107   "%{posix:                     \
108      %{!p:                      \
109        %{!pg:-lposix}}          \
110      %{p:-lposix_p}             \
111      %{pg:-lposix_p}}           \
112    %{!shared:                   \
113      %{!symbolic:               \
114        %{!p:                    \
115          %{!pg:-lc}}            \
116        %{p:-lc_p}               \
117        %{pg:-lc_p}}}"
118 #endif
119
120 #undef LIB_SPEC
121 #define LIB_SPEC NETBSD_LIB_SPEC
122
123 /* Provide a LIBGCC_SPEC appropriate for NetBSD.  We also want to exclude
124    libgcc with -symbolic.  */
125
126 #ifdef NETBSD_NATIVE
127 #define NETBSD_LIBGCC_SPEC      \
128   "%{!symbolic:                 \
129      %{!shared:                 \
130        %{!p:                    \
131          %{!pg: -lgcc}}}        \
132      %{shared: -lgcc_pic}       \
133      %{p: -lgcc_p}              \
134      %{pg: -lgcc_p}}"
135 #else
136 #define NETBSD_LIBGCC_SPEC "%{!shared:%{!symbolic: -lgcc}}"
137 #endif
138
139 #undef LIBGCC_SPEC
140 #define LIBGCC_SPEC NETBSD_LIBGCC_SPEC
141
142 /* When building shared libraries, the initialization and finalization 
143    functions for the library are .init and .fini respectively.  */
144
145 #define COLLECT_SHARED_INIT_FUNC(STREAM,FUNC)                           \
146   do {                                                                  \
147     fprintf ((STREAM), "void __init() __asm__ (\".init\");");           \
148     fprintf ((STREAM), "void __init() {\n\t%s();\n}\n", (FUNC));        \
149   } while (0)
150
151 #define COLLECT_SHARED_FINI_FUNC(STREAM,FUNC)                           \
152   do {                                                                  \
153     fprintf ((STREAM), "void __fini() __asm__ (\".fini\");");           \
154     fprintf ((STREAM), "void __fini() {\n\t%s();\n}\n", (FUNC));        \
155   } while (0)
156
157 #undef TARGET_POSIX_IO
158 #define TARGET_POSIX_IO
159
160 /* Don't assume anything about the header files.  */
161 #undef  NO_IMPLICIT_EXTERN_C
162 #define NO_IMPLICIT_EXTERN_C    1
163
164 /* Define some types that are the same on all NetBSD platforms,
165    making them agree with <machine/ansi.h>.  */
166
167 #undef WCHAR_TYPE
168 #define WCHAR_TYPE "int"
169
170 #undef WCHAR_TYPE_SIZE
171 #define WCHAR_TYPE_SIZE 32
172
173 #undef WINT_TYPE
174 #define WINT_TYPE "int"