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