UPDATING revision 1.70 1 $NetBSD: UPDATING,v 1.70 2002/10/09 20:27:59 thorpej 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 20021009:
12 A new attribute dependency syntax was introduced to config(8),
13 which is now used by the SCSI configuration description. Users
14 must update and reinstall usr.sbin/config before bullding a new
15 kernel.
16
17 20021003:
18 Several changes have been made to the autoconfiguration
19 framework. Users must update and reinstall usr.sbin/config
20 before building a new kernel.
21
22 20020922:
23 MKDYNAMICROOT=yes enabled by default, which means that
24 certain shared libraries are installed into /lib, the shared
25 linker is installed into /libexec, and all programs in /bin
26 and /sbin are dynamically linked.
27 If you do not use "make build", you should ensure that
28 you have the libraries and shared linker in the new locations,
29 with:
30 make do-lib-csu do-lib-libc do-lib do-gnu-lib do-ld.elf_so
31
32 20020917:
33 USE_NEW_TOOLCHAIN has been replaced with:
34 - TOOLCHAIN_MISSING -- set to "yes" on platforms for which
35 there is no working in-tree toolchain (hppa, ns32k, sh5,
36 x86_64).
37 - EXTERNAL_TOOLCHAIN -- if defined by the user, points to the
38 root ofan external toolchain (e.g. /usr/local/gnu). This
39 enables the cross-build framework even for TOOLCHAIN_MISSING
40 platforms.
41
42 20020906:
43 gehenna-devsw has been merged into the trunk. Need to update and
44 reinstall usr.sbin/config before build the kernel.
45
46 20020822:
47 Crunched rescue tools (contents of /bin and /sbin, plus others)
48 are now provided in /rescue.
49
50 To ensure that these are built statically linked (no matter
51 what the setting of LDSTATIC is), use a crunchgen(1) built
52 from sources newer than 20020820 (see the next entry).
53
54 20020820:
55 crunchgen(1) changed to ensure that the generated program
56 is statically linked.
57
58 Solution: update and reinstall usr.bin/crunch
59
60 20020515:
61 sshd user/group has been added. Need to hand add this in, or sshd
62 will not let you log in (with default, or UsePrivlegeSeparation=yes)
63
64 Add the following into /etc/group:
65
66 sshd:*:16:
67
68 and the following to /etc/master.passwd (via vipw):
69
70 sshd:*:16:16::0:0:& pseudo-user:/var/chroot/sshd:/sbin/nologin
71
72 also /var/chroot/sshd directory needs to be present (digged as a part of
73 build process).
74
75 20020426:
76 NBUILDJOBS obsoleted in favor of just using -j.
77
78 20020426:
79 etc/postinstall added, which performs various checks for
80 configuration file updates and changes, and can fix most of
81 the problems identified.
82 This should make it much easier to upgrade a system's
83 configuration from earlier systems (as far back as NetBSD 1.5).
84
85 20020320:
86 <bsd.lib.mk> needs a new install(1) for it's "-a cmd" support.
87 build and install at usr.bin/xinstall before the build.
88
89 20020319:
90 raw IPv6 socket now makes strict checking for sa_family and sa_len
91 on send(2) operation. be sure to have sbin/rtsol and usr.sbin/rtsold
92 newer than November 2001 when you upgrade the kernel.
93
94 20020311:
95 ssh configuration files were moved from /etc to /etc/ssh. Beware
96 if you restart your machine from remote. Note that sshd.conf needs
97 to be changed (due to the use of "/etc" inside).
98
99 20020223:
100 Users of the VAX port will need to rebuild and install gas
101 so it deal with the now present register prefix used in all
102 the VAX assembly files.
103
104 20020118:
105
106 ntpd user/group has been added. Need to hand add this in or builds
107 will break as mtree aborts early.
108
109 Add the following into /etc/group:
110
111 ntpd:*:15:
112
113 and the following to /etc/master.passwd (via vipw):
114
115 ntpd:*:15:15::0:0:Ntpd pseudo-user:/var/chroot/ntpd:/sbin/nologin
116
117 20011207:
118
119 If you're attempting to build a snapshot on sparc64 and are getting
120 reloc errors from the toolchain groff binary this means your native
121 toolchain has some broken C++ bits.
122
123 To fix:
124
125 Build a new toolchain (i.e. build.sh -t)
126 Use the new toolchain to build and install natively (i.e. /usr/lib)
127
128 gnu/lib/libgcc
129 gnu/lib/libstdc++
130
131 After this a snapshot will be able to be built.
132
133 20011201:
134 In order for a sparc64 build to work you must have a working awk. If
135 you've built and installed a system with the new toolchain up to this
136 point you do not have a working awk as its ability to do floating
137 point is broken.
138
139 To build:
140
141 remake and install gnu/lib/libgcc
142 remake and install gnu/usr.bin/gawk into /usr/bin (make sure it links
143 against the new libgcc.a)
144
145 20011128:
146 Kernel config information was changed to use defflag in
147 the various "files" files. Bug fixes to config(8) are
148 required in order for this to work properly. Make sure
149 to build and install in usr.sbin/config before attempting
150 to build a new kernel.
151
152 20011030:
153 libc/locale/wcstod.c now needs new lint(1). Update lint(1)
154 before building libc.
155
156 20011029:
157 The new document BUILDING.mdoc (view with nroff | more, or
158 see pre-generated .txt and .html versions) describes the build
159 procedure in great detail. BUILDING, and the USE_NEW_TOOLCHAIN
160 build process, are intended in the long run to replace this
161 manual update log.
162
163 Users building a USE_NEW_TOOLCHAIN system should read the
164 BUILDING document for caveats. Generally, BUILDING supersedes
165 UPDATING for these systems, as tool updating is taken care of
166 by the new build system.
167
168 20011028:
169 src/etc/Makefile now needs install to be able to handle
170 symlinks that point to nowhere. A bug in install that
171 prevented this was corrected.
172
173 Solution: update and reinstall usr.bin/xinstall
174 Better Solution: Use the new toolchain and it will just work
175 for you.
176
177 20011006:
178 /etc/mtree/NetBSD.dist has been updated to take advantage of
179 absolute path support added to mtree(8). Older mtree(8)s don't
180 understand the format.
181
182 Solution: update and reinstall usr.sbin/mtree
183
184 20011004:
185 Crunchgen has been updated to work via reach-over makefiles. Updating
186 is suggested before running a snapshot build
187
188 20010915:
189 The new "ubcperf" code committed by Chuck Silvers removed
190 a header file, uvm/uvm_vnode.h. There may be stale .depend
191 files that still reference this file.
192
193 Solution: "make cleandir && make dependall" in affected
194 directories.
195
196 20010803:
197 grep.info is now built from grep.texi using makeinfo. Since it
198 requires makeinfo v4.0, you need to install new texinfo before
199 building gnu/usr.bin/grep. To install new texinfo, please follow
200 the instruction described in 20010726 entry.
201
202 20010803:
203 (i386 only): i386 kernel now uses new instructions like
204 `fxsave' which old gas doesn't understand. To build the
205 kernel successfully, you need to build and install a new toolchain,
206 (i.e., build.sh -t) or (temporarily) comment out "options I686_CPU"
207 from your kernel configuration until you rebuild your userland.
208 See 20011029 above and BUILDING file in this directory for more information.
209 [updated 20020630 since i386 gas moved when USE_NEW_TOOLCHAIN enabled]
210
211 20010731:
212 Bootloader update on ELF platforms. DDB in kernels from before
213 this will be unable to read symbol tables provided by newer
214 bootloaders.
215
216 20010726:
217 Texinfo was updated to 4.0. To avoid failures when trying to
218 build the included texinfo files, do:
219
220 cd src/gnu/usr.bin/texinfo
221 make MKINFO=no dependall install
222
223 20010718:
224 Enabled correct .init/.fini processing in crt0. The way this
225 was done was to change a -I directive to cc(1), which means
226 make(1) will have a stale dependency (it will be checking the
227 timestamp on the wrong "dot_init.h").
228
229 The symptom you will see is that new programs die with SIGSEGV
230 if you have a stale dependency.
231
232 Solution: "make cleandir" in both lib/csu and libexec/ld.elf_so
233 before starting your build.
234
235 20010628:
236 A construct was added to uvm_page.h that uncovered a bug
237 in lint(1). If you get a warning/error about a non-portable
238 bitfield, update your lint(1) before proceeding.
239
240 20010226:
241 Added named user/group to system. Need to hand add this in or builds
242 will break as mtree aborts early.
243
244 To work around add by hand:
245
246 named:*:14:
247
248 to /etc/group and add:
249
250 named:*:14:14::0:0:Named pseudo-user:/var/named:/sbin/nologin
251
252 to master.passwd (use vipw for instance if doing by hand).
253
254 Now a make build should progress.
255
256 20010219:
257 get/setprogname() added. Any hostprogs that may use this will need
258 to be bootstrapped manually until the host system is current.
259
260 Known problems: sys/arch/macppc/stand/fixcoff
261 usr.sbin/config (adding -DMAKE_BOOTSTRAP to
262 CFLAGS and rebuilding should work)
263 usr.sbin/mdsetimage - Build a static copy if
264 building a snapshot before fully bootstrapped.
265
266 20010204:
267 prepare the code to compile with stricter gcc flags. in
268 particular start eliminating redundant declarations. Yacc
269 needs to be installed before make build.
270
271 20010114:
272 introduce .if commands(target) in make(1). You need to
273 bring everything up-to-date first, then without installing
274 anything make and install in usr.bin/make, then proceed
275 with make build.
276
277 20010101:
278 bsd.subdir.mk committed 20001230 had a bug which caused
279 afterinstall targets to run too soon; update again.
280
281 20001230:
282 New share/mk files needed to support .WAIT in SUBDIR variables.
283 If you get make errors,
284 (cd share/mk; make install)
285 Also, PRINTOBJDIR has changed and is now used more heavily.
286
287 20001019:
288 The `ca' device driver has been replaced by `ld'; although the
289 major and minor numbers haven't changed, you should update your /dev
290 directory.
291
292 20000929:
293 The following make directives are obsoleted.
294 MKCRYPTO_RSA NOCRYPTO_RSA NOCRYPTO_RC5 NOCRYPTO_IDEA
295 By default, RSA is built into libcrypto. IDEA and RC5 will not be
296 built into libcrypto. By using MKCRYPTO_{RC5,IDEA}, you can build
297 additional library libcrypto_{idea,rc5}.
298
299
300 Hints for a more successful build:
301 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
302 Build a new kernel first:
303 This makes sure that any new system calls or features
304 expected by the new userland will be present. This
305 helps to avoid critical errors when upgrading.
306 Use object directories:
307 This helps to keep stale object
308 files from polluting the build if a Makefile "forgets"
309 about one. It also makes it easier to clean up after
310 a build. It's also necessary if you want to use the
311 same source tree for multiple machines.
312 To use object directories:
313 a) cd /usr/src ; make cleandir
314 b) Add "OBJMACHINE=yes" to /etc/mk.conf
315 c) Add "MKOBJDIRS=yes" to /etc/mk.conf
316 d) cd /usr/src ; make build
317 Note that running "make obj" in a directory will create
318 in obj.$MACHINE directory.
319 Build to a DESTDIR:
320 This helps to keep old
321 installed files (especially libraries) from interfering
322 with the new build.
323 To build to a DESTDIR, set the DESTDIR environment
324 variable before running make build. It should be set to
325 the pathname of an initially empty directory.
326 Problems: you might need to update critical utilities
327 without using DESTDIR since nothing is executed
328 from what is installed in DESTDIR.
329 (See critical utils, below)
330 Build often:
331 This keeps critical utilities current enough to not choke
332 on any other part of the source tree that depends on up to
333 date functionality.
334
335 What to do if things don't work:
336 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
337 When things don't work there is usually a few things that commonly
338 should be done.
339 1) make includes
340 This should be done automatically by make build.
341 2) cd share/mk && make install
342 Again, automatically done by make build.
343
344 Failsafe rebuild of a small part of the tree:
345 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
346 To make sure you rebuild something correctly you want to do
347 something like the following:
348 1) Make sure the includes and .mk files are up to date.
349 2) Make sure any program used to build the particular
350 utility is up to date. (yacc, lex, etc...)
351 3) cd ...path/to/util...
352 make cleandir
353 rm ...all obj directories...
354 make cleandir # yes, again
355 make obj
356 make depend && make
357
358 Failsafe rebuild of the entire tree:
359 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
360 If you really want to make sure the source tree is clean and
361 ready for a build try the following. Note that sourcing /etc/mk.conf
362 (a make(1) Makefile) in this manner is not right, and will not work
363 for anyone who uses any make(1) features in /etc/mk.conf.
364
365 ---cut here---
366 #!/bin/sh
367 . /etc/mk.conf
368
369 if [ -z $NETBSDSRCDIR ] ; then
370 NETBSDSRCDIR=/usr/src
371 fi
372 if [ \! -d $NETBSDSRCDIR ] ; then
373 echo Unable to find sources
374 exit 1
375 fi
376 find $NETBSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \;
377
378 if [ -z $BSDOBJDIR ] ; then
379 BSDOBJDIR=/usr/obj
380 fi
381 if [ -d $BSDOBJDIR ] ; then
382 rm -rf $BSDOBJDIR
383 fi
384
385 cd $NETBSDSRCDIR && make cleandir
386
387 ---cut here---
388
389 Critical utilities:
390 ^^^^^^^^^^^^^^^^^^^
391 gnu/usr.bin/egcs
392 usr.bin/compile_et
393 usr.bin/make
394 usr.bin/yacc
395 usr.bin/lex
396 usr.bin/xlint
397 usr.sbin/config
398
399 Other problems and possible solutions:
400 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
401 Symptom:Unreasonable compiler errors.
402 Fix: Rebuild gnu/usr.bin/egcs
403
404 Symptom:Complaints involving a Makefile.
405 Fix: Rebuild usr.bin/make:
406 cd usr.bin/make && make && make install
407 Or, a failsafe method if that doesn't work:
408 cd usr.bin/make && cc *.c */*.c -I . -o make && mv make /usr/bin
409
410 Fix: Make sure .mk files are up to date.
411 cd share/mk && make install
412
413 Symptom:Kernel `config' fails to configure any kernel, including GENERIC.
414 Fix: Rebuild usr.sbin/config
415
416 Symptom:
417 Fix: Rebuild usr.bin/yacc
418
419 Symptom:
420 Fix: Rebuild usr.bin/lex
421
422 Symptom:
423 Fix: rm /usr/lib/libbfd.a
424
425 Symptom:Obsolete intermediate files are used during compilation
426 Fix: Try the following sequence of commands in the directory in question.
427 make cleandir; rm `make print-objdir`; make cleandir; make obj
428 (If you built the tree without "make obj" in the past, obsolete files
429 may remain. The command tries to clean everything up)
430
431 Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible pointer type
432 Fix: Rebuild and install usr.bin/menuc
433
434 Symptom:mklocale not found during build in share/locale/ctype
435 Fix: Build and install usr.bin/mklocale
436
437 Symptom:undefined reference to `__assert13'
438 Fix: Rebuild and install lib/libc
439
440 Symptom:usr.sbin/config fails to build.
441 Fix: Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile.
442
443 Symptom:undefined reference to `getprogname' or `setprogname'
444 Fix: Rebuild and install lib/libc
445
446 Symptom:lint does not understand the '-X' option
447 Fix: May need to build & install libs with NOLINT=1 before rebuilding lint
448