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