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