summaryrefslogtreecommitdiff
path: root/gcc/config/lynx.h
blob: d0fa650ba846c5d700c99fcaad6c1e357a9c0384 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
/* Target independent definitions for LynxOS.
   Copyright (C) 1993-2017 Free Software Foundation, Inc.

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.

GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */

/* In this file we set up defaults that can be chosen by
   <target>/lynx.h files.  A target-specific lynx.h file can decide
   either to define and override these definitions or to use them by
   ensuring they are undefined at this point.  If we were to #undef
   them here we might accidentally disable some target-specific
   defines.  */

#ifndef EXTRA_OS_LYNX_TARGET_SPECS
# define EXTRA_OS_LYNX_TARGET_SPECS
#endif

#ifndef EXTRA_OS_LYNX_SPECS
# define EXTRA_OS_LYNX_SPECS \
  { "cpp_os_lynx", CPP_OS_LYNX_SPEC }, \
  { "lib_os_lynx", LIB_OS_LYNX_SPEC }, \
  { "link_os_lynx", LINK_OS_LYNX_SPEC }, \
  { "startfile_os_lynx", STARTFILE_OS_LYNX_SPEC }, \
  { "endfile_os_lynx", ENDFILE_OS_LYNX_SPEC }, \
  EXTRA_OS_LYNX_TARGET_SPECS
#endif

#ifndef SUBTARGET_EXTRA_SPECS
# define SUBTARGET_EXTRA_SPECS EXTRA_OS_LYNX_SPECS
#endif

#ifndef CPP_SPEC
# define CPP_SPEC "%(cpp_cpu) %(cpp_os_lynx)"
#endif

#ifndef LIB_SPEC
# define LIB_SPEC "%(lib_os_lynx)"
#endif

#ifndef LINK_SPEC
# define LINK_SPEC "%(link_os_lynx)"
#endif

#ifndef STARTFILE_SPEC
# define STARTFILE_SPEC "%(startfile_os_lynx)"
#endif

#ifndef ENDFILE_SPEC
# define ENDFILE_SPEC "%(endfile_os_lynx)"
#endif

#ifndef CPP_OS_LYNX_SPEC
# define CPP_OS_LYNX_SPEC \
"%{mthreads: \
   %{mlegacy-threads: \
     %ecannot use mthreads and mlegacy-threads together}} \
 %{mthreads: -D_MULTITHREADED} \
 %{mlegacy-threads: -D_THREADS_POSIX4ad4} \
 -Asystem=lynx -Asystem=unix -D__Lynx__ -D__unix__"
#endif

#ifndef LIB_OS_LYNX_SPEC
# define LIB_OS_LYNX_SPEC \
"%{mlegacy-threads:-lposix-pre1c} -lm -lc"
#endif

/* We link static executables for LynxOS by default unless -mshared is
   used when linking an executable.  Along the same line, we link to
   shared libraries when linking a shared object by default unless
   -static is used.

   We have to pass in our -L options here otherwise the translated
   startfile directories (%D) will take priority over this.
   Furthermore since we have to pass in -L options here we have to
   make sure that -L options provided by the user take priority over
   everything we specify.  */

#ifndef LINK_OS_LYNX_SPEC
# define LINK_OS_LYNX_SPEC \
"%{shared} %{static} \
 %{mshared: %{static: %ecannot use mshared and static together}} \
 %{!mshared: %{!shared: %{!static: -static}}} \
 %{L*} \
 %{mthreads: \
   %{mshared: -L/lib/thread/shlib -rpath /lib/thread/shlib} \
   %{shared: \
     %{!static: -L/lib/thread/shlib -rpath /lib/thread/shlib} \
   %{!mshared: -L/lib/thread}} \
   %{shared: %{static: -L/lib/thread}}} \
 %{!mthreads: \
   %{mshared: -L/lib/shlib -rpath /lib/shlib} \
   %{shared: -L/lib/shlib -rpath /lib/shlib}} \
 %{mlegacy-threads:-lposix-pre1c} -lm -lc"
#endif

#ifndef STARTFILE_OS_LYNX_SPEC
# define STARTFILE_OS_LYNX_SPEC \
"%{!shared: \
   %{!mthreads: \
     %{p:gcrt1.o%s} %{pg:gcrt1.o%s} \
     %{!p:%{!pg:crt1.o%s}}} \
   %{mthreads: \
     %{p:thread/gcrt1.o%s} %{pg:thread/gcrt1.o%s} \
     %{!p:%{!pg:thread/crt1.o%s }}}}\
 %{mthreads: thread/crti.o%s} %{!mthreads: crti.o%s} \
 %{!shared: crtbegin.o%s} \
 %{shared: crtbeginS.o%s}"
#endif

#ifndef ENDFILE_OS_LYNX_SPEC
# define ENDFILE_OS_LYNX_SPEC \
"%{!shared: crtend.o%s} \
 %{shared: crtendS.o%s} \
 %{mthreads: thread/crtn.o%s} %{!mthreads: crtn.o%s}"
#endif

/* Define the actual types of some ANSI-mandated types.  */

#ifndef SIZE_TYPE
# define SIZE_TYPE "unsigned int"
#endif

#ifndef  PTRDIFF_TYPE
# define PTRDIFF_TYPE "int"
#endif

#ifndef  WCHAR_TYPE
# define WCHAR_TYPE "long int"
#endif

#ifndef  WCHAR_TYPE_SIZE
# define WCHAR_TYPE_SIZE BITS_PER_WORD
#endif

/* Define ASM_OUTPUT_ALIGN to use the .balign directive rather that
   the .align directive with GAS.  */

#ifndef ASM_OUTPUT_ALIGN
# define ASM_OUTPUT_ALIGN(FILE, LOG) 			\
  do							\
    {							\
      if ((LOG) != 0)					\
	fprintf ((FILE), "\t.balign %d\n", 1 << (LOG));	\
    }							\
  while (0)
#endif

/* Keep the *_DEBUGGING_INFO defines from elfos.h except that stabs is
   the default on LynxOS.  */

#ifndef PREFERRED_DEBUGGING_TYPE
# define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
#endif

/* We have C++ support in our system headers.  */

#ifndef NO_IMPLICIT_EXTERN_C
# define NO_IMPLICIT_EXTERN_C
#endif

#ifndef TARGET_POSIX_IO
# define TARGET_POSIX_IO
#endif