OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [ecos-2.0/] [doc/] [html/] [cdl-guide/] [build.html] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1254 phoenix
<!-- Copyright (C) 2003 Red Hat, Inc.                                -->
2
<!-- This material may be distributed only subject to the terms      -->
3
<!-- and conditions set forth in the Open Publication License, v1.0  -->
4
<!-- or later (the latest version is presently available at          -->
5
<!-- http://www.opencontent.org/openpub/).                           -->
6
<!-- Distribution of the work or derivative of the work in any       -->
7
<!-- standard (paper) book form is prohibited unless prior           -->
8
<!-- permission is obtained from the copyright holder.               -->
9
<HTML
10
><HEAD
11
><TITLE
12
>The Build Process</TITLE
13
><meta name="MSSmartTagsPreventParsing" content="TRUE">
14
<META
15
NAME="GENERATOR"
16
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
17
"><LINK
18
REL="HOME"
19
TITLE="The eCos Component Writer's Guide"
20
HREF="cdl-guide.html"><LINK
21
REL="PREVIOUS"
22
TITLE="Updating the ecos.db database"
23
HREF="language.database.html"><LINK
24
REL="NEXT"
25
TITLE="Configuration Header File Generation"
26
HREF="build.headers.html"></HEAD
27
><BODY
28
CLASS="CHAPTER"
29
BGCOLOR="#FFFFFF"
30
TEXT="#000000"
31
LINK="#0000FF"
32
VLINK="#840084"
33
ALINK="#0000FF"
34
><DIV
35
CLASS="NAVHEADER"
36
><TABLE
37
SUMMARY="Header navigation table"
38
WIDTH="100%"
39
BORDER="0"
40
CELLPADDING="0"
41
CELLSPACING="0"
42
><TR
43
><TH
44
COLSPAN="3"
45
ALIGN="center"
46
>The <SPAN
47
CLASS="APPLICATION"
48
>eCos</SPAN
49
> Component Writer's Guide</TH
50
></TR
51
><TR
52
><TD
53
WIDTH="10%"
54
ALIGN="left"
55
VALIGN="bottom"
56
><A
57
HREF="language.database.html"
58
ACCESSKEY="P"
59
>Prev</A
60
></TD
61
><TD
62
WIDTH="80%"
63
ALIGN="center"
64
VALIGN="bottom"
65
></TD
66
><TD
67
WIDTH="10%"
68
ALIGN="right"
69
VALIGN="bottom"
70
><A
71
HREF="build.headers.html"
72
ACCESSKEY="N"
73
>Next</A
74
></TD
75
></TR
76
></TABLE
77
><HR
78
ALIGN="LEFT"
79
WIDTH="100%"></DIV
80
><DIV
81
CLASS="CHAPTER"
82
><H1
83
><A
84
NAME="BUILD">Chapter 4. The Build Process</H1
85
><DIV
86
CLASS="TOC"
87
><DL
88
><DT
89
><B
90
>Table of Contents</B
91
></DT
92
><DT
93
><A
94
HREF="build.html#BUILD.OUTLINE"
95
>Build Tree Generation</A
96
></DT
97
><DT
98
><A
99
HREF="build.headers.html"
100
>Configuration Header File Generation</A
101
></DT
102
><DT
103
><A
104
HREF="build.make.html"
105
>Building eCos</A
106
></DT
107
><DT
108
><A
109
HREF="build.tests.html"
110
>Building Test Cases</A
111
></DT
112
></DL
113
></DIV
114
><P
115
>Some <SPAN
116
CLASS="APPLICATION"
117
>CDL</SPAN
118
> properties describe the consequences of manipulating
119
configuration options. There are two main types of consequences.
120
Typically enabling a configuration option results in one or more
121
<TT
122
CLASS="LITERAL"
123
>#define's</TT
124
> in a configuration header file, and
125
properties that affect this include <SPAN
126
CLASS="PROPERTY"
127
>define</SPAN
128
>, <SPAN
129
CLASS="PROPERTY"
130
>define_proc</SPAN
131
> and
132
<SPAN
133
CLASS="PROPERTY"
134
>no_define</SPAN
135
>. Enabling a configuration option can also affect the build
136
process, primarily determining which files get built and added to the
137
appropriate library. Properties related to the build process include
138
<SPAN
139
CLASS="PROPERTY"
140
>compile</SPAN
141
> and <SPAN
142
CLASS="PROPERTY"
143
>make</SPAN
144
>. This chapter describes the whole build process,
145
including details such as compiler flags and custom build steps.</P
146
><P
147
>Part of the overall design of the <SPAN
148
CLASS="APPLICATION"
149
>eCos</SPAN
150
> component framework is that
151
it can interact with a number of different build systems. The most
152
obvious of these is <SPAN
153
CLASS="APPLICATION"
154
>GNU
155
make</SPAN
156
>:the component framework can generate one or more
157
makefiles, and the user can then build the various packages simply by
158
invoking <SPAN
159
CLASS="APPLICATION"
160
>make</SPAN
161
>. However it
162
should also be possible to build <SPAN
163
CLASS="APPLICATION"
164
>eCos</SPAN
165
> by other means: the
166
component framework can be queried about what is involved in building
167
a given configuration, and this information can then be fed into the
168
desired build system. Component writers should be aware of this
169
possibility. Most packages will not be affected because the <SPAN
170
CLASS="PROPERTY"
171
>compile</SPAN
172
>
173
property can be used to provide all the required information, but care
174
has to be taken when writing custom build steps.</P
175
><DIV
176
CLASS="SECT1"
177
><H1
178
CLASS="SECT1"
179
><A
180
NAME="BUILD.OUTLINE">Build Tree Generation</H1
181
><P
182
>It is necessary to create an <SPAN
183
CLASS="APPLICATION"
184
>eCos</SPAN
185
> configuration before anything can
186
be built. With some tools such as the graphical configuration tool
187
this configuration will be created in memory, and it is not essential
188
to produce an <TT
189
CLASS="FILENAME"
190
>ecos.ecc</TT
191
> savefile first (although
192
it is still very desirable to generate such a savefile at some point,
193
to allow the configuration to be re-loaded later on). With other tools
194
the savefile is generated first, for example using
195
<TT
196
CLASS="LITERAL"
197
>ecosconfig&nbsp;new</TT
198
>, and then a build tree is
199
generated using <TT
200
CLASS="LITERAL"
201
>ecosconfig&nbsp;tree</TT
202
>. The savefile
203
contains all the information needed to recreate a configuration.</P
204
><P
205
>An <SPAN
206
CLASS="APPLICATION"
207
>eCos</SPAN
208
> build actually involves three separate trees. The component
209
repository acts as the source tree, and for application developers
210
this should be considered a read-only resource. The build tree is
211
where all intermediate files, especially object files, are created.
212
The install tree is where the main library
213
<TT
214
CLASS="FILENAME"
215
>libtarget.a</TT
216
>, the exported header files, and
217
similar files end up. Following a successful build it is possible to
218
take just the install tree and use it for developing an application:
219
none of the files in the component repository or the build tree are
220
needed for that. The build tree will be needed again only if the user
221
changes the configuration. However the install tree does not contain
222
copies of all of the documentation for the various packages, instead
223
the documentation is kept only in the component repository.</P
224
><P
225
>By default the build tree, the install tree, and the
226
<TT
227
CLASS="FILENAME"
228
>ecos.ecc</TT
229
> savefile all reside in the same
230
directory tree. This is not a requirement, both the install tree and
231
the savefile can be anywhere in the file system.</P
232
><P
233
>It is worth noting that the component framework does not separate the
234
usual <TT
235
CLASS="LITERAL"
236
>make</TT
237
> and <TT
238
CLASS="LITERAL"
239
>make&nbsp;install</TT
240
>
241
stages. A build always populates the install tree, and any
242
<TT
243
CLASS="LITERAL"
244
>make&nbsp;install</TT
245
> step would be redundant.</P
246
><P
247
>The install tree will always begin with two directories, <TT
248
CLASS="FILENAME"
249
>include</TT
250
> for the exported header files and
251
<TT
252
CLASS="FILENAME"
253
>lib</TT
254
> for the main library
255
<TT
256
CLASS="FILENAME"
257
>libtarget.a</TT
258
> and other files
259
such as the linker script. In addition there will be a subdirectory
260
<TT
261
CLASS="FILENAME"
262
>include/pkgconf</TT
263
> containing the
264
configuration header files, which are generated or updated at the same
265
time the build tree is created or updated. More details of header file
266
generation are given below. Additional <TT
267
CLASS="FILENAME"
268
>include</TT
269
> subdirectories such as <TT
270
CLASS="FILENAME"
271
>sys</TT
272
> and <TT
273
CLASS="FILENAME"
274
>cyg/kernel</TT
275
> will be created during the
276
first build, when each package's exported header files are copied to
277
the install tree. The install tree may also end up with additional
278
subdirectories during a build, for example as a result of custom build
279
steps. </P
280
><P
281
>The component framework does not define the structure of the build
282
tree, and this may vary between build systems. It can be assumed that
283
each package in the configuration will have its own directory in the
284
build tree, and that this directory will be used for storing the
285
package's object files and as the current directory for any build
286
steps for that package. This avoids problems when custom build steps
287
from different packages generate intermediate files which happen to
288
have the same name.</P
289
><P
290
>Some build systems may allow application developers to copy a source
291
file from the component repository to the build tree and edit the
292
copy. This allows users to experiment with small changes, for example
293
to add a couple of lines of debugging to a package, without having to
294
modify the master copy in the component repository which could be
295
shared by several projects or several people. Functionality such as
296
this is transparent to component writers, and it is the responsibility
297
of the build system to make sure that the right thing happens.</P
298
><DIV
299
CLASS="NOTE"
300
><BLOCKQUOTE
301
CLASS="NOTE"
302
><P
303
><B
304
>Note: </B
305
>There are some unresolved issues related to the build tree and install
306
tree. Specifically, when updating an existing build or install tree,
307
what should happen to unexpected files or directories? Suppose the
308
user started with a configuration that included the math library, and
309
the install tree contains header files <TT
310
CLASS="FILENAME"
311
>include/math.h</TT
312
> and <TT
313
CLASS="FILENAME"
314
>include/sys/ieeefp.h</TT
315
>. The user then removed
316
the math library from the configuration and is updating the build
317
tree. It is now desirable to remove these header files from the
318
install tree, so that if any application code still attempts to use
319
the math library this will fail at compile time rather than at link
320
time. There will also be some object files in the existing
321
<TT
322
CLASS="LITERAL"
323
>libtarget.a</TT
324
> library which are no longer
325
appropriate, and there may be other files in the install tree as a
326
result of custom build steps. The build tree will still contain a
327
directory for the math library, which no longer serves any purpose.</P
328
><P
329
>However, it is also possible that some of the files in the build tree
330
or the install tree were placed there by the user, in which case
331
removing them automatically would be a bad idea.</P
332
><P
333
>At present the component framework does not keep track of exactly what
334
should be present in the build and install trees, so it cannot readily
335
determine which files or library members are obsolete and can safely
336
be removed, and which ones are unexpected and need to be reported to
337
the user. This will be addressed in a future release of the system.</P
338
></BLOCKQUOTE
339
></DIV
340
></DIV
341
></DIV
342
><DIV
343
CLASS="NAVFOOTER"
344
><HR
345
ALIGN="LEFT"
346
WIDTH="100%"><TABLE
347
SUMMARY="Footer navigation table"
348
WIDTH="100%"
349
BORDER="0"
350
CELLPADDING="0"
351
CELLSPACING="0"
352
><TR
353
><TD
354
WIDTH="33%"
355
ALIGN="left"
356
VALIGN="top"
357
><A
358
HREF="language.database.html"
359
ACCESSKEY="P"
360
>Prev</A
361
></TD
362
><TD
363
WIDTH="34%"
364
ALIGN="center"
365
VALIGN="top"
366
><A
367
HREF="cdl-guide.html"
368
ACCESSKEY="H"
369
>Home</A
370
></TD
371
><TD
372
WIDTH="33%"
373
ALIGN="right"
374
VALIGN="top"
375
><A
376
HREF="build.headers.html"
377
ACCESSKEY="N"
378
>Next</A
379
></TD
380
></TR
381
><TR
382
><TD
383
WIDTH="33%"
384
ALIGN="left"
385
VALIGN="top"
386
>Updating the <SPAN
387
CLASS="DATABASE"
388
>ecos.db</SPAN
389
> database</TD
390
><TD
391
WIDTH="34%"
392
ALIGN="center"
393
VALIGN="top"
394
>&nbsp;</TD
395
><TD
396
WIDTH="33%"
397
ALIGN="right"
398
VALIGN="top"
399
>Configuration Header File Generation</TD
400
></TR
401
></TABLE
402
></DIV
403
></BODY
404
></HTML
405
>

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.