2015-09-29 Steven G. Kargl <kargl@gcc.gnu.org>
[official-gcc.git] / gcc / config / netbsd.h
blob5aa7aba4594a40404f68b587a226e403f31cdddb
1 /* Base configuration file for all NetBSD targets.
2 Copyright (C) 1997-2015 Free Software Foundation, Inc.
4 This file is part of GCC.
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.
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.
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/>. */
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)
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}"
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. */
41 #ifdef NETBSD_NATIVE
43 /* Look for the include files in the system-defined places. */
45 #undef GPLUSPLUS_INCLUDE_DIR
46 #define GPLUSPLUS_INCLUDE_DIR "/usr/include/g++"
48 #undef GCC_INCLUDE_DIR
49 #define GCC_INCLUDE_DIR "/usr/include"
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 } \
59 /* Under NetBSD, the normal location of the compiler back ends is the
60 /usr/libexec directory. */
62 #undef STANDARD_EXEC_PREFIX
63 #define STANDARD_EXEC_PREFIX "/usr/libexec/"
65 /* Under NetBSD, the normal location of the various *crt*.o files is the
66 /usr/lib directory. */
68 #undef STANDARD_STARTFILE_PREFIX
69 #define STANDARD_STARTFILE_PREFIX "/usr/lib/"
71 #endif /* NETBSD_NATIVE */
74 /* Provide a LIB_SPEC appropriate for NetBSD. Here we:
76 1. Select the appropriate set of libs, depending on whether we're
77 profiling.
79 2. Include the pthread library if -pthread is specified (only
80 if threads are enabled).
82 3. Include the posix library if -posix is specified.
84 FIXME: Could eliminate the duplication here if we were allowed to
85 use string concatenation. */
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
120 #undef LIB_SPEC
121 #define LIB_SPEC NETBSD_LIB_SPEC
123 /* Provide a LIBGCC_SPEC appropriate for NetBSD. We also want to exclude
124 libgcc with -symbolic. */
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
139 #undef LIBGCC_SPEC
140 #define LIBGCC_SPEC NETBSD_LIBGCC_SPEC
142 #undef TARGET_LIBC_HAS_FUNCTION
143 #define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function
145 /* When building shared libraries, the initialization and finalization
146 functions for the library are .init and .fini respectively. */
148 #define COLLECT_SHARED_INIT_FUNC(STREAM,FUNC) \
149 do { \
150 fprintf ((STREAM), "void __init() __asm__ (\".init\");"); \
151 fprintf ((STREAM), "void __init() {\n\t%s();\n}\n", (FUNC)); \
152 } while (0)
154 #define COLLECT_SHARED_FINI_FUNC(STREAM,FUNC) \
155 do { \
156 fprintf ((STREAM), "void __fini() __asm__ (\".fini\");"); \
157 fprintf ((STREAM), "void __fini() {\n\t%s();\n}\n", (FUNC)); \
158 } while (0)
160 #undef TARGET_POSIX_IO
161 #define TARGET_POSIX_IO
163 /* Don't assume anything about the header files. */
164 #undef NO_IMPLICIT_EXTERN_C
165 #define NO_IMPLICIT_EXTERN_C 1
167 /* Define some types that are the same on all NetBSD platforms,
168 making them agree with <machine/ansi.h>. */
170 #undef WCHAR_TYPE
171 #define WCHAR_TYPE "int"
173 #undef WCHAR_TYPE_SIZE
174 #define WCHAR_TYPE_SIZE 32
176 #undef WINT_TYPE
177 #define WINT_TYPE "int"