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