version 1.114.4.2, 2004/04/11 02:23:45 |
version 1.163.4.3, 2008/03/23 00:12:06 |
|
|
$NetBSD$ |
UPDATING,v 1.163.4.2 2008/01/09 01:19:18 matt Exp |
|
|
This file is intended to be a brief introduction to the build |
This file (UPDATING) is intended to be a brief reference to recent |
process and a reference on what to do if something doesn't work. |
changes that might cause problems in the build process, and a guide for |
|
what to do if something doesn't work. |
|
|
For a more detailed description see Makefile. |
For a more detailed description of the recommended way to build NetBSD |
|
using build.sh, see the BUILDING file. |
|
|
|
Note that much of the advice in this UPDATING file was written before |
|
build.sh existed. Nevertheless, the advice here may be useful for |
|
working around specific problems with build.sh. |
|
|
|
See also: BUILDING, build.sh, Makefile. |
|
|
Recent changes: |
Recent changes: |
^^^^^^^^^^^^^^^ |
^^^^^^^^^^^^^^^ |
|
|
20040410: |
20080126: |
|
The posix_fadvise system call has been changed from an assembly |
|
stub, to a c file that calls an assembly stub. You need to |
|
'rm -f posix_fadvise.* .depend' in the libc build directory to |
|
avoid using the old assembly stub. |
|
|
|
20071209: |
|
The acpiec(4) driver has been split into two attachments. If you |
|
get ACPI errors before the attachment, please update your kernel |
|
configuration file appropriately or see GENERIC for more details. |
|
|
|
20071115: |
|
The it(4) driver has been renamed to itesio(4) and the old port |
|
argument specified in the kernel configuration file is not valid |
|
anymore. The itesio(4) driver now uses the Super I/O address port |
|
rather than the EC address port. Please update your kernel |
|
configuration file appropriately or see GENERIC for more details. |
|
|
|
20071028: |
|
The pccons(4) driver has been removed from the NetBSD/shark port. |
|
You need to update any custom kernel configuration file you have |
|
to remove any references to pccons (which includes removing the |
|
now useless XSERVER option) and replace them with the correct |
|
entries for the wscons driver. See the GENERIC configuration file |
|
for more details. |
|
|
|
20070913: |
|
A latent bug in dhclient/dhcpd that caused it to be unable to |
|
enumerate interfaces was fixed. The bug began to cause |
|
problems after 20070911 when the kernel's SIOCGIFCONF |
|
implementation was repaired. From 20070529 to 20070911 racoon |
|
could not enumerate interfaces. (These are noted because |
|
normal kernel/userspace version matching hygiene is not |
|
sufficient to avoid this problem.) Ensure that both kernel |
|
and userland are from after 20070913. |
|
|
|
20070703: |
|
nbinstall has been renamed as it calls the target specific and |
|
the logic to pass down STRIP from mk been removed. This forces |
|
a re-installation of tools. |
|
|
|
20070422: |
|
The way OS emulations lookup filenames inside the emulation root |
|
has been changed. Rather than modify the pathname (and copy back |
|
to userspace) namei() and lookup() directly check the emulation |
|
root. One side effect is that absolute symlinks inside the emulated |
|
root file system will be relative to that file system - unless they |
|
start /../ this is useful when the emulated root is a real install |
|
that has such links. |
|
This might affect symlinks that have been added to reference outside |
|
the emulated root. |
|
|
|
20070412: |
|
The pckbc driver on sgimips IP32 has been removed. Use macekbc |
|
instead. See the GENERIC32_IP3x kernel configuration for an |
|
example. |
|
|
|
20070319: |
|
src/lib/libc/Makefile revision 1.129 broke libc and ld.elf_so |
|
on many platforms due to incorrect flags settings. If you |
|
updated and built after about 20070315, do "nbmake-$arch |
|
cleandir" in src/lib/libc and src/libexec/ld.elf_so to force a |
|
rebuild of object files that might have been built |
|
incorrectly, and ensure that you have at least |
|
src/lib/libc/Makefile 1.130. |
|
|
|
20070210: |
|
src/sys/sys/{sa.h,savar.h} were removed. |
|
find ${OBJDIR} \( -name .depend -o -name '*.d' \) -print \ |
|
| xargs egrep -l '/sa.h|/savar.h' | xargs rm |
|
will allow dependencies on those files to get get rebuilt |
|
|
|
20070209: |
|
The threading model was changed when the newlock2 branch |
|
was merged to NetBSD-current. If you boot with a new |
|
kernel (version 4.99.10), then you also need a new pthread |
|
library (/usr/lib/libpthread.so.0.7). If you boot with |
|
an old kernel, then you need the old pthread library |
|
(/usr/lib/libpthread.so.0.6). Provided you keep the kernel and |
|
the pthread library in sync, old threaded applications should |
|
continue to work with an old or new kernel. Note that named(8) |
|
is the only threaded application in the base system. |
|
|
|
20061214: |
|
Following the move of string_to_flags() and flags_to_string() |
|
from the bin/ls/ sources to libutil, users doing UPDATE builds |
|
will need to do a "make cleandir" in |
|
tools/mtree/, tools/makefs/, tools/binstall/, tools/pax/, |
|
bin/pax/, bin/ls/, usr.sbin/mtree/, usr.sbin/makefs/, |
|
usr.bin/xinstall/, libexec/ftpd/, rescue/, as well |
|
as the installation images in distrib/ |
|
in order to excise stale references to the old stat_flags.h header |
|
file in the ls sources -- stat_flags.h has been removed. |
|
|
|
20061108: |
|
The configure script used in the src/tools/gcc compiler has been |
|
changed to indicate that our libc has ssp support built-in and |
|
does not depend on -lssp and -lssp-nonshared. You'll need to |
|
make clean in src/tools/gcc first to rebuild the compiler. |
|
|
|
20061009: |
|
The sysctl variables net.inet{,6}.tcp{,6}.newreno are no longer |
|
available. Use net.inet{,6}.tcp{,6}.congctl.selected instead. |
|
|
|
20060814: |
|
The vt, vidcconsole, kbd, and rpckbd drivers on acorn32 have been |
|
withdrawn. Use vidcvideo and pckbd instead. See the GENERIC |
|
kernel configuration for an example. X servers from the last |
|
few years should cope. |
|
|
|
20060703: |
|
MPACPI is no more. We always configure PCI interrupts using ACPI |
|
if we have an ACPI kernel. The option MPACPI_SCANPCI has been renamed |
|
to ACPI_SCANPCI. Thanks to work from fvdl. |
|
|
|
20060627: |
|
socket(2) has changed, and its system call has been versioned. |
|
For userlands with the old version of socket(2), make sure that |
|
your kernel has 'options COMPAT_30' set, or else 'bad system call' |
|
errors will result. |
|
|
|
Hints for a more successful build: |
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
|
Use build.sh, but do not use its "expert mode": |
|
This will automatically build the tools in the |
|
correct order, and it will keep the tools and the |
|
new build products from interfering with the running |
|
system. This will allow you to ignore most of the |
|
other advice in this file. |
|
Build a new kernel first: |
|
This makes sure that any new system calls or features |
|
expected by the new userland will be present. This |
|
helps to avoid critical errors when upgrading. |
|
Use object directories: |
|
This helps to keep stale object |
|
files from polluting the build if a Makefile "forgets" |
|
about one. It also makes it easier to clean up after |
|
a build. It's also necessary if you want to use the |
|
same source tree for multiple machines. |
|
To use object directories with build.sh: |
|
a) invoke build.sh with the "-M" or "-O" options. |
|
To use object directories without using build.sh: |
|
a) cd /usr/src ; make cleandir |
|
b) Add "OBJMACHINE=yes" to /etc/mk.conf |
|
c) Add "MKOBJDIRS=yes" to /etc/mk.conf |
|
d) cd /usr/src ; make build |
|
Note that running "make obj" in a directory will create |
|
in obj.$MACHINE directory. |
|
Build to a DESTDIR: |
|
This helps to keep old installed files (especially libraries) |
|
from interfering with the new build. |
|
To build to a DESTDIR with build.sh, use the "-D" option. |
|
To build to a DESTDIR without using build.sh, set the DESTDIR |
|
environment variable before running make build. It should be |
|
set to the pathname of an initially empty directory. |
|
Problems: if you do not use build.sh, you might need to |
|
update critical utilities without using DESTDIR since |
|
nothing is executed from what is installed in DESTDIR. |
|
(See critical utils, below.) |
|
Build often: |
|
This keeps critical utilities current enough to not choke |
|
on any other part of the source tree that depends on up to |
|
date functionality. If you use build.sh, you should not have |
|
this problem. |
|
|
|
What to do if things don't work: |
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
|
When things don't work there is usually a few things that commonly |
|
should be done. |
|
1) make includes |
|
This should be done automatically by make build. |
|
2) cd share/mk && make install |
|
Again, automatically done by make build. |
|
|
|
Failsafe rebuild of a small part of the tree: |
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
|
To make sure you rebuild something correctly you want to do |
|
something like the following: |
|
1) Make sure the includes and .mk files are up to date. |
|
2) Make sure any program used to build the particular |
|
utility is up to date. (yacc, lex, etc...) |
|
3) cd ...path/to/util... |
|
make cleandir |
|
rm ...all obj directories... |
|
make cleandir # yes, again |
|
make obj |
|
make depend && make |
|
|
|
Failsafe rebuild of the entire tree: |
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
|
If you really want to make sure the source tree is clean and |
|
ready for a build try the following. Note that sourcing /etc/mk.conf |
|
(a make(1) Makefile) in this manner is not right, and will not work |
|
for anyone who uses any make(1) features in /etc/mk.conf. |
|
|
|
---cut here--- |
|
#!/bin/sh |
|
. /etc/mk.conf |
|
|
|
if [ -z $NETBSDSRCDIR ] ; then |
|
NETBSDSRCDIR=/usr/src |
|
fi |
|
if [ \! -d $NETBSDSRCDIR ] ; then |
|
echo Unable to find sources |
|
exit 1 |
|
fi |
|
find $NETBSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \; |
|
|
|
if [ -z $BSDOBJDIR ] ; then |
|
BSDOBJDIR=/usr/obj |
|
fi |
|
if [ -d $BSDOBJDIR ] ; then |
|
rm -rf $BSDOBJDIR |
|
fi |
|
|
|
cd $NETBSDSRCDIR && make cleandir |
|
|
|
---cut here--- |
|
|
|
Critical utilities: |
|
^^^^^^^^^^^^^^^^^^^ |
|
usr.bin/compile_et |
|
usr.bin/make |
|
usr.bin/yacc |
|
usr.bin/lex |
|
usr.bin/xlint |
|
usr.bin/config |
|
|
|
Other problems and possible solutions: |
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
|
Symptom:Complaints involving a Makefile. |
|
Fix: Rebuild usr.bin/make: |
|
cd usr.bin/make && make && make install |
|
Or, a failsafe method if that doesn't work: |
|
cd usr.bin/make && cc *.c */*.c -I . -o make && mv make /usr/bin |
|
|
|
Fix: Make sure .mk files are up to date. |
|
cd share/mk && make install |
|
|
|
Symptom:Kernel `config' fails to configure any kernel, including GENERIC. |
|
Fix: Rebuild usr.bin/config |
|
|
|
Symptom: |
|
Fix: Rebuild usr.bin/yacc |
|
|
|
Symptom: |
|
Fix: Rebuild usr.bin/lex |
|
|
|
Symptom: |
|
Fix: rm /usr/lib/libbfd.a |
|
|
|
Symptom:Obsolete intermediate files are used during compilation |
|
Fix: Try the following sequence of commands in the directory in question. |
|
make cleandir; rm `make print-objdir`; make cleandir; make obj |
|
(If you built the tree without "make obj" in the past, obsolete files |
|
may remain. The command tries to clean everything up) |
|
|
|
Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible pointer type |
|
Fix: Rebuild and install usr.bin/menuc |
|
|
|
Symptom:mklocale not found during build in share/locale/ctype |
|
Fix: Build and install usr.bin/mklocale |
|
|
|
Symptom:undefined reference to `__assert13' or `__unsetenv13' |
|
Fix: Rebuild and install lib/libc |
|
|
In order to build a complete release of 1.5 (post 1.5.3) the following |
Symptom:usr.bin/config fails to build. |
steps should be performed first: |
Fix: Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile. |
|
|
1. Build and install a new make (usr.bin/make) |
Symptom:undefined reference to `getprogname' or `setprogname' |
2. Build and install new copies of libcrypto and libssl |
Fix: Rebuild and install lib/libc |
(they are at new major versions so they won't conflict w. |
|
existing libraries). |
|
|
|
|
Symptom:lint does not understand the '-X' option |
|
Fix: May need to build & install libs with NOLINT=1 before rebuilding lint |