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