1 |
284 |
jeremybenn |
@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
2 |
|
|
@c 1999, 2000, 2001, 2003, 2004, 2005, 2008 Free Software Foundation, Inc.
|
3 |
|
|
@c This is part of the GCC manual.
|
4 |
|
|
@c For copying conditions, see the file gcc.texi.
|
5 |
|
|
|
6 |
|
|
@node Fragments
|
7 |
|
|
@chapter Makefile Fragments
|
8 |
|
|
@cindex makefile fragment
|
9 |
|
|
|
10 |
|
|
When you configure GCC using the @file{configure} script, it will
|
11 |
|
|
construct the file @file{Makefile} from the template file
|
12 |
|
|
@file{Makefile.in}. When it does this, it can incorporate makefile
|
13 |
|
|
fragments from the @file{config} directory. These are used to set
|
14 |
|
|
Makefile parameters that are not amenable to being calculated by
|
15 |
|
|
autoconf. The list of fragments to incorporate is set by
|
16 |
|
|
@file{config.gcc} (and occasionally @file{config.build}
|
17 |
|
|
and @file{config.host}); @xref{System Config}.
|
18 |
|
|
|
19 |
|
|
Fragments are named either @file{t-@var{target}} or @file{x-@var{host}},
|
20 |
|
|
depending on whether they are relevant to configuring GCC to produce
|
21 |
|
|
code for a particular target, or to configuring GCC to run on a
|
22 |
|
|
particular host. Here @var{target} and @var{host} are mnemonics
|
23 |
|
|
which usually have some relationship to the canonical system name, but
|
24 |
|
|
no formal connection.
|
25 |
|
|
|
26 |
|
|
If these files do not exist, it means nothing needs to be added for a
|
27 |
|
|
given target or host. Most targets need a few @file{t-@var{target}}
|
28 |
|
|
fragments, but needing @file{x-@var{host}} fragments is rare.
|
29 |
|
|
|
30 |
|
|
@menu
|
31 |
|
|
* Target Fragment:: Writing @file{t-@var{target}} files.
|
32 |
|
|
* Host Fragment:: Writing @file{x-@var{host}} files.
|
33 |
|
|
@end menu
|
34 |
|
|
|
35 |
|
|
@node Target Fragment
|
36 |
|
|
@section Target Makefile Fragments
|
37 |
|
|
@cindex target makefile fragment
|
38 |
|
|
@cindex @file{t-@var{target}}
|
39 |
|
|
|
40 |
|
|
Target makefile fragments can set these Makefile variables.
|
41 |
|
|
|
42 |
|
|
@table @code
|
43 |
|
|
@findex LIBGCC2_CFLAGS
|
44 |
|
|
@item LIBGCC2_CFLAGS
|
45 |
|
|
Compiler flags to use when compiling @file{libgcc2.c}.
|
46 |
|
|
|
47 |
|
|
@findex LIB2FUNCS_EXTRA
|
48 |
|
|
@item LIB2FUNCS_EXTRA
|
49 |
|
|
A list of source file names to be compiled or assembled and inserted
|
50 |
|
|
into @file{libgcc.a}.
|
51 |
|
|
|
52 |
|
|
@findex Floating Point Emulation
|
53 |
|
|
@item Floating Point Emulation
|
54 |
|
|
To have GCC include software floating point libraries in @file{libgcc.a}
|
55 |
|
|
define @code{FPBIT} and @code{DPBIT} along with a few rules as follows:
|
56 |
|
|
@smallexample
|
57 |
|
|
# We want fine grained libraries, so use the new code
|
58 |
|
|
# to build the floating point emulation libraries.
|
59 |
|
|
FPBIT = fp-bit.c
|
60 |
|
|
DPBIT = dp-bit.c
|
61 |
|
|
|
62 |
|
|
|
63 |
|
|
fp-bit.c: $(srcdir)/config/fp-bit.c
|
64 |
|
|
echo '#define FLOAT' > fp-bit.c
|
65 |
|
|
cat $(srcdir)/config/fp-bit.c >> fp-bit.c
|
66 |
|
|
|
67 |
|
|
dp-bit.c: $(srcdir)/config/fp-bit.c
|
68 |
|
|
cat $(srcdir)/config/fp-bit.c > dp-bit.c
|
69 |
|
|
@end smallexample
|
70 |
|
|
|
71 |
|
|
You may need to provide additional #defines at the beginning of @file{fp-bit.c}
|
72 |
|
|
and @file{dp-bit.c} to control target endianness and other options.
|
73 |
|
|
|
74 |
|
|
|
75 |
|
|
@findex CRTSTUFF_T_CFLAGS
|
76 |
|
|
@item CRTSTUFF_T_CFLAGS
|
77 |
|
|
Special flags used when compiling @file{crtstuff.c}.
|
78 |
|
|
@xref{Initialization}.
|
79 |
|
|
|
80 |
|
|
@findex CRTSTUFF_T_CFLAGS_S
|
81 |
|
|
@item CRTSTUFF_T_CFLAGS_S
|
82 |
|
|
Special flags used when compiling @file{crtstuff.c} for shared
|
83 |
|
|
linking. Used if you use @file{crtbeginS.o} and @file{crtendS.o}
|
84 |
|
|
in @code{EXTRA-PARTS}.
|
85 |
|
|
@xref{Initialization}.
|
86 |
|
|
|
87 |
|
|
@findex MULTILIB_OPTIONS
|
88 |
|
|
@item MULTILIB_OPTIONS
|
89 |
|
|
For some targets, invoking GCC in different ways produces objects
|
90 |
|
|
that can not be linked together. For example, for some targets GCC
|
91 |
|
|
produces both big and little endian code. For these targets, you must
|
92 |
|
|
arrange for multiple versions of @file{libgcc.a} to be compiled, one for
|
93 |
|
|
each set of incompatible options. When GCC invokes the linker, it
|
94 |
|
|
arranges to link in the right version of @file{libgcc.a}, based on
|
95 |
|
|
the command line options used.
|
96 |
|
|
|
97 |
|
|
The @code{MULTILIB_OPTIONS} macro lists the set of options for which
|
98 |
|
|
special versions of @file{libgcc.a} must be built. Write options that
|
99 |
|
|
are mutually incompatible side by side, separated by a slash. Write
|
100 |
|
|
options that may be used together separated by a space. The build
|
101 |
|
|
procedure will build all combinations of compatible options.
|
102 |
|
|
|
103 |
|
|
For example, if you set @code{MULTILIB_OPTIONS} to @samp{m68000/m68020
|
104 |
|
|
msoft-float}, @file{Makefile} will build special versions of
|
105 |
|
|
@file{libgcc.a} using the following sets of options: @option{-m68000},
|
106 |
|
|
@option{-m68020}, @option{-msoft-float}, @samp{-m68000 -msoft-float}, and
|
107 |
|
|
@samp{-m68020 -msoft-float}.
|
108 |
|
|
|
109 |
|
|
@findex MULTILIB_DIRNAMES
|
110 |
|
|
@item MULTILIB_DIRNAMES
|
111 |
|
|
If @code{MULTILIB_OPTIONS} is used, this variable specifies the
|
112 |
|
|
directory names that should be used to hold the various libraries.
|
113 |
|
|
Write one element in @code{MULTILIB_DIRNAMES} for each element in
|
114 |
|
|
@code{MULTILIB_OPTIONS}. If @code{MULTILIB_DIRNAMES} is not used, the
|
115 |
|
|
default value will be @code{MULTILIB_OPTIONS}, with all slashes treated
|
116 |
|
|
as spaces.
|
117 |
|
|
|
118 |
|
|
For example, if @code{MULTILIB_OPTIONS} is set to @samp{m68000/m68020
|
119 |
|
|
msoft-float}, then the default value of @code{MULTILIB_DIRNAMES} is
|
120 |
|
|
@samp{m68000 m68020 msoft-float}. You may specify a different value if
|
121 |
|
|
you desire a different set of directory names.
|
122 |
|
|
|
123 |
|
|
@findex MULTILIB_MATCHES
|
124 |
|
|
@item MULTILIB_MATCHES
|
125 |
|
|
Sometimes the same option may be written in two different ways. If an
|
126 |
|
|
option is listed in @code{MULTILIB_OPTIONS}, GCC needs to know about
|
127 |
|
|
any synonyms. In that case, set @code{MULTILIB_MATCHES} to a list of
|
128 |
|
|
items of the form @samp{option=option} to describe all relevant
|
129 |
|
|
synonyms. For example, @samp{m68000=mc68000 m68020=mc68020}.
|
130 |
|
|
|
131 |
|
|
@findex MULTILIB_EXCEPTIONS
|
132 |
|
|
@item MULTILIB_EXCEPTIONS
|
133 |
|
|
Sometimes when there are multiple sets of @code{MULTILIB_OPTIONS} being
|
134 |
|
|
specified, there are combinations that should not be built. In that
|
135 |
|
|
case, set @code{MULTILIB_EXCEPTIONS} to be all of the switch exceptions
|
136 |
|
|
in shell case syntax that should not be built.
|
137 |
|
|
|
138 |
|
|
For example the ARM processor cannot execute both hardware floating
|
139 |
|
|
point instructions and the reduced size THUMB instructions at the same
|
140 |
|
|
time, so there is no need to build libraries with both of these
|
141 |
|
|
options enabled. Therefore @code{MULTILIB_EXCEPTIONS} is set to:
|
142 |
|
|
@smallexample
|
143 |
|
|
*mthumb/*mhard-float*
|
144 |
|
|
@end smallexample
|
145 |
|
|
|
146 |
|
|
@findex MULTILIB_EXTRA_OPTS
|
147 |
|
|
@item MULTILIB_EXTRA_OPTS
|
148 |
|
|
Sometimes it is desirable that when building multiple versions of
|
149 |
|
|
@file{libgcc.a} certain options should always be passed on to the
|
150 |
|
|
compiler. In that case, set @code{MULTILIB_EXTRA_OPTS} to be the list
|
151 |
|
|
of options to be used for all builds. If you set this, you should
|
152 |
|
|
probably set @code{CRTSTUFF_T_CFLAGS} to a dash followed by it.
|
153 |
|
|
|
154 |
|
|
@findex NATIVE_SYSTEM_HEADER_DIR
|
155 |
|
|
@item NATIVE_SYSTEM_HEADER_DIR
|
156 |
|
|
If the default location for system headers is not @file{/usr/include},
|
157 |
|
|
you must set this to the directory containing the headers. This value
|
158 |
|
|
should match the value of the @code{SYSTEM_INCLUDE_DIR} macro.
|
159 |
|
|
|
160 |
|
|
@findex SPECS
|
161 |
|
|
@item SPECS
|
162 |
|
|
Unfortunately, setting @code{MULTILIB_EXTRA_OPTS} is not enough, since
|
163 |
|
|
it does not affect the build of target libraries, at least not the
|
164 |
|
|
build of the default multilib. One possible work-around is to use
|
165 |
|
|
@code{DRIVER_SELF_SPECS} to bring options from the @file{specs} file
|
166 |
|
|
as if they had been passed in the compiler driver command line.
|
167 |
|
|
However, you don't want to be adding these options after the toolchain
|
168 |
|
|
is installed, so you can instead tweak the @file{specs} file that will
|
169 |
|
|
be used during the toolchain build, while you still install the
|
170 |
|
|
original, built-in @file{specs}. The trick is to set @code{SPECS} to
|
171 |
|
|
some other filename (say @file{specs.install}), that will then be
|
172 |
|
|
created out of the built-in specs, and introduce a @file{Makefile}
|
173 |
|
|
rule to generate the @file{specs} file that's going to be used at
|
174 |
|
|
build time out of your @file{specs.install}.
|
175 |
|
|
|
176 |
|
|
@item T_CFLAGS
|
177 |
|
|
These are extra flags to pass to the C compiler. They are used both
|
178 |
|
|
when building GCC, and when compiling things with the just-built GCC@.
|
179 |
|
|
This variable is deprecated and should not be used.
|
180 |
|
|
@end table
|
181 |
|
|
|
182 |
|
|
@node Host Fragment
|
183 |
|
|
@section Host Makefile Fragments
|
184 |
|
|
@cindex host makefile fragment
|
185 |
|
|
@cindex @file{x-@var{host}}
|
186 |
|
|
|
187 |
|
|
The use of @file{x-@var{host}} fragments is discouraged. You should only
|
188 |
|
|
use it for makefile dependencies.
|