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