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