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