1 1.3 itojun $NetBSD: UPDATING,v 1.3 2000/08/20 19:51:24 itojun Exp $ 2 1.1 abs 3 1.1 abs This file is intended to be a brief introduction to the build 4 1.1 abs process and a reference on what to do if something doesn't work. 5 1.1 abs 6 1.1 abs For a more detailed description see Makefile. 7 1.1 abs 8 1.1 abs Recent changes: 9 1.1 abs ^^^^^^^^^^^^^^^ 10 1.1 abs 11 1.1 abs 20000623: 12 1.1 abs MKCRYPTO and friends added to share/mk/bsd.own.mk. 13 1.1 abs 'cd share/mk ; make install' needed before make build. 14 1.1 abs 15 1.1 abs 16 1.1 abs Hints for a more successful build: 17 1.1 abs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 18 1.2 mrg Build a new kernel first: 19 1.2 mrg This makes sure that any new system calls or features 20 1.2 mrg expected by the new userland will be present. This 21 1.2 mrg helps to avoid critical errors when upgrading. 22 1.1 abs Use object directories: 23 1.1 abs This helps to keep stale object 24 1.1 abs files from polluting the build if a Makefile "forgets" 25 1.1 abs about one. It also makes it easier to clean up after 26 1.1 abs a build. It's also necessary if you want to use the 27 1.1 abs same source tree for multiple machines. 28 1.1 abs To use object directories: 29 1.1 abs a) cd /usr/src ; make cleandir 30 1.2 mrg b) Add "OBJMACHINE=yes" to /etc/mk.conf 31 1.2 mrg c) Add "MKOBJDIRS=yes" to /etc/mk.conf 32 1.1 abs d) cd /usr/src ; make build 33 1.2 mrg Note that running "make obj" in a directory will create 34 1.2 mrg in obj.$MACHINE directory. 35 1.1 abs Build to a DESTDIR: 36 1.1 abs This helps to keep old 37 1.1 abs installed files (especially libraries) from interfering 38 1.1 abs with the new build. 39 1.1 abs To build to a DESTDIR, set the DESTDIR environment 40 1.2 mrg variable before running make build. It should be set to 41 1.2 mrg the pathname of an initially empty directory. 42 1.1 abs Problems: you might need to update critical utilities 43 1.1 abs without using DESTDIR since nothing is executed 44 1.1 abs from what is installed in DESTDIR. 45 1.1 abs (See critical utils, below) 46 1.1 abs Build often: 47 1.1 abs This keeps critical utilities current enough to not choke 48 1.1 abs on any other part of the source tree that depends on up to 49 1.1 abs date functionality. 50 1.1 abs 51 1.1 abs What to do if things don't work: 52 1.1 abs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 53 1.1 abs When things don't work there is usually a few things that commonly 54 1.1 abs should be done. 55 1.1 abs 1) make includes 56 1.1 abs This should be done automatically by make build. 57 1.1 abs 2) cd share/mk && make install 58 1.1 abs Again, automatically done by make build. 59 1.1 abs 60 1.1 abs Failsafe rebuild of a small part of the tree: 61 1.1 abs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 62 1.1 abs To make sure you rebuild something correctly you want to do 63 1.1 abs something like the following: 64 1.1 abs 1) Make sure the includes and .mk files are up to date. 65 1.1 abs 2) Make sure any program used to build the particular 66 1.1 abs utility is up to date. (yacc, lex, etc...) 67 1.1 abs 3) cd ...path/to/util... 68 1.1 abs make cleandir 69 1.1 abs rm ...all obj directories... 70 1.1 abs make cleandir # yes, again 71 1.1 abs make obj 72 1.1 abs make depend && make 73 1.1 abs 74 1.1 abs Failsafe rebuild of the entire tree: 75 1.1 abs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 76 1.1 abs If you really want to make sure the source tree is clean and 77 1.2 mrg ready for a build try the following. Note that sourcing /etc/mk.conf 78 1.2 mrg (a make(1) Makefile) in this manner is not right, and will not work 79 1.2 mrg for anyone who uses any make(1) features in /etc/mk.conf. 80 1.1 abs 81 1.1 abs ---cut here--- 82 1.1 abs #!/bin/sh 83 1.1 abs . /etc/mk.conf 84 1.1 abs 85 1.1 abs if [ -z $BSDSRCDIR ] ; then 86 1.1 abs BSDSRCDIR=/usr/src 87 1.1 abs fi 88 1.1 abs if [ \! -d $BSDSRCDIR ] ; then 89 1.1 abs echo Unable to find sources 90 1.1 abs exit 1 91 1.1 abs fi 92 1.1 abs find $BSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \; 93 1.1 abs 94 1.1 abs if [ -z $BSDOBJDIR ] ; then 95 1.1 abs BSDOBJDIR=/usr/obj 96 1.1 abs fi 97 1.1 abs if [ -d $BSDOBJDIR ] ; then 98 1.1 abs rm -rf $BSDOBJDIR 99 1.1 abs fi 100 1.1 abs 101 1.1 abs cd $BSDSRCDIR && make cleandir 102 1.1 abs 103 1.1 abs ---cut here--- 104 1.1 abs 105 1.1 abs Critical utilities: 106 1.1 abs ^^^^^^^^^^^^^^^^^^^ 107 1.1 abs gnu/usr.bin/egcs 108 1.3 itojun usr.bin/compile_et 109 1.1 abs usr.bin/make 110 1.1 abs usr.bin/yacc 111 1.1 abs usr.bin/lex 112 1.2 mrg usr.sbin/config 113 1.1 abs 114 1.1 abs Other problems and possibly solutions: 115 1.1 abs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 116 1.1 abs Symptom:Unreasonable compiler errors. 117 1.1 abs Fix: Rebuild gnu/usr.bin/egcs 118 1.1 abs 119 1.1 abs Symptom:Complaints involving a Makefile. 120 1.1 abs Fix: Make sure .mk files are up to date. 121 1.1 abs cd share/mk && make install 122 1.1 abs Fix: Rebuild usr.bin/make 123 1.2 mrg 124 1.2 mrg Symptom:Kernel `config' fails to configure any kernel, including GENERIC. 125 1.2 mrg Fix: Rebuild usr.sbin/config 126 1.1 abs 127 1.1 abs Symptom: 128 1.1 abs Fix: Rebuild usr.bin/yacc 129 1.1 abs 130 1.1 abs Symptom: 131 1.1 abs Fix: Rebuild usr.bin/lex 132 1.1 abs 133 1.1 abs Symptom: 134 1.1 abs Fix: rm /usr/lib/libbfd.a 135