84 lines
3.6 KiB
Plaintext
84 lines
3.6 KiB
Plaintext
$NetBSD: README.mknative,v 1.23 2019/09/30 08:40:20 mrg Exp $
|
|
|
|
This file describes how to bootstrap the native toolchain on a new NetBSD
|
|
platform (and how to update the new toolchain files, if needed). These
|
|
files may be generated on a cross-compile host without problems.
|
|
|
|
NOTE: DO NOT RUN "mknative" BY HAND! It requires the Makefile in this
|
|
directory to set up certain environments first.
|
|
|
|
Since libc's features change over time, the config.h files can change as a
|
|
result; thus the instructions below are the same no matter whether
|
|
bootstrapping on a cross or native host. This is important: even on a
|
|
"native" host, you should bootstrap the toolchain by building from an
|
|
up-to-date source tree to a $DESTDIR using the exact same instructions.
|
|
|
|
In these notes, MACHINE is the $MACHINE of the target. These files can be
|
|
cross-generated. Though a $MACHINE_ARCH all uses the same config files, you
|
|
must pick a specific $MACHINE so that building the requisite bits below will
|
|
work.
|
|
|
|
0. Note that example paths like src/external/gpl3/gcc/lib/libgcc/arch will
|
|
really be src/external/gpl3/gcc.old/lib/libgcc/arch for the previous GCC.
|
|
|
|
1. Set MKMAINTAINERTOOLS=yes in mk.conf. (Needed so that src/tools/gettext
|
|
gets built, eliciting proper HAVE_*GETTEXT* defns in config.h files.)
|
|
|
|
2. Build and install a cross toolchain (via "build.sh -m MACHINE tools").
|
|
Note that while PR #47353 is not fixed, you can not use the -O option
|
|
to build.sh. Use -M instead. (The differences are in layout and pathname
|
|
prefixes in the object directory pointed to by each option.)
|
|
|
|
3. In src/tools/gcc, do "nbmake-MACHINE HAVE_GCC=8 bootstrap-libgcc".
|
|
|
|
This will create just enough glue in src/external/gpl3/gcc/lib/libgcc/arch
|
|
to make it possible to build, based on the toolchain built in
|
|
${.OBJDIR}/build.
|
|
Because the files generated in this step contain things like
|
|
-DCROSS_COMPILE, they are not suitable for committing. Step 8 below
|
|
will regenerate the "proper" libgcc config files.
|
|
|
|
4. At top level, do
|
|
"nbmake-MACHINE obj do-distrib-dirs MKGCC=no MKBINUTILS=no HAVE_GCC=8", and
|
|
"nbmake-MACHINE includes HAVE_GCC= MKGCC=no MKBINUTILS=no HAVE_GCC=8".
|
|
(Note: replace 8 [for GCC 8.x] with the appropriate version you are going
|
|
to mknative-for, the MKGCC=no prevents the standard makefiles from picking
|
|
up any gcc version info automatically)
|
|
|
|
5. In src/lib/csu, do
|
|
"nbmake-MACHINE dependall". and "nbmake-MACHINE install".
|
|
|
|
6. In src/external/gpl3/gcc/lib/libgcc, do
|
|
"nbmake-MACHINE obj includes dependall install".
|
|
|
|
7. In each of src/external/lgpl3/gmp/lib/libgmp,
|
|
src/external/lgpl3/mpfr/lib/libmpfr, src/external/lgpl3/mpc/lib/libmpc
|
|
do "nbmake-MACHINE obj dependall".
|
|
|
|
8. In src/lib, do
|
|
"nbmake-MACHINE dependall install MKGCC=no HAVE_GCC=8".
|
|
|
|
Optionally, all of the following may be set in the environment to reduce
|
|
the amount of code needed to build at this step. Basically, it must be
|
|
possible for static binaries to build and base system libs to exist so
|
|
that "configure" can do its job for the target--these MK* options omit
|
|
the rest for this stage of the build.
|
|
|
|
MKLINT=no
|
|
MKPROFILE=no
|
|
MKSHARE=no
|
|
MKRUMP=no
|
|
|
|
9. In src/tools/gcc, do "nbmake-MACHINE native-gcc".
|
|
|
|
This will do a full configury in ${.OBJDIR}/.native that is a "Canadian"
|
|
cross toolchain (--build reflects the host platform, but --host and
|
|
--target are the target). The result is a tree that would build a
|
|
native-to-NetBSD compiler on a cross host, and mknative pulls glue data
|
|
from this.
|
|
|
|
10. Try out a full build using "nbmake-MACHINE"; the result should include
|
|
a native compiler.
|
|
|
|
11. If all is well, commit the glue files added to src/gnu/{lib,usr.bin}/*.
|