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