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