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