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