UPDATING revision 1.43
11.43Smason$NetBSD: UPDATING,v 1.43 2001/10/29 01:53:56 mason Exp $ 21.1Sabs 31.1SabsThis file is intended to be a brief introduction to the build 41.1Sabsprocess and a reference on what to do if something doesn't work. 51.1Sabs 61.1SabsFor a more detailed description see Makefile. 71.1Sabs 81.42SperryNote that users of the new toolchain in many instances will not 91.42Sperryexperience the problems listed below because their host tools are 101.42Sperryautomatically generated for them. 111.42Sperry 121.1SabsRecent changes: 131.1Sabs^^^^^^^^^^^^^^^ 141.43Smason 151.43Smason20011028: 161.43Smason /usr/src/build.sh exists as of 2001.10.19. From the cvs log: 171.43Smason 181.43Smason "Script to automate bootstrapping a build on any host platform. 191.43Smason Creates a bmake (rebuilds, if necessary) and invokes that to 201.43Smason start the build." 211.43Smason 221.43Smason This should, incidentally, allow 1.5.x hosts to build -current 231.43Smason using the new toolchain, on USE_NEW_TOOLCHAIN-enabled platforms. 241.42Sperry 251.42Sperry20011028: 261.42Sperry src/etc/Makefile now needs install to be able to handle 271.42Sperry symlinks that point to nowhere. A bug in install that 281.42Sperry prevented this was corrected. 291.42Sperry 301.42Sperry Solution: update and reinstall usr.bin/xinstall 311.42Sperry Better Solution: Use the new toolchain and it will just work 321.42Sperry for you. 331.40Slukem 341.40Slukem20011006: 351.40Slukem /etc/mtree/NetBSD.dist has been updated to take advantage of 361.40Slukem absolute path support added to mtree(8). Older mtree(8)s don't 371.40Slukem understand the format. 381.40Slukem 391.40Slukem Solution: update and reinstall usr.sbin/mtree 401.39Sjmc 411.39Sjmc20011004: 421.39Sjmc 431.39Sjmc Crunchgen has been updated to work via reach-over makefiles. Updating 441.39Sjmc is suggested before running a snapshot build 451.36Stv 461.36Stv20010922: 471.36Stv The new toolchain is enabled on i386. This new build method 481.38Stron is intended to make all the upgrade issues elsewhere in UPDATING 491.36Stv obsolete (stay tuned...). 501.36Stv 511.37Skristerw i386 platform builds must now set TOOLDIR in mk.conf or the 521.36Stv environment in order to build the system. This is a pathname 531.36Stv where host build tools will be installed, and must NOT be 541.36Stv the same as src/tools. 551.36Stv 561.36Stv (Optionally, USETOOLS=no can be set in the environment if you 571.36Stv wish to avoid using the separate host toolchain for building a 581.36Stv subtree. Otherwise, this will default to "yes" automatically.) 591.35Sthorpej 601.35Sthorpej20010915: 611.35Sthorpej The new "ubcperf" code committed by Chuck Silvers removed 621.35Sthorpej a header file, uvm/uvm_vnode.h. There may be stale .depend 631.35Sthorpej files that still reference this file. 641.35Sthorpej 651.35Sthorpej Solution: "make cleandir && make dependall" in affected 661.35Sthorpej directories. 671.31Senami 681.31Senami20010803: 691.31Senami grep.info is now built from grep.texi using makeinfo. Since it 701.31Senami requires makeinfo v4.0, you need to install new texinfo before 711.31Senami building gnu/usr.bin/grep. To install new texinfo, please follow 721.31Senami the instruction described in 20010726 entry. 731.30Senami 741.30Senami20010803: 751.41Swiz (i386 only): i386 kernel now uses new instructions like 761.41Swiz `fxsave' which old gas doesn't understand. To build the 771.41Swiz kernel successfuly, you need to build and install new gas 781.41Swiz (gnu/usr.bin/gas.new), or (temporarily) comment out 791.41Swiz "options I686_CPU" from your kernel configuration until you 801.41Swiz rebuilt your userland (and got a new gas). 811.29Sbjh21 821.29Sbjh2120010731: 831.29Sbjh21 Bootloader update on ELF platforms. DDB in kernels from before 841.29Sbjh21 this will be unable to read symbol tables provided by newer 851.29Sbjh21 bootloaders. 861.27Sassar 871.27Sassar20010726: 881.27Sassar Texinfo was updated to 4.0. To avoid failures when trying to 891.28Sassar build the included texinfo files, do: 901.28Sassar 911.28Sassar cd src/gnu/usr.bin/texinfo 921.28Sassar make MKINFO=no dependall install 931.25Sthorpej 941.25Sthorpej20010718: 951.25Sthorpej 961.25Sthorpej Enabled correct .init/.fini processing in crt0. The way this 971.25Sthorpej was done was to change a -I directive to cc(1), which means 981.25Sthorpej make(1) will have a stale dependency (it will be checking the 991.25Sthorpej timestamp on the wrong "dot_init.h"). 1001.25Sthorpej 1011.25Sthorpej The symptom you will see is that new programs die with SIGSEGV 1021.25Sthorpej if you have a stale dependency. 1031.25Sthorpej 1041.25Sthorpej Solution: "make cleandir" in both lib/csu and libexec/ld.elf_so 1051.25Sthorpej before starting your build. 1061.26Sthorpej 1071.26Sthorpej20010628: 1081.26Sthorpej 1091.26Sthorpej A construct was added to uvm_page.h that uncovered a bug 1101.26Sthorpej in lint(1). If you get a warning/error about a non-portable 1111.26Sthorpej bitfield, update your lint(1) before proceeding. 1121.21Sjmc 1131.21Sjmc20010226: 1141.21Sjmc 1151.22Sjmc Added named user/group to system. Need to hand add this in or builds 1161.21Sjmc will break as mtree aborts early. 1171.21Sjmc 1181.21Sjmc To work around add by hand: 1191.21Sjmc 1201.21Sjmc named:*:14: 1211.21Sjmc 1221.22Sjmc to /etc/group and add: 1231.22Sjmc 1241.22Sjmc named:*:14:14::0:0:Named pseudo-user:/var/named:/sbin/nologin 1251.22Sjmc 1261.22Sjmc to master.passwd (use vipw for instance if doing by hand). 1271.22Sjmc 1281.22Sjmc Now a make build should progress. 1291.18Sjmc 1301.18Sjmc20010219: 1311.18Sjmc get/setprogname() added. Any hostprog's that may use this will need 1321.20Sjmc to be bootstrapped manually until the host system is current. 1331.18Sjmc 1341.18Sjmc Known problems: sys/arch/macppc/stand/fixcoff 1351.19Scgd usr.sbin/config (adding -DMAKE_BOOTSTRAP to 1361.19Scgd CFLAGS and rebuilding should work) 1371.20Sjmc usr.sbin/mdsetimage - Build a static copy if 1381.20Sjmc building a snapshot before fully bootstrapped. 1391.15Schristos 1401.15Schristos20010204: 1411.15Schristos prepare the code to compile with stricter gcc flags. in 1421.15Schristos particular start eliminating redundant declarations. Yacc 1431.15Schristos needs to be installed before make build. 1441.10Schristos 1451.10Schristos20010114: 1461.10Schristos introduce .if commands(target) in make(1). You need to 1471.10Schristos bring everything up-to-date first, then without installing 1481.23Stron anything make and install in usr.bin/make, then proceed 1491.10Schristos with make build. 1501.9Ssommerfe 1511.9Ssommerfe20010101: 1521.9Ssommerfe bsd.subdir.mk committed 20001230 had a bug which caused 1531.9Ssommerfe afterinstall targets to run too soon; update again. 1541.8Ssommerfe 1551.8Ssommerfe20001230: 1561.8Ssommerfe New share/mk files needed to support .WAIT in SUBDIR variables. 1571.8Ssommerfe If you get make errors, 1581.8Ssommerfe (cd share/mk; make install) 1591.8Ssommerfe Also, PRINTOBJDIR has changed and is now used more heavily. 1601.6Sad 1611.6Sad20001019: 1621.7Sad The `ca' device driver has been replaced by `ld'; although the 1631.6Sad major and minor numbers haven't changed, you should update your /dev 1641.6Sad directory. 1651.1Sabs 1661.4Sitojun20000929: 1671.4Sitojun The following make directives are obsoleted. 1681.4Sitojun MKCRYPTO_RSA NOCRYPTO_RSA NOCRYPTO_RC5 NOCRYPTO_IDEA 1691.4Sitojun By default, RSA is built into libcrypto. IDEA and RC5 will not be 1701.16Swiz built into libcrypto. By using MKCRYPTO_{RC5,IDEA}, you can build 1711.4Sitojun additional library libcrypto_{idea,rc5}. 1721.4Sitojun 1731.1Sabs20000623: 1741.1Sabs MKCRYPTO and friends added to share/mk/bsd.own.mk. 1751.1Sabs 'cd share/mk ; make install' needed before make build. 1761.1Sabs 1771.1Sabs 1781.1SabsHints for a more successful build: 1791.1Sabs^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1801.2Smrg Build a new kernel first: 1811.2Smrg This makes sure that any new system calls or features 1821.2Smrg expected by the new userland will be present. This 1831.2Smrg helps to avoid critical errors when upgrading. 1841.1Sabs Use object directories: 1851.1Sabs This helps to keep stale object 1861.1Sabs files from polluting the build if a Makefile "forgets" 1871.1Sabs about one. It also makes it easier to clean up after 1881.1Sabs a build. It's also necessary if you want to use the 1891.1Sabs same source tree for multiple machines. 1901.1Sabs To use object directories: 1911.1Sabs a) cd /usr/src ; make cleandir 1921.2Smrg b) Add "OBJMACHINE=yes" to /etc/mk.conf 1931.2Smrg c) Add "MKOBJDIRS=yes" to /etc/mk.conf 1941.1Sabs d) cd /usr/src ; make build 1951.2Smrg Note that running "make obj" in a directory will create 1961.2Smrg in obj.$MACHINE directory. 1971.1Sabs Build to a DESTDIR: 1981.1Sabs This helps to keep old 1991.1Sabs installed files (especially libraries) from interfering 2001.1Sabs with the new build. 2011.1Sabs To build to a DESTDIR, set the DESTDIR environment 2021.2Smrg variable before running make build. It should be set to 2031.2Smrg the pathname of an initially empty directory. 2041.1Sabs Problems: you might need to update critical utilities 2051.1Sabs without using DESTDIR since nothing is executed 2061.1Sabs from what is installed in DESTDIR. 2071.1Sabs (See critical utils, below) 2081.1Sabs Build often: 2091.1Sabs This keeps critical utilities current enough to not choke 2101.1Sabs on any other part of the source tree that depends on up to 2111.1Sabs date functionality. 2121.1Sabs 2131.1SabsWhat to do if things don't work: 2141.1Sabs^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2151.1SabsWhen things don't work there is usually a few things that commonly 2161.1Sabsshould be done. 2171.1Sabs 1) make includes 2181.1Sabs This should be done automatically by make build. 2191.1Sabs 2) cd share/mk && make install 2201.1Sabs Again, automatically done by make build. 2211.1Sabs 2221.1SabsFailsafe rebuild of a small part of the tree: 2231.1Sabs^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2241.1SabsTo make sure you rebuild something correctly you want to do 2251.1Sabssomething like the following: 2261.1Sabs 1) Make sure the includes and .mk files are up to date. 2271.1Sabs 2) Make sure any program used to build the particular 2281.1Sabs utility is up to date. (yacc, lex, etc...) 2291.1Sabs 3) cd ...path/to/util... 2301.1Sabs make cleandir 2311.1Sabs rm ...all obj directories... 2321.1Sabs make cleandir # yes, again 2331.1Sabs make obj 2341.1Sabs make depend && make 2351.1Sabs 2361.1SabsFailsafe rebuild of the entire tree: 2371.1Sabs^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2381.1SabsIf you really want to make sure the source tree is clean and 2391.2Smrgready for a build try the following. Note that sourcing /etc/mk.conf 2401.2Smrg(a make(1) Makefile) in this manner is not right, and will not work 2411.2Smrgfor anyone who uses any make(1) features in /etc/mk.conf. 2421.1Sabs 2431.1Sabs---cut here--- 2441.1Sabs#!/bin/sh 2451.1Sabs. /etc/mk.conf 2461.1Sabs 2471.1Sabsif [ -z $BSDSRCDIR ] ; then 2481.1Sabs BSDSRCDIR=/usr/src 2491.1Sabsfi 2501.1Sabsif [ \! -d $BSDSRCDIR ] ; then 2511.1Sabs echo Unable to find sources 2521.1Sabs exit 1 2531.1Sabsfi 2541.1Sabsfind $BSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \; 2551.1Sabs 2561.1Sabsif [ -z $BSDOBJDIR ] ; then 2571.1Sabs BSDOBJDIR=/usr/obj 2581.1Sabsfi 2591.1Sabsif [ -d $BSDOBJDIR ] ; then 2601.1Sabs rm -rf $BSDOBJDIR 2611.1Sabsfi 2621.1Sabs 2631.1Sabscd $BSDSRCDIR && make cleandir 2641.1Sabs 2651.1Sabs---cut here--- 2661.1Sabs 2671.1SabsCritical utilities: 2681.1Sabs^^^^^^^^^^^^^^^^^^^ 2691.1Sabs gnu/usr.bin/egcs 2701.3Sitojun usr.bin/compile_et 2711.1Sabs usr.bin/make 2721.1Sabs usr.bin/yacc 2731.1Sabs usr.bin/lex 2741.11Slukem usr.bin/xlint 2751.2Smrg usr.sbin/config 2761.1Sabs 2771.34SsimonbOther problems and possible solutions: 2781.1Sabs^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2791.1SabsSymptom:Unreasonable compiler errors. 2801.1SabsFix: Rebuild gnu/usr.bin/egcs 2811.1Sabs 2821.1SabsSymptom:Complaints involving a Makefile. 2831.17SerhFix: Rebuild usr.bin/make: 2841.17Serh cd usr.bin/make && make && make install 2851.17Serh Or, a failsafe method if that doesn't work: 2861.17Serh cd usr.bin/make && cc *.c */*.c -I . -o make && mv make /usr/bin 2871.17Serh 2881.1SabsFix: Make sure .mk files are up to date. 2891.1Sabs cd share/mk && make install 2901.2Smrg 2911.2SmrgSymptom:Kernel `config' fails to configure any kernel, including GENERIC. 2921.2SmrgFix: Rebuild usr.sbin/config 2931.1Sabs 2941.1SabsSymptom: 2951.1SabsFix: Rebuild usr.bin/yacc 2961.1Sabs 2971.1SabsSymptom: 2981.1SabsFix: Rebuild usr.bin/lex 2991.1Sabs 3001.1SabsSymptom: 3011.1SabsFix: rm /usr/lib/libbfd.a 3021.4Sitojun 3031.4SitojunSymptom:Obsolete intermediate files are used during compilation 3041.4SitojunFix: Try the following sequence of commands in the directory in question. 3051.4Sitojun make cleandir; rm `make print-objdir`; make cleandir; make obj 3061.4Sitojun (If you built the tree without "make obj" in the past, obsolete files 3071.4Sitojun may remain. The command tries to clean everything up) 3081.5Swiz 3091.5SwizSymptom:.../sysinst/run.c:xx: warning: initialization from incompatible pointer type 3101.5SwizFix: Rebuild and install usr.bin/menuc 3111.12Sitojun 3121.12SitojunSymptom:mklocale not found during build in share/locale/ctype 3131.12SitojunFix: Build and install usr.bin/mklocale 3141.13Sdogcow 3151.13SdogcowSymptom:undefined reference to `__assert13' 3161.13SdogcowFix: Rebuild and install lib/libc 3171.13Sdogcow 3181.19ScgdSymptom:usr.sbin/config fails to build. 3191.19ScgdFix: Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile. 3201.13Sdogcow 3211.19ScgdSymptom:undefined reference to `getprogname' or `setprogname' 3221.19ScgdFix: Rebuild and install lib/libc 3231.24Sabs 3241.24SabsSymptom:lint does not understand the '-X' option 3251.24SabsFix: May need to build & install libs with NOLINT=1 before rebuilding lint 326