UPDATING revision 1.41 1 $NetBSD: UPDATING,v 1.41 2001/10/26 13:38:52 wiz Exp $
2
3 This file is intended to be a brief introduction to the build
4 process and a reference on what to do if something doesn't work.
5
6 For a more detailed description see Makefile.
7
8 Recent changes:
9 ^^^^^^^^^^^^^^^
10
11 20011006:
12 /etc/mtree/NetBSD.dist has been updated to take advantage of
13 absolute path support added to mtree(8). Older mtree(8)s don't
14 understand the format.
15
16 Solution: update and reinstall usr.sbin/mtree
17
18 20011004:
19
20 Crunchgen has been updated to work via reach-over makefiles. Updating
21 is suggested before running a snapshot build
22
23 20010922:
24 The new toolchain is enabled on i386. This new build method
25 is intended to make all the upgrade issues elsewhere in UPDATING
26 obsolete (stay tuned...).
27
28 i386 platform builds must now set TOOLDIR in mk.conf or the
29 environment in order to build the system. This is a pathname
30 where host build tools will be installed, and must NOT be
31 the same as src/tools.
32
33 (Optionally, USETOOLS=no can be set in the environment if you
34 wish to avoid using the separate host toolchain for building a
35 subtree. Otherwise, this will default to "yes" automatically.)
36
37 20010915:
38 The new "ubcperf" code committed by Chuck Silvers removed
39 a header file, uvm/uvm_vnode.h. There may be stale .depend
40 files that still reference this file.
41
42 Solution: "make cleandir && make dependall" in affected
43 directories.
44
45 20010803:
46 grep.info is now built from grep.texi using makeinfo. Since it
47 requires makeinfo v4.0, you need to install new texinfo before
48 building gnu/usr.bin/grep. To install new texinfo, please follow
49 the instruction described in 20010726 entry.
50
51 20010803:
52 (i386 only): i386 kernel now uses new instructions like
53 `fxsave' which old gas doesn't understand. To build the
54 kernel successfuly, you need to build and install new gas
55 (gnu/usr.bin/gas.new), or (temporarily) comment out
56 "options I686_CPU" from your kernel configuration until you
57 rebuilt your userland (and got a new gas).
58
59 20010731:
60 Bootloader update on ELF platforms. DDB in kernels from before
61 this will be unable to read symbol tables provided by newer
62 bootloaders.
63
64 20010726:
65 Texinfo was updated to 4.0. To avoid failures when trying to
66 build the included texinfo files, do:
67
68 cd src/gnu/usr.bin/texinfo
69 make MKINFO=no dependall install
70
71 20010718:
72
73 Enabled correct .init/.fini processing in crt0. The way this
74 was done was to change a -I directive to cc(1), which means
75 make(1) will have a stale dependency (it will be checking the
76 timestamp on the wrong "dot_init.h").
77
78 The symptom you will see is that new programs die with SIGSEGV
79 if you have a stale dependency.
80
81 Solution: "make cleandir" in both lib/csu and libexec/ld.elf_so
82 before starting your build.
83
84 20010628:
85
86 A construct was added to uvm_page.h that uncovered a bug
87 in lint(1). If you get a warning/error about a non-portable
88 bitfield, update your lint(1) before proceeding.
89
90 20010226:
91
92 Added named user/group to system. Need to hand add this in or builds
93 will break as mtree aborts early.
94
95 To work around add by hand:
96
97 named:*:14:
98
99 to /etc/group and add:
100
101 named:*:14:14::0:0:Named pseudo-user:/var/named:/sbin/nologin
102
103 to master.passwd (use vipw for instance if doing by hand).
104
105 Now a make build should progress.
106
107 20010219:
108 get/setprogname() added. Any hostprog's that may use this will need
109 to be bootstrapped manually until the host system is current.
110
111 Known problems: sys/arch/macppc/stand/fixcoff
112 usr.sbin/config (adding -DMAKE_BOOTSTRAP to
113 CFLAGS and rebuilding should work)
114 usr.sbin/mdsetimage - Build a static copy if
115 building a snapshot before fully bootstrapped.
116
117 20010204:
118 prepare the code to compile with stricter gcc flags. in
119 particular start eliminating redundant declarations. Yacc
120 needs to be installed before make build.
121
122 20010114:
123 introduce .if commands(target) in make(1). You need to
124 bring everything up-to-date first, then without installing
125 anything make and install in usr.bin/make, then proceed
126 with make build.
127
128 20010101:
129 bsd.subdir.mk committed 20001230 had a bug which caused
130 afterinstall targets to run too soon; update again.
131
132 20001230:
133 New share/mk files needed to support .WAIT in SUBDIR variables.
134 If you get make errors,
135 (cd share/mk; make install)
136 Also, PRINTOBJDIR has changed and is now used more heavily.
137
138 20001019:
139 The `ca' device driver has been replaced by `ld'; although the
140 major and minor numbers haven't changed, you should update your /dev
141 directory.
142
143 20000929:
144 The following make directives are obsoleted.
145 MKCRYPTO_RSA NOCRYPTO_RSA NOCRYPTO_RC5 NOCRYPTO_IDEA
146 By default, RSA is built into libcrypto. IDEA and RC5 will not be
147 built into libcrypto. By using MKCRYPTO_{RC5,IDEA}, you can build
148 additional library libcrypto_{idea,rc5}.
149
150 20000623:
151 MKCRYPTO and friends added to share/mk/bsd.own.mk.
152 'cd share/mk ; make install' needed before make build.
153
154
155 Hints for a more successful build:
156 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
157 Build a new kernel first:
158 This makes sure that any new system calls or features
159 expected by the new userland will be present. This
160 helps to avoid critical errors when upgrading.
161 Use object directories:
162 This helps to keep stale object
163 files from polluting the build if a Makefile "forgets"
164 about one. It also makes it easier to clean up after
165 a build. It's also necessary if you want to use the
166 same source tree for multiple machines.
167 To use object directories:
168 a) cd /usr/src ; make cleandir
169 b) Add "OBJMACHINE=yes" to /etc/mk.conf
170 c) Add "MKOBJDIRS=yes" to /etc/mk.conf
171 d) cd /usr/src ; make build
172 Note that running "make obj" in a directory will create
173 in obj.$MACHINE directory.
174 Build to a DESTDIR:
175 This helps to keep old
176 installed files (especially libraries) from interfering
177 with the new build.
178 To build to a DESTDIR, set the DESTDIR environment
179 variable before running make build. It should be set to
180 the pathname of an initially empty directory.
181 Problems: you might need to update critical utilities
182 without using DESTDIR since nothing is executed
183 from what is installed in DESTDIR.
184 (See critical utils, below)
185 Build often:
186 This keeps critical utilities current enough to not choke
187 on any other part of the source tree that depends on up to
188 date functionality.
189
190 What to do if things don't work:
191 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
192 When things don't work there is usually a few things that commonly
193 should be done.
194 1) make includes
195 This should be done automatically by make build.
196 2) cd share/mk && make install
197 Again, automatically done by make build.
198
199 Failsafe rebuild of a small part of the tree:
200 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
201 To make sure you rebuild something correctly you want to do
202 something like the following:
203 1) Make sure the includes and .mk files are up to date.
204 2) Make sure any program used to build the particular
205 utility is up to date. (yacc, lex, etc...)
206 3) cd ...path/to/util...
207 make cleandir
208 rm ...all obj directories...
209 make cleandir # yes, again
210 make obj
211 make depend && make
212
213 Failsafe rebuild of the entire tree:
214 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
215 If you really want to make sure the source tree is clean and
216 ready for a build try the following. Note that sourcing /etc/mk.conf
217 (a make(1) Makefile) in this manner is not right, and will not work
218 for anyone who uses any make(1) features in /etc/mk.conf.
219
220 ---cut here---
221 #!/bin/sh
222 . /etc/mk.conf
223
224 if [ -z $BSDSRCDIR ] ; then
225 BSDSRCDIR=/usr/src
226 fi
227 if [ \! -d $BSDSRCDIR ] ; then
228 echo Unable to find sources
229 exit 1
230 fi
231 find $BSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \;
232
233 if [ -z $BSDOBJDIR ] ; then
234 BSDOBJDIR=/usr/obj
235 fi
236 if [ -d $BSDOBJDIR ] ; then
237 rm -rf $BSDOBJDIR
238 fi
239
240 cd $BSDSRCDIR && make cleandir
241
242 ---cut here---
243
244 Critical utilities:
245 ^^^^^^^^^^^^^^^^^^^
246 gnu/usr.bin/egcs
247 usr.bin/compile_et
248 usr.bin/make
249 usr.bin/yacc
250 usr.bin/lex
251 usr.bin/xlint
252 usr.sbin/config
253
254 Other problems and possible solutions:
255 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
256 Symptom:Unreasonable compiler errors.
257 Fix: Rebuild gnu/usr.bin/egcs
258
259 Symptom:Complaints involving a Makefile.
260 Fix: Rebuild usr.bin/make:
261 cd usr.bin/make && make && make install
262 Or, a failsafe method if that doesn't work:
263 cd usr.bin/make && cc *.c */*.c -I . -o make && mv make /usr/bin
264
265 Fix: Make sure .mk files are up to date.
266 cd share/mk && make install
267
268 Symptom:Kernel `config' fails to configure any kernel, including GENERIC.
269 Fix: Rebuild usr.sbin/config
270
271 Symptom:
272 Fix: Rebuild usr.bin/yacc
273
274 Symptom:
275 Fix: Rebuild usr.bin/lex
276
277 Symptom:
278 Fix: rm /usr/lib/libbfd.a
279
280 Symptom:Obsolete intermediate files are used during compilation
281 Fix: Try the following sequence of commands in the directory in question.
282 make cleandir; rm `make print-objdir`; make cleandir; make obj
283 (If you built the tree without "make obj" in the past, obsolete files
284 may remain. The command tries to clean everything up)
285
286 Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible pointer type
287 Fix: Rebuild and install usr.bin/menuc
288
289 Symptom:mklocale not found during build in share/locale/ctype
290 Fix: Build and install usr.bin/mklocale
291
292 Symptom:undefined reference to `__assert13'
293 Fix: Rebuild and install lib/libc
294
295 Symptom:usr.sbin/config fails to build.
296 Fix: Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile.
297
298 Symptom:undefined reference to `getprogname' or `setprogname'
299 Fix: Rebuild and install lib/libc
300
301 Symptom:lint does not understand the '-X' option
302 Fix: May need to build & install libs with NOLINT=1 before rebuilding lint
303