mirror of
https://git.linuxfromscratch.org/lfs.git
synced 2025-06-19 03:39:20 +01:00
Remove unneeded files in chapter 7
git-svn-id: http://svn.linuxfromscratch.org/LFS/branches/cross2@11902 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689
This commit is contained in:
parent
22422a8a13
commit
f309ac1058
@ -1,96 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-bash" role="wrap">
|
|
||||||
<?dbhtml filename="bash.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>bash</productname>
|
|
||||||
<productnumber>&bash-version;</productnumber>
|
|
||||||
<address>&bash-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Bash-&bash-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-bash">
|
|
||||||
<primary sortas="a-Bash">Bash</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/bash.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&bash-ch5-sbu;</seg>
|
|
||||||
<seg>&bash-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Bash</title>
|
|
||||||
|
|
||||||
<para>Prepare Bash for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">./configure --prefix=/usr \
|
|
||||||
--build=$(support/config.guess) \
|
|
||||||
--host=$LFS_TGT \
|
|
||||||
--without-bash-malloc</userinput></screen>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<title>The meaning of the configure options:</title>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--without-bash-malloc</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This option turns off the use of Bash's memory allocation
|
|
||||||
(<function>malloc</function>) function which is known to cause
|
|
||||||
segmentation faults. By turning this option off, Bash will use
|
|
||||||
the <function>malloc</function> functions from Glibc which are
|
|
||||||
more stable.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
<para>Move the excutable to where it is expected to be:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">mv $LFS/usr/bin/bash $LFS/bin/bash</userinput></screen>
|
|
||||||
|
|
||||||
<para>Make a link for the programs that use <command>sh</command> for
|
|
||||||
a shell:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">ln -sv bash $LFS/bin/sh</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-bash" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,156 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-binutils-pass1" role="wrap">
|
|
||||||
<?dbhtml filename="binutils-pass1.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>binutils-pass1</productname>
|
|
||||||
<productnumber>&binutils-version;</productnumber>
|
|
||||||
<address>&binutils-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Binutils-&binutils-version; - Pass 1</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-binutils-pass1">
|
|
||||||
<primary sortas="a-Binutils">Binutils</primary>
|
|
||||||
<secondary>tools, pass 1</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/binutils.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&binutils-ch5p1-sbu;</seg>
|
|
||||||
<seg>&binutils-ch5p1-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Cross Binutils</title>
|
|
||||||
|
|
||||||
<note><para>Go back and re-read the notes in the previous section.
|
|
||||||
Understanding the notes labeled important will save you a lot
|
|
||||||
of problems later.</para></note>
|
|
||||||
|
|
||||||
<para>It is important that Binutils be the first package compiled
|
|
||||||
because both Glibc and GCC perform various tests on the available
|
|
||||||
linker and assembler to determine which of their own features to
|
|
||||||
enable.</para>
|
|
||||||
|
|
||||||
<para>The Binutils documentation recommends building Binutils
|
|
||||||
in a dedicated build directory:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">mkdir -v build
|
|
||||||
cd build</userinput></screen>
|
|
||||||
|
|
||||||
<note>
|
|
||||||
<para>In order for the SBU values listed in the rest of the book
|
|
||||||
to be of any use, measure the time it takes to build this package from
|
|
||||||
the configuration, up to and including the first install. To achieve
|
|
||||||
this easily, wrap the commands in a <command>time</command>
|
|
||||||
command like this: <userinput>time { ./configure ... && ...
|
|
||||||
&& make install; }</userinput>.</para>
|
|
||||||
</note>
|
|
||||||
<!--
|
|
||||||
<note><para>The approximate build SBU values and required disk space
|
|
||||||
in Chapter 5 does not include test suite data.</para></note>
|
|
||||||
-->
|
|
||||||
<para>Now prepare Binutils for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">../configure --prefix=$LFS/tools \
|
|
||||||
--with-sysroot=$LFS \
|
|
||||||
--target=$LFS_TGT \
|
|
||||||
--disable-nls \
|
|
||||||
--disable-werror</userinput></screen>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<title>The meaning of the configure options:</title>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--prefix=$LFS/tools</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This tells the configure script to prepare to install the
|
|
||||||
Binutils programs in the <filename
|
|
||||||
class="directory">$LFS/tools</filename> directory.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--with-sysroot=$LFS</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>For cross compilation, this tells the build system to look in
|
|
||||||
$LFS for the target system libraries as needed.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<!--
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>- -with-lib-path=/tools/lib</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This specifies which library path the linker should be
|
|
||||||
configured to use.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
-->
|
|
||||||
<varlistentry>
|
|
||||||
<term><envar>--target=$LFS_TGT</envar></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Because the machine description in the <envar>LFS_TGT</envar>
|
|
||||||
variable is slightly different than the value returned by the
|
|
||||||
<command>config.guess</command> script, this switch will tell the
|
|
||||||
<command>configure</command> script to adjust Binutil's build system
|
|
||||||
for building a cross linker. </para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--disable-nls</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This disables internationalization as i18n is not needed for the
|
|
||||||
temporary tools.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--disable-werror</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This prevents the build from stopping in the event that there
|
|
||||||
are warnings from the host's compiler.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
<para>Continue with compiling the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make install</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-binutils" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,94 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-binutils-pass2" role="wrap">
|
|
||||||
<?dbhtml filename="binutils-pass2.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>binutils-pass2</productname>
|
|
||||||
<productnumber>&binutils-version;</productnumber>
|
|
||||||
<address>&binutils-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Binutils-&binutils-version; - Pass 2</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-binutils-pass2">
|
|
||||||
<primary sortas="a-Binutils">Binutils</primary>
|
|
||||||
<secondary>tools, pass 2</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/binutils.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&binutils-ch5p2-sbu;</seg>
|
|
||||||
<seg>&binutils-ch5p2-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Binutils</title>
|
|
||||||
|
|
||||||
<para>Create a separate build directory again:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">mkdir -v build
|
|
||||||
cd build</userinput></screen>
|
|
||||||
|
|
||||||
<para>Prepare Binutils for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">../configure \
|
|
||||||
--prefix=/usr \
|
|
||||||
--build=$(../config.guess) \
|
|
||||||
--host=$LFS_TGT \
|
|
||||||
--disable-nls \
|
|
||||||
--enable-shared \
|
|
||||||
--disable-werror</userinput></screen>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<title>The meaning of the new configure options:</title>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--host=$LFS_TGT</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This tells the configure script that we want to build
|
|
||||||
this pass of binutils for the $LFS_TGT machine, using our just
|
|
||||||
built cross-compiler. This prevents the linker from searching
|
|
||||||
through library directories on the host.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-binutils" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,112 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-bzip2" role="wrap">
|
|
||||||
<?dbhtml filename="bzip2.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>bzip2</productname>
|
|
||||||
<productnumber>&bzip2-version;</productnumber>
|
|
||||||
<address>&bzip2-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Bzip2-&bzip2-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-bzip2">
|
|
||||||
<primary sortas="a-Bzip2">Bzip2</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/bzip2.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&bzip2-ch5-sbu;</seg>
|
|
||||||
<seg>&bzip2-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Bzip2</title>
|
|
||||||
|
|
||||||
<para>Apply a patch that will install the documentation for this
|
|
||||||
package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">patch -Np1 -i ../&bzip2-docs-patch;</userinput></screen>
|
|
||||||
|
|
||||||
<para>The following command ensures installation of symbolic links are
|
|
||||||
relative:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile</userinput></screen>
|
|
||||||
|
|
||||||
<para>Ensure the man pages are installed into the correct location:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile</userinput></screen>
|
|
||||||
|
|
||||||
<para>The Bzip2 package does not contain a <command>configure</command>
|
|
||||||
script. There are two <filename>Makefile</filename>, one for the shared
|
|
||||||
library, and the other for the static library. Since we need both, We
|
|
||||||
do the compilation in two stages. First the shared library:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make CC=$LFS_TGT-gcc -f Makefile-libbz2_so
|
|
||||||
make clean</userinput></screen>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<title>The meaning of the make parameter:</title>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>-f Makefile-libbz2_so</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This will cause Bzip2 to be built using a different
|
|
||||||
<filename>Makefile</filename> file, in this case the
|
|
||||||
<filename>Makefile-libbz2_so</filename> file, which creates a dynamic
|
|
||||||
<filename class="libraryfile">libbz2.so</filename> library and links
|
|
||||||
the Bzip2 utilities against it.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
<para>Compile and test the package with:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make CC=$LFS_TGT-gcc AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make PREFIX=$LFS/usr install</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the shared <command>bzip2</command> binary into the
|
|
||||||
<filename class="directory">/bin</filename> directory, make some necessary
|
|
||||||
symbolic links, and clean up:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">cp -v bzip2-shared $LFS/bin/bzip2
|
|
||||||
cp -av libbz2.so* $LFS/lib
|
|
||||||
ln -sv ../../lib/libbz2.so.1.0 $LFS/usr/lib/libbz2.so
|
|
||||||
rm -v $LFS/usr/bin/{bunzip2,bzcat,bzip2}
|
|
||||||
ln -sv bzip2 $LFS/bin/bunzip2
|
|
||||||
ln -sv bzip2 $LFS/bin/bzcat</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-bzip2" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,41 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-changingowner">
|
|
||||||
<?dbhtml filename="changingowner.html"?>
|
|
||||||
|
|
||||||
<title>Changing Ownership</title>
|
|
||||||
|
|
||||||
<note>
|
|
||||||
<para>The commands in the remainder of this book must be performed while
|
|
||||||
logged in as user <systemitem class="username">root</systemitem> and no
|
|
||||||
longer as user <systemitem class="username">lfs</systemitem>. Also, double
|
|
||||||
check that <envar>$LFS</envar> is set in <systemitem
|
|
||||||
class="username">root</systemitem>'s environment.</para>
|
|
||||||
</note>
|
|
||||||
|
|
||||||
<para>Currently, the whole directory hierarchy in <filename
|
|
||||||
class="directory">$LFS</filename>
|
|
||||||
is owned by the user <systemitem class="username">lfs</systemitem>, a user
|
|
||||||
that exists only on the host system. If the directories under <filename
|
|
||||||
class="directory">$LFS</filename> are kept as they are, the files are
|
|
||||||
owned by a user ID without a corresponding account. This is dangerous because
|
|
||||||
a user account created later could get this same user ID and would own all
|
|
||||||
the files under <filename class="directory">$LFS</filename>, thus exposing
|
|
||||||
these files to possible malicious manipulation.</para>
|
|
||||||
|
|
||||||
<para>To avoid this issue, you could add the <systemitem
|
|
||||||
class="username">lfs</systemitem> user to the new LFS system later when
|
|
||||||
creating the <filename>/etc/passwd</filename> file, taking care to assign it
|
|
||||||
the same user and group IDs as on the host system. Better yet, change the
|
|
||||||
ownership of the <filename class="directory">$LFS/*</filename> directories to
|
|
||||||
user <systemitem class="username">root</systemitem> by running the following
|
|
||||||
command:</para>
|
|
||||||
|
|
||||||
<screen><userinput>chown -R root:root $LFS/{usr,lib,var,etc,bin,sbin,lib64,tools}</userinput></screen>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,105 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-coreutils" role="wrap">
|
|
||||||
<?dbhtml filename="coreutils.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>coreutils</productname>
|
|
||||||
<productnumber>&coreutils-version;</productnumber>
|
|
||||||
<address>&coreutils-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Coreutils-&coreutils-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-coreutils">
|
|
||||||
<primary sortas="a-Coreutils">Coreutils</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/coreutils.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&coreutils-ch5-sbu;</seg>
|
|
||||||
<seg>&coreutils-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Coreutils</title>
|
|
||||||
|
|
||||||
<para>Prepare Coreutils for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">./configure --prefix=/usr \
|
|
||||||
--host=$LFS_TGT \
|
|
||||||
--build=$(build-aux/config.guess) \
|
|
||||||
--enable-install-program=hostname \
|
|
||||||
--enable-no-install-program=kill,uptime</userinput></screen>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<title>The meaning of the configure options:</title>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><envar>--enable-install-program=hostname</envar></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This enables the <command>hostname</command> binary to be built
|
|
||||||
and installed – it is disabled by default but is required by the
|
|
||||||
Perl test suite.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
<!--
|
|
||||||
<para>The above command refuses to install <filename>su</filename>
|
|
||||||
because the program cannot be installed setuid root as a non-privileged
|
|
||||||
user. By manually installing it, we can use it for running tests in the
|
|
||||||
final system as a non-privileged user. Install it with:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">cp -v src/su /tools/bin</userinput></screen>
|
|
||||||
-->
|
|
||||||
<para>Move programs to their final expected locations. Although this is
|
|
||||||
not necessary in this temporary environment, we must do so because some
|
|
||||||
programs harcode executable locations:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">mv -v $LFS/usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} $LFS/bin
|
|
||||||
mv -v $LFS/usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} $LFS/bin
|
|
||||||
mv -v $LFS/usr/bin/{rmdir,stty,sync,true,uname} $LFS/bin
|
|
||||||
mv -v $LFS/usr/bin/chroot $LFS/usr/sbin
|
|
||||||
mkdir -pv $LFS/usr/share/man/man8
|
|
||||||
mv -v $LFS/usr/share/man/man1/chroot.1 $LFS/usr/share/man/man8/chroot.8
|
|
||||||
sed -i s/\"1\"/\"8\"/1 $LFS/usr/share/man/man8/chroot.8
|
|
||||||
mv -v $LFS/usr/bin/{head,nice,sleep,touch} $LFS/bin</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-coreutils" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,68 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-diffutils" role="wrap">
|
|
||||||
<?dbhtml filename="diffutils.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>diffutils</productname>
|
|
||||||
<productnumber>&diffutils-version;</productnumber>
|
|
||||||
<address>&diffutils-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Diffutils-&diffutils-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-diffutils">
|
|
||||||
<primary sortas="a-Diffutils">Diffutils</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/diffutils.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&diffutils-ch5-sbu;</seg>
|
|
||||||
<seg>&diffutils-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Diffutils</title>
|
|
||||||
|
|
||||||
<para>Prepare Diffutils for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">./configure --prefix=/usr --host=$LFS_TGT</userinput></screen>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-diffutils" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,73 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-file" role="wrap">
|
|
||||||
<?dbhtml filename="file.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>file</productname>
|
|
||||||
<productnumber>&file-version;</productnumber>
|
|
||||||
<address>&file-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>File-&file-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-file">
|
|
||||||
<primary sortas="a-File">File</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/file.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&file-ch5-sbu;</seg>
|
|
||||||
<seg>&file-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of File</title>
|
|
||||||
|
|
||||||
<para>Prepare File for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">./configure --prefix=/usr \
|
|
||||||
--host=$LFS_TGT</userinput></screen>
|
|
||||||
|
|
||||||
<!-- devs: if using - -build here, the build system wants to compile
|
|
||||||
the signature file with "file" on the build system, but stops if it is not
|
|
||||||
the same version. One possibility would be to build "file" on the build
|
|
||||||
system first, but it is simpler to have the system think it is not
|
|
||||||
cross-compiling, and use the just built "file". -->
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
<para>Details on this package are located in<!-- TODO
|
|
||||||
<xref linkend="contents-file" role="."/> --></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,75 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-findutils" role="wrap">
|
|
||||||
<?dbhtml filename="findutils.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>findutils</productname>
|
|
||||||
<productnumber>&findutils-version;</productnumber>
|
|
||||||
<address>&findutils-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Findutils-&findutils-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-findutils">
|
|
||||||
<primary sortas="a-Findutils">Findutils</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/findutils.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&findutils-ch5-sbu;</seg>
|
|
||||||
<seg>&findutils-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Findutils</title>
|
|
||||||
|
|
||||||
<para>Prepare Findutils for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">./configure --prefix=/usr \
|
|
||||||
--host=$LFS_TGT \
|
|
||||||
--build=$(build-aux/config.guess)</userinput></screen>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
<para>Move the excutable to its final expected location:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">mv -v $LFS/usr/bin/find $LFS/bin
|
|
||||||
sed -i 's|find:=${BINDIR}|find:=/bin|' $LFS/usr/bin/updatedb</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-findutils" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,88 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-flex" role="wrap">
|
|
||||||
<?dbhtml filename="flex.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>flex</productname>
|
|
||||||
<productnumber>&flex-version;</productnumber>
|
|
||||||
<address>&flex-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Flex-&flex-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-flex">
|
|
||||||
<primary sortas="a-Flex">Flex</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/flex.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&flex-ch5-sbu;</seg>
|
|
||||||
<seg>&flex-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Flex</title>
|
|
||||||
|
|
||||||
<para>Prepare Flex for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">./configure --prefix=/usr \
|
|
||||||
--docdir=/usr/share/doc/flex-&flex-version;</userinput></screen>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
<variablelist>
|
|
||||||
<title>The meaning of the new configure option:</title>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>- -disable-bootstrap</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Normally, building flex is done in two stages. A first
|
|
||||||
programs, which is used to generate the source of a second one,
|
|
||||||
which is then compiled. When using cross-compilation, the first
|
|
||||||
program is generated on the build system. However, due to a bug
|
|
||||||
in configure, the presence of some function is tested only on the
|
|
||||||
host system. If this function is not found on the build system, the
|
|
||||||
build fails. This can be prevented by disabling the two stage
|
|
||||||
build.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
-->
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make install</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-flex" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,74 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-gawk" role="wrap">
|
|
||||||
<?dbhtml filename="gawk.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>gawk</productname>
|
|
||||||
<productnumber>&gawk-version;</productnumber>
|
|
||||||
<address>&gawk-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Gawk-&gawk-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-gawk">
|
|
||||||
<primary sortas="a-Gawk">Gawk</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/gawk.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&gawk-ch5-sbu;</seg>
|
|
||||||
<seg>&gawk-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Gawk</title>
|
|
||||||
|
|
||||||
<para>First, ensure some unneeded files are not installed:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">sed -i 's/extras//' Makefile.in</userinput></screen>
|
|
||||||
|
|
||||||
<para>Prepare Gawk for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">./configure --prefix=/usr \
|
|
||||||
--host=$LFS_TGT \
|
|
||||||
--build=$(./config.guess)</userinput></screen>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-gawk" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,208 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-gcc-pass1" role="wrap" xreflabel="gcc-pass1">
|
|
||||||
<?dbhtml filename="gcc-pass1.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>gcc-pass1</productname>
|
|
||||||
<productnumber>&gcc-version;</productnumber>
|
|
||||||
<address>&gcc-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>GCC-&gcc-version; - Pass 1</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-gcc-pass1">
|
|
||||||
<primary sortas="a-GCC">GCC</primary>
|
|
||||||
<secondary>tools, pass 1</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/gcc.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&gcc-ch5p1-sbu;</seg>
|
|
||||||
<seg>&gcc-ch5p1-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Cross GCC</title>
|
|
||||||
|
|
||||||
<para>GCC requires the GMP, MPFR and MPC packages. As these packages may
|
|
||||||
not be included in your host distribution, they will be built with
|
|
||||||
GCC. Unpack each package into the GCC source directory and rename the
|
|
||||||
resulting directories so the GCC build procedures will automatically
|
|
||||||
use them:</para>
|
|
||||||
|
|
||||||
<note><para>There are frequent misunderstandings about this chapter. The
|
|
||||||
procedures are the same as every other chapter as explained earlier (<xref
|
|
||||||
linkend='buildinstr'/>). First extract the gcc tarball from the sources
|
|
||||||
directory and then change to the directory created. Only then should you
|
|
||||||
proceed with the instructions below.</para></note>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">tar -xf ../mpfr-&mpfr-version;.tar.xz
|
|
||||||
mv -v mpfr-&mpfr-version; mpfr
|
|
||||||
tar -xf ../gmp-&gmp-version;.tar.xz
|
|
||||||
mv -v gmp-&gmp-version; gmp
|
|
||||||
tar -xf ../mpc-&mpc-version;.tar.gz
|
|
||||||
mv -v mpc-&mpc-version; mpc</userinput></screen>
|
|
||||||
|
|
||||||
<para>On x86_64 hosts, set the default directory name for
|
|
||||||
64-bit libraries to <quote>lib</quote>:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">case $(uname -m) in
|
|
||||||
x86_64)
|
|
||||||
sed -e '/m64=/s/lib64/lib/' \
|
|
||||||
-i.orig gcc/config/i386/t-linux64
|
|
||||||
;;
|
|
||||||
esac</userinput></screen>
|
|
||||||
|
|
||||||
<para>The GCC documentation recommends building GCC
|
|
||||||
in a dedicated build directory:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">mkdir -v build
|
|
||||||
cd build</userinput></screen>
|
|
||||||
|
|
||||||
<para>Prepare GCC for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">../configure \
|
|
||||||
--target=$LFS_TGT \
|
|
||||||
--prefix=$LFS/tools \
|
|
||||||
--with-glibc-version=2.11 \
|
|
||||||
--with-sysroot=$LFS \
|
|
||||||
--with-newlib \
|
|
||||||
--without-headers \
|
|
||||||
--enable-initfini-array \
|
|
||||||
--disable-nls \
|
|
||||||
--disable-shared \
|
|
||||||
--disable-multilib \
|
|
||||||
--disable-decimal-float \
|
|
||||||
--disable-threads \
|
|
||||||
--disable-libatomic \
|
|
||||||
--disable-libgomp \
|
|
||||||
--disable-libquadmath \
|
|
||||||
--disable-libssp \
|
|
||||||
--disable-libvtv \
|
|
||||||
--disable-libstdcxx \
|
|
||||||
--enable-languages=c,c++</userinput></screen>
|
|
||||||
<variablelist>
|
|
||||||
<title>The meaning of the configure options:</title>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--with-glibc-version=2.11</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This option ensures the package will be compatible with the host's
|
|
||||||
version of glibc. It is set to the minimum glibc requirement
|
|
||||||
specified in the <xref linkend="ch-partitioning-hostreqs"/>.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--with-newlib</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Since a working C library is not yet available, this ensures
|
|
||||||
that the inhibit_libc constant is defined when building libgcc. This prevents
|
|
||||||
the compiling of any code that requires libc support.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--without-headers</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>When creating a complete cross-compiler, GCC requires
|
|
||||||
standard headers compatible with the target system. For our
|
|
||||||
purposes these headers will not be needed. This switch prevents
|
|
||||||
GCC from looking for them.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--disable-shared</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This switch forces GCC to link its internal libraries
|
|
||||||
statically. We need this because the shared libraries require glibc,
|
|
||||||
which is not yet installed on the target system.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--disable-decimal-float, --disable-threads,
|
|
||||||
--disable-libatomic, --disable-libgomp, <!--- -disable-libmpx,-->
|
|
||||||
--disable-libquadmath, --disable-libssp, --disable-libvtv,
|
|
||||||
--disable-libstdcxx</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>These switches disable support for the decimal floating point
|
|
||||||
extension, threading, libatomic, libgomp, <!--libmpx, --> libquadmath, libssp,
|
|
||||||
libvtv, and the C++ standard library respectively. These features
|
|
||||||
will fail to compile when building a cross-compiler and are not
|
|
||||||
necessary for the task of cross-compiling the temporary libc.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--disable-multilib</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>On x86_64, LFS does not yet support a multilib configuration.
|
|
||||||
This switch is harmless for x86.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--enable-languages=c,c++</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This option ensures that only the C and C++ compilers are built.
|
|
||||||
These are the only languages needed now.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
<para>Compile GCC by running:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make install</userinput></screen>
|
|
||||||
|
|
||||||
<para>This build of GCC has installed a couple of internal system
|
|
||||||
headers. Normally one of them, <filename>limits.h</filename>, would in turn
|
|
||||||
include the corresponding system <filename>limits.h</filename> header, in
|
|
||||||
this case, <filename>$LFS/usr/include/limits.h</filename>. However, at the
|
|
||||||
time of this build of gcc <filename>$LFS/usr/include/limits.h</filename>
|
|
||||||
does not exist, so the internal header that has just been installed is a
|
|
||||||
partial, self-contained file and does not include the extended features of
|
|
||||||
the system header. This is adequate for building glibc, but the full
|
|
||||||
internal header will be needed later. Create a full version of the internal
|
|
||||||
header using a command that is identical to what the GCC build system does
|
|
||||||
in normal circumstances:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">cd ..
|
|
||||||
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
|
|
||||||
`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/install-tools/include/limits.h</userinput></screen>
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-gcc" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,160 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-gcc-pass2" role="wrap">
|
|
||||||
<?dbhtml filename="gcc-pass2.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>gcc-pass2</productname>
|
|
||||||
<productnumber>&gcc-version;</productnumber>
|
|
||||||
<address>&gcc-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>GCC-&gcc-version; - Pass 2</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-gcc-pass2">
|
|
||||||
<primary sortas="a-GCC">GCC</primary>
|
|
||||||
<secondary>tools, pass 2</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/gcc.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&gcc-ch5p2-sbu;</seg>
|
|
||||||
<seg>&gcc-ch5p2-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of GCC</title>
|
|
||||||
|
|
||||||
<para>As in the first build of GCC, the GMP, MPFR, and MPC packages are
|
|
||||||
required. Unpack the tarballs and move them into the required directory
|
|
||||||
names:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">tar -xf ../mpfr-&mpfr-version;.tar.xz
|
|
||||||
mv -v mpfr-&mpfr-version; mpfr
|
|
||||||
tar -xf ../gmp-&gmp-version;.tar.xz
|
|
||||||
mv -v gmp-&gmp-version; gmp
|
|
||||||
tar -xf ../mpc-&mpc-version;.tar.gz
|
|
||||||
mv -v mpc-&mpc-version; mpc</userinput></screen>
|
|
||||||
|
|
||||||
<para>If building on x86_64, change the default directory name for 64-bit
|
|
||||||
libraries to <quote>lib</quote>:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">case $(uname -m) in
|
|
||||||
x86_64)
|
|
||||||
sed -e '/m64=/s/lib64/lib/' \
|
|
||||||
-i.orig gcc/config/i386/t-linux64
|
|
||||||
;;
|
|
||||||
esac</userinput></screen>
|
|
||||||
|
|
||||||
<para>Fix an issue with GCC-10.1 when building with a cross
|
|
||||||
compiler:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">patch -Np1 -i ../&gcc-cross-patch;</userinput></screen>
|
|
||||||
|
|
||||||
<para>Create a separate build directory again:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">mkdir -v build
|
|
||||||
cd build</userinput></screen>
|
|
||||||
|
|
||||||
<para>Create a symlink that allos libgcc to be built with posix threads
|
|
||||||
support:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">mkdir -pv $LFS_TGT/libgcc
|
|
||||||
ln -s ../../../libgcc/gthr-posix.h $LFS_TGT/libgcc/gthr-default.h</userinput></screen>
|
|
||||||
|
|
||||||
<para>Before starting to build GCC, remember to unset any environment
|
|
||||||
variables that override the default optimization flags.</para>
|
|
||||||
|
|
||||||
<para>Now prepare GCC for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">../configure \
|
|
||||||
--build=$(../config.guess) \
|
|
||||||
--host=$LFS_TGT \
|
|
||||||
--prefix=/usr \
|
|
||||||
CC_FOR_TARGET=$LFS_TGT-gcc \
|
|
||||||
--with-build-sysroot=$LFS \
|
|
||||||
--enable-initfini-array \
|
|
||||||
--disable-nls \
|
|
||||||
--disable-multilib \
|
|
||||||
--disable-decimal-float \
|
|
||||||
--disable-libatomic \
|
|
||||||
--disable-libgomp \
|
|
||||||
--disable-libquadmath \
|
|
||||||
--disable-libssp \
|
|
||||||
--disable-libvtv \
|
|
||||||
--disable-libstdcxx \
|
|
||||||
--enable-languages=c,c++</userinput></screen>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<title>The meaning of the new configure options:</title><!-- WIP -->
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>-with-build-sysroot=$LFS</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Normally, using <parameter>--host=</parameter> ensures that
|
|
||||||
a cross-compiler is used for building gcc, and that compiler knows
|
|
||||||
that it has to look for headers and libraries in <filename
|
|
||||||
class="directory">$LFS</filename>. But the build system of GCC uses
|
|
||||||
other tools, which are not aware of this location. This switch is
|
|
||||||
needed to have them find the needed files in <filename
|
|
||||||
class="directory">$LFS</filename>, and not on the host.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--enable-initfini-array</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This option is automatically enabled when building a native
|
|
||||||
compiler with a native compiler on x86. But here, we build with
|
|
||||||
a cross compiler, so we need to explicitely set this option.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
<para>As a finishing touch, create a symlink. Many programs and scripts
|
|
||||||
run <command>cc</command> instead of <command>gcc</command>, which is
|
|
||||||
used to keep programs generic and therefore usable on all kinds of UNIX
|
|
||||||
systems where the GNU C compiler is not always installed. Running
|
|
||||||
<command>cc</command> leaves the system administrator free to decide
|
|
||||||
which C compiler to install:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">ln -sv gcc $LFS/usr/bin/cc</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-gcc" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,120 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-generalinstructions">
|
|
||||||
<?dbhtml filename="generalinstructions.html"?>
|
|
||||||
|
|
||||||
<title>General Compilation Instructions</title>
|
|
||||||
|
|
||||||
<para>When building packages there are several assumptions made within
|
|
||||||
the instructions:</para>
|
|
||||||
|
|
||||||
<itemizedlist>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<para>Several of the packages are patched before compilation, but only when
|
|
||||||
the patch is needed to circumvent a problem. A patch is often needed in
|
|
||||||
both this and the next chapter, but sometimes in only one or the other.
|
|
||||||
Therefore, do not be concerned if instructions for a downloaded patch seem
|
|
||||||
to be missing. Warning messages about <emphasis>offset</emphasis> or
|
|
||||||
<emphasis>fuzz</emphasis> may also be encountered when applying a patch. Do
|
|
||||||
not worry about these warnings, as the patch was still successfully
|
|
||||||
applied.</para>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<para>During the compilation of most packages, there will be several
|
|
||||||
warnings that scroll by on the screen. These are normal and can safely be
|
|
||||||
ignored. These warnings are as they appear—warnings about
|
|
||||||
deprecated, but not invalid, use of the C or C++ syntax. C standards change
|
|
||||||
fairly often, and some packages still use the older standard. This is not a
|
|
||||||
problem, but does prompt the warning.</para>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<para>Check one last time that the <envar>LFS</envar> environment variable
|
|
||||||
is set up properly:</para>
|
|
||||||
|
|
||||||
<screen role="nodump"><userinput>echo $LFS</userinput></screen>
|
|
||||||
|
|
||||||
<para>Make sure the output shows the path to the LFS partition's mount
|
|
||||||
point, which is <filename class="directory">/mnt/lfs</filename>, using our
|
|
||||||
example.</para>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
|
|
||||||
<para>Finally, two important items must be emphasized:</para>
|
|
||||||
|
|
||||||
<important>
|
|
||||||
|
|
||||||
<para>The build instructions assume that the <xref
|
|
||||||
linkend='ch-partitioning-hostreqs'/>, including symbolic links, have
|
|
||||||
been set properly:</para>
|
|
||||||
|
|
||||||
<itemizedlist role='important'>
|
|
||||||
|
|
||||||
<listitem override='bullet'><para><command>bash</command> is the shell
|
|
||||||
in use.</para></listitem>
|
|
||||||
|
|
||||||
<listitem override='bullet'><para><command>sh</command> is a symbolic
|
|
||||||
link to <command>bash</command>.</para></listitem>
|
|
||||||
|
|
||||||
<listitem override='bullet'><para><command>/usr/bin/awk</command> is a
|
|
||||||
symbolic link to <command>gawk</command>.</para></listitem>
|
|
||||||
|
|
||||||
<listitem override='bullet'><para><command>/usr/bin/yacc</command> is a
|
|
||||||
symbolic link to <command>bison</command> or a small script that
|
|
||||||
executes bison.</para></listitem>
|
|
||||||
|
|
||||||
</itemizedlist>
|
|
||||||
</important>
|
|
||||||
|
|
||||||
<important>
|
|
||||||
<para>To re-emphasize the build process:</para>
|
|
||||||
|
|
||||||
<orderedlist numeration="arabic" spacing="compact">
|
|
||||||
<listitem>
|
|
||||||
<para>Place all the sources and patches in a directory that will be
|
|
||||||
accessible from the chroot environment such as
|
|
||||||
<filename class="directory">/mnt/lfs/sources/</filename>.<!-- Do
|
|
||||||
<emphasis>not</emphasis> put sources in
|
|
||||||
<filename class="directory">/mnt/lfs/tools/</filename>. --></para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>Change to the sources directory.</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem id='buildinstr' xreflabel='Package build instructions'>
|
|
||||||
<para>For each package:</para>
|
|
||||||
<orderedlist numeration="loweralpha" spacing="compact">
|
|
||||||
<listitem>
|
|
||||||
<para>Using the <command>tar</command> program, extract the package
|
|
||||||
to be built. In Chapter 5, ensure you are the <emphasis>lfs</emphasis>
|
|
||||||
user when extracting the package.</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>Change to the directory created when the package was
|
|
||||||
extracted.</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>Follow the book's instructions for building the package.</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>Change back to the sources directory.</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>Delete the extracted source directory unless instructed otherwise.</para>
|
|
||||||
</listitem>
|
|
||||||
</orderedlist>
|
|
||||||
</listitem>
|
|
||||||
</orderedlist>
|
|
||||||
</important>
|
|
||||||
</listitem>
|
|
||||||
|
|
||||||
</itemizedlist>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,230 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-glibc" role="wrap">
|
|
||||||
<?dbhtml filename="glibc.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>glibc</productname>
|
|
||||||
<productnumber>&glibc-version;</productnumber>
|
|
||||||
<address>&glibc-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Glibc-&glibc-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-glibc">
|
|
||||||
<primary sortas="a-Glibc">Glibc</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/glibc.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&glibc-ch5-sbu;</seg>
|
|
||||||
<seg>&glibc-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Glibc</title>
|
|
||||||
|
|
||||||
<para>First, create two symbolic links, which are needed for proper
|
|
||||||
operation of the dynamic library loader:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
|
|
||||||
ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3</userinput></screen>
|
|
||||||
|
|
||||||
<para>Some of the Glibc programs use the non-FHS compliant
|
|
||||||
<filename class="directory">/var/db</filename> directory to store their
|
|
||||||
runtime data. Apply the following patch to make such programs store their
|
|
||||||
runtime data in the FHS-compliant locations:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">patch -Np1 -i ../glibc-&glibc-version;-fhs-1.patch</userinput></screen>
|
|
||||||
|
|
||||||
<para>The Glibc documentation recommends building Glibc
|
|
||||||
in a dedicated build directory:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">mkdir -v build
|
|
||||||
cd build</userinput></screen>
|
|
||||||
|
|
||||||
<para>Next, prepare Glibc for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">../configure \
|
|
||||||
--prefix=/usr \
|
|
||||||
--host=$LFS_TGT \
|
|
||||||
--build=$(../scripts/config.guess) \
|
|
||||||
--enable-kernel=&min-kernel; \
|
|
||||||
--with-headers=$LFS/usr/include \
|
|
||||||
libc_cv_slibdir=/lib</userinput></screen>
|
|
||||||
<!--
|
|
||||||
libc_cv_forced_unwind=yes \
|
|
||||||
libc_cv_c_cleanup=yes</userinput></screen> -->
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<title>The meaning of the configure options:</title>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--host=$LFS_TGT, --build=$(../scripts/config.guess)</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The combined effect of these switches is that Glibc's build system
|
|
||||||
configures itself to be cross-compiled, using the cross-linker and
|
|
||||||
cross-compiler in <filename class="directory">/tools</filename>.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--enable-kernel=&min-kernel;</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This tells Glibc to compile the library with support
|
|
||||||
for &min-kernel; and later Linux kernels. Workarounds for older
|
|
||||||
kernels are not enabled.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--with-headers=$LFS/usr/include</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This tells Glibc to compile itself against the headers recently
|
|
||||||
installed to the usr/include directory, so that it knows exactly what
|
|
||||||
features the kernel has and can optimize itself accordingly.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>libc_cv_slibdir=/lib</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This ensures that the library is installed in /lib instead
|
|
||||||
of the default /lib64 on 64 bit machines.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<!--
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>libc_cv_c_cleanup=yes</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Similarly, we pass libc_cv_c_cleanup=yes through to the
|
|
||||||
<command>configure</command> script so that the test is skipped and C
|
|
||||||
cleanup handling support is configured.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>libc_cv_ctors_header=yes</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Similarly, we pass libc_cv_ctors_header=yes through to the
|
|
||||||
<command>configure</command> script so that the test is skipped and
|
|
||||||
gcc constructor support is configured.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>-->
|
|
||||||
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
<para>During this stage the following warning might appear:</para>
|
|
||||||
|
|
||||||
<blockquote>
|
|
||||||
<screen><computeroutput>configure: WARNING:
|
|
||||||
*** These auxiliary programs are missing or
|
|
||||||
*** incompatible versions: msgfmt
|
|
||||||
*** some features will be disabled.
|
|
||||||
*** Check the INSTALL file for required versions.</computeroutput></screen>
|
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
<para>The missing or incompatible <command>msgfmt</command> program is
|
|
||||||
generally harmless. This <command>msgfmt</command> program is part of the
|
|
||||||
Gettext package which the host distribution should provide.</para>
|
|
||||||
|
|
||||||
<note><para>There have been reports that this package may fail when
|
|
||||||
building as a "parallel make". If this occurs, rerun the make command
|
|
||||||
with a "-j1" option.</para></note>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<title>The meaning of the <command>make install</command> option:</title>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>DESTDIR=$LFS</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The <envar>DESTDIR</envar> make variable is used by almost all
|
|
||||||
packages to define the location where the package should be
|
|
||||||
installed. If it is not set, it defaults to the root (<filename
|
|
||||||
class="directory">/</filename>) directory. Here we specify that
|
|
||||||
the package be installed in <filename class="directory">$LFS
|
|
||||||
</filename>, which will become the root after <xref linkend=
|
|
||||||
"ch-tools-chroot"/>.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
<caution>
|
|
||||||
<para>At this point, it is imperative to stop and ensure that the basic
|
|
||||||
functions (compiling and linking) of the new toolchain are working as
|
|
||||||
expected. To perform a sanity check, run the following commands:</para>
|
|
||||||
|
|
||||||
<screen><userinput>echo 'int main(){}' > dummy.c
|
|
||||||
$LFS_TGT-gcc dummy.c
|
|
||||||
readelf -l a.out | grep '/ld-linux'</userinput></screen>
|
|
||||||
|
|
||||||
<para>If everything is working correctly, there should be no errors,
|
|
||||||
and the output of the last command will be of the form:</para>
|
|
||||||
|
|
||||||
<screen><computeroutput>[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</computeroutput></screen>
|
|
||||||
|
|
||||||
<para>Note that for 32-bit machines, the interpreter name will be
|
|
||||||
<filename>/lib/ld-linux.so.2</filename>.</para>
|
|
||||||
|
|
||||||
<para>If the output is not shown as above or there was no output at all,
|
|
||||||
then something is wrong. Investigate and retrace the steps to find out
|
|
||||||
where the problem is and correct it. This issue must be resolved before
|
|
||||||
continuing on.</para>
|
|
||||||
|
|
||||||
<para>Once all is well, clean up the test files:</para>
|
|
||||||
|
|
||||||
<screen><userinput>rm -v dummy.c a.out</userinput></screen>
|
|
||||||
|
|
||||||
</caution>
|
|
||||||
|
|
||||||
<note><para>Building packages in the next sections will serve as an
|
|
||||||
additional check that the toolchain has been built properly. If some
|
|
||||||
package, especially binutils-pass2 or gcc-pass2, fails to build, it is
|
|
||||||
an indication that something has gone wrong with the
|
|
||||||
previous Binutils, GCC, or Glibc installations.</para></note>
|
|
||||||
|
|
||||||
<para>Now that our cross-toolchain is complete, finalize the installation
|
|
||||||
of the limits.h header. For doing so, run an utility provided by the GCC
|
|
||||||
developers:</para>
|
|
||||||
|
|
||||||
<screen><userinput>$LFS/tools/libexec/gcc/$LFS_TGT/&gcc-version;/install-tools/mkheaders</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-glibc" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,70 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-grep" role="wrap">
|
|
||||||
<?dbhtml filename="grep.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>grep</productname>
|
|
||||||
<productnumber>&grep-version;</productnumber>
|
|
||||||
<address>&grep-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Grep-&grep-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-grep">
|
|
||||||
<primary sortas="a-Grep">Grep</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/grep.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&grep-ch5-sbu;</seg>
|
|
||||||
<seg>&grep-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Grep</title>
|
|
||||||
|
|
||||||
<para>Prepare Grep for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">./configure --prefix=/usr \
|
|
||||||
--host=$LFS_TGT \
|
|
||||||
--bindir=/bin</userinput></screen>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-grep" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,72 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-gzip" role="wrap">
|
|
||||||
<?dbhtml filename="gzip.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>gzip</productname>
|
|
||||||
<productnumber>&gzip-version;</productnumber>
|
|
||||||
<address>&gzip-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Gzip-&gzip-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-gzip">
|
|
||||||
<primary sortas="a-Gzip">Gzip</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/gzip.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&gzip-ch5-sbu;</seg>
|
|
||||||
<seg>&gzip-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Gzip</title>
|
|
||||||
|
|
||||||
<para>Prepare Gzip for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">./configure --prefix=/usr --host=$LFS_TGT</userinput></screen>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
<para>Move the excutable to its final expected location:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">mv -v $LFS/usr/bin/gzip $LFS/bin</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-gzip" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,122 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-libstdcpp-pass1" role="wrap">
|
|
||||||
<?dbhtml filename="gcc-libstdc++-pass1.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>gcc-libstdc++</productname>
|
|
||||||
<productnumber>&gcc-version;</productnumber>
|
|
||||||
<address>&gcc-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Libstdc++ from GCC-&gcc-version;, Pass 1</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-libstdcpp-pass1">
|
|
||||||
<primary sortas="a-GCC">GCC</primary>
|
|
||||||
<secondary>tools, libstdc++ pass 1</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Libstdc++ is the standard C++ library. It is needed
|
|
||||||
to compile C++ code
|
|
||||||
(part of GCC is written in C++), but we had to defer its installation
|
|
||||||
when we built <xref linkend="ch-tools-gcc-pass1"/>
|
|
||||||
because it depends on glibc, which was not yet available in the target
|
|
||||||
directory.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&libstdcpp-ch5-sbu;</seg>
|
|
||||||
<seg>&libstdcpp-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Target Libstdc++</title>
|
|
||||||
|
|
||||||
<note>
|
|
||||||
<para><application>Libstdc++</application> is part of the GCC sources.
|
|
||||||
You should first unpack the GCC tarball and change to the
|
|
||||||
<filename>gcc-&gcc-version;</filename> directory.</para>
|
|
||||||
</note>
|
|
||||||
|
|
||||||
<para>Create a separate build directory for Libstdc++ and enter it:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">mkdir -v build
|
|
||||||
cd build</userinput></screen>
|
|
||||||
|
|
||||||
<para>Prepare Libstdc++ for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">../libstdc++-v3/configure \
|
|
||||||
--host=$LFS_TGT \
|
|
||||||
--build=$(../config.guess) \
|
|
||||||
--prefix=/usr \
|
|
||||||
--disable-multilib \
|
|
||||||
--disable-nls \
|
|
||||||
--disable-libstdcxx-pch \
|
|
||||||
--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/&gcc-version;</userinput></screen>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<title>The meaning of the configure options:</title>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--host=...</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Indicates to use the cross compiler we have just built
|
|
||||||
instead of the one in <filename>/usr/bin</filename>.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--disable-libstdcxx-pch</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This switch prevents the installation of precompiled
|
|
||||||
include files, which are not needed at this stage.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/&gcc-version;</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This is the location where the standard include files are
|
|
||||||
searched by the C++ compiler. In a normal build, this information
|
|
||||||
is automatically passed to the Libstdc++ <command>configure</command>
|
|
||||||
options from the top level directory. In our case, this information
|
|
||||||
must be explicitly given.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
<para>Compile libstdc++ by running:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the library:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-gcc" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,207 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-linux-headers" role="wrap">
|
|
||||||
<?dbhtml filename="linux-headers.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>linux-headers</productname>
|
|
||||||
<productnumber>&linux-version;</productnumber>
|
|
||||||
<address>&linux-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Linux-&linux-version; API Headers</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-linux-headers">
|
|
||||||
<primary sortas="a-Linux">Linux</primary>
|
|
||||||
<secondary>tools, API headers</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>The Linux API Headers (in linux-&linux-version;.tar.xz) expose the
|
|
||||||
kernel's API for use by Glibc.</para>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&linux-headers-ch5-sbu;</seg>
|
|
||||||
<seg>&linux-headers-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Linux API Headers</title>
|
|
||||||
|
|
||||||
<para>The Linux kernel needs to expose an Application Programming Interface
|
|
||||||
(API) for the system's C library (Glibc in LFS) to use. This is done
|
|
||||||
by way of sanitizing various C header files that are shipped in the Linux
|
|
||||||
kernel source tarball.</para>
|
|
||||||
|
|
||||||
<para>Make sure there are no stale files embedded in the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">make mrproper</userinput></screen>
|
|
||||||
|
|
||||||
<para>Now extract the user-visible kernel headers from the source.
|
|
||||||
The recommended make target <quote>headers_install</quote> cannot be
|
|
||||||
used, because it requires <application>rsync</application>, which may not
|
|
||||||
be available. The headers are first placed in
|
|
||||||
<filename class="directory">./usr</filename>, then copied to the needed
|
|
||||||
location.</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make headers
|
|
||||||
find usr/include -name '.*' -delete
|
|
||||||
rm usr/include/Makefile
|
|
||||||
</userinput><userinput remap="install">cp -rv usr/include $LFS/usr</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 id="contents-linux-headers" role="content">
|
|
||||||
<title>Contents of Linux API Headers</title>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>Installed headers</segtitle>
|
|
||||||
<segtitle>Installed directories</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>/usr/include/asm/*.h, /usr/include/asm-generic/*.h,
|
|
||||||
/usr/include/drm/*.h, /usr/include/linux/*.h, /usr/include/misc/*.h,
|
|
||||||
/usr/include/mtd/*.h, /usr/include/rdma/*.h, /usr/include/scsi/*.h,
|
|
||||||
/usr/include/sound/*.h, /usr/include/video/*.h,
|
|
||||||
and /usr/include/xen/*.h</seg>
|
|
||||||
<seg>/usr/include/asm, /usr/include/asm-generic, /usr/include/drm,
|
|
||||||
/usr/include/linux, /usr/include/misc, /usr/include/mtd,
|
|
||||||
/usr/include/rdma, /usr/include/scsi, /usr/include/sound,
|
|
||||||
/usr/include/video, and /usr/include/xen</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<bridgehead renderas="sect3">Short Descriptions</bridgehead>
|
|
||||||
<?dbfo list-presentation="list"?>
|
|
||||||
<?dbhtml list-presentation="table"?>
|
|
||||||
|
|
||||||
<varlistentry id="asm">
|
|
||||||
<term><filename class="headerfile">/usr/include/asm/*.h</filename></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The Linux API ASM Headers</para>
|
|
||||||
<indexterm zone="ch-tools-linux-headers asm">
|
|
||||||
<primary sortas="e-/usr/include/asm/*.h">/usr/include/asm/*.h</primary>
|
|
||||||
</indexterm>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry id="asm-generic">
|
|
||||||
<term><filename class="headerfile">/usr/include/asm-generic/*.h</filename></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The Linux API ASM Generic Headers</para>
|
|
||||||
<indexterm zone="ch-tools-linux-headers asm-generic">
|
|
||||||
<primary sortas="e-/usr/include/asm-generic/*.h">/usr/include/asm-generic/*.h</primary>
|
|
||||||
</indexterm>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry id="drm">
|
|
||||||
<term><filename class="headerfile">/usr/include/drm/*.h</filename></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The Linux API DRM Headers</para>
|
|
||||||
<indexterm zone="ch-tools-linux-headers drm">
|
|
||||||
<primary sortas="e-/usr/include/drm/*.h">/usr/include/drm/*.h</primary>
|
|
||||||
</indexterm>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry id="linux">
|
|
||||||
<term><filename class="headerfile">/usr/include/linux/*.h</filename></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The Linux API Linux Headers</para>
|
|
||||||
<indexterm zone="ch-tools-linux-headers linux">
|
|
||||||
<primary sortas="e-/usr/include/linux/*.h">/usr/include/linux/*.h</primary>
|
|
||||||
</indexterm>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry id="misc">
|
|
||||||
<term><filename class="headerfile">/usr/include/misc/*.h</filename></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The Linux API Miscellaneous Headers</para>
|
|
||||||
<indexterm zone="ch-tools-linux-headers misc">
|
|
||||||
<primary sortas="e-/usr/include/misc/*.h">/usr/include/misc/*.h</primary>
|
|
||||||
</indexterm>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry id="mtd">
|
|
||||||
<term><filename class="headerfile">/usr/include/mtd/*.h</filename></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The Linux API MTD Headers</para>
|
|
||||||
<indexterm zone="ch-tools-linux-headers mtd">
|
|
||||||
<primary sortas="e-/usr/include/mtd/*.h">/usr/include/mtd/*.h</primary>
|
|
||||||
</indexterm>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry id="rdma">
|
|
||||||
<term><filename class="headerfile">/usr/include/rdma/*.h</filename></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The Linux API RDMA Headers</para>
|
|
||||||
<indexterm zone="ch-tools-linux-headers rdma">
|
|
||||||
<primary sortas="e-/usr/include/rdma/*.h">/usr/include/rdma/*.h</primary>
|
|
||||||
</indexterm>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry id="scsi">
|
|
||||||
<term><filename class="headerfile">/usr/include/scsi/*.h</filename></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The Linux API SCSI Headers</para>
|
|
||||||
<indexterm zone="ch-tools-linux-headers scsi">
|
|
||||||
<primary sortas="e-/usr/include/scsi/*.h">/usr/include/scsi/*.h</primary>
|
|
||||||
</indexterm>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry id="sound">
|
|
||||||
<term><filename class="headerfile">/usr/include/sound/*.h</filename></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The Linux API Sound Headers</para>
|
|
||||||
<indexterm zone="ch-tools-linux-headers sound">
|
|
||||||
<primary sortas="e-/usr/include/sound/*.h">/usr/include/sound/*.h</primary>
|
|
||||||
</indexterm>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry id="video">
|
|
||||||
<term><filename class="headerfile">/usr/include/video/*.h</filename></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The Linux API Video Headers</para>
|
|
||||||
<indexterm zone="ch-tools-linux-headers video">
|
|
||||||
<primary sortas="e-/usr/include/video/*.h">/usr/include/video/*.h</primary>
|
|
||||||
</indexterm>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry id="xen">
|
|
||||||
<term><filename class="headerfile">/usr/include/xen/*.h</filename></term>
|
|
||||||
<listitem>
|
|
||||||
<para>The Linux API Xen Headers</para>
|
|
||||||
<indexterm zone="ch-tools-linux-headers xen">
|
|
||||||
<primary sortas="e-/usr/include/xen/*.h">/usr/include/xen/*.h</primary>
|
|
||||||
</indexterm>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,74 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-m4" role="wrap">
|
|
||||||
<?dbhtml filename="m4.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>m4</productname>
|
|
||||||
<productnumber>&m4-version;</productnumber>
|
|
||||||
<address>&m4-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>M4-&m4-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-m4">
|
|
||||||
<primary sortas="a-M4">M4</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/m4.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&m4-ch5-sbu;</seg>
|
|
||||||
<seg>&m4-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of M4</title>
|
|
||||||
|
|
||||||
<para>First, make some fixes introduced by glibc-2.28:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c
|
|
||||||
echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h</userinput></screen>
|
|
||||||
|
|
||||||
<para>Prepare M4 for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">./configure --prefix=/usr \
|
|
||||||
--host=$LFS_TGT \
|
|
||||||
--build=$(build-aux/config.guess)</userinput></screen>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-m4" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,83 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
<sect1 id="ch-tools-make" role="wrap">
|
|
||||||
<?dbhtml filename="make.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>make</productname>
|
|
||||||
<productnumber>&make-version;</productnumber>
|
|
||||||
<address>&make-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Make-&make-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-make">
|
|
||||||
<primary sortas="a-Make">Make</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/make.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&make-ch5-sbu;</seg>
|
|
||||||
<seg>&make-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Make</title>
|
|
||||||
|
|
||||||
<para>Prepare Make for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">./configure --prefix=/usr \
|
|
||||||
--without-guile \
|
|
||||||
--host=$LFS_TGT \
|
|
||||||
--build=$(build-aux/config.guess)</userinput></screen>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<title>The meaning of the new configure option:</title>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--without-guile</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>Although we are cross-compiling, configure tries to use
|
|
||||||
guile from the build host if it finds it. This makes compilation
|
|
||||||
fail, so this switch prevents using it.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-make" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,157 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-ncurses" role="wrap">
|
|
||||||
<?dbhtml filename="ncurses.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>ncurses</productname>
|
|
||||||
<productnumber>&ncurses-version;</productnumber>
|
|
||||||
<address>&ncurses-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Ncurses-&ncurses-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-ncurses">
|
|
||||||
<primary sortas="a-Ncurses">Ncurses</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/ncurses.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&ncurses-ch5-sbu;</seg>
|
|
||||||
<seg>&ncurses-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Ncurses</title>
|
|
||||||
|
|
||||||
<para>First, ensure that <command>gawk</command> is found first during configuration:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">sed -i s/mawk// configure</userinput></screen>
|
|
||||||
|
|
||||||
<para>Then, run the following commands to build the <quote>tic</quote>
|
|
||||||
program on the build host:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="pre">mkdir build
|
|
||||||
cd build
|
|
||||||
../configure
|
|
||||||
make -C include
|
|
||||||
make -C progs tic
|
|
||||||
cd ..</userinput></screen>
|
|
||||||
|
|
||||||
<para>Prepare Ncurses for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">./configure --prefix=/usr \
|
|
||||||
--host=$LFS_TGT \
|
|
||||||
--build=$(./config.guess) \
|
|
||||||
--mandir=/usr/share/man \
|
|
||||||
--with-shared \
|
|
||||||
--without-debug \
|
|
||||||
--without-ada \
|
|
||||||
--without-normal \
|
|
||||||
--enable-widec \
|
|
||||||
--enable-pc-files</userinput></screen>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<title>The meaning of the new configure options:</title>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--without-ada</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This ensures that Ncurses does not build support for the Ada
|
|
||||||
compiler which may be present on the host but will not be available
|
|
||||||
once we enter the <command>chroot</command> environment.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--enable-widec</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This switch causes wide-character libraries (e.g., <filename
|
|
||||||
class="libraryfile">libncursesw.so.&ncurses-version;</filename>)
|
|
||||||
to be built instead of normal ones (e.g., <filename
|
|
||||||
class="libraryfile">libncurses.so.&ncurses-version;</filename>).
|
|
||||||
These wide-character libraries are usable in both multibyte and
|
|
||||||
traditional 8-bit locales, while normal libraries work properly
|
|
||||||
only in 8-bit locales. Wide-character and normal libraries are
|
|
||||||
source-compatible, but not binary-compatible.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--enable-pc-files</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This switch generates and installs .pc files for pkg-config.
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>--without-normal</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This switch disables building and installing most static libraries.
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
<!--
|
|
||||||
<varlistentry>
|
|
||||||
<term><parameter>- -disable-db-install</parameter></term>
|
|
||||||
<listitem>
|
|
||||||
<para>This switch disables building the terminfo database: it is not
|
|
||||||
needed at this stage, and if <command>tic</command> is too old,
|
|
||||||
it cannot compile recent databases.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
-->
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
<!-- TODO: check and document -->
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS TIC_PATH=$(pwd)/build/progs/tic install
|
|
||||||
ln -s libncursesw.so $LFS/usr/lib/libncurses.so</userinput></screen>
|
|
||||||
|
|
||||||
<para>Move the shared libraries to the
|
|
||||||
<filename class="directory">/lib</filename> directory, where they are
|
|
||||||
expected to reside:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">mv -v $LFS/usr/lib/libncursesw.so.6* $LFS/lib</userinput></screen>
|
|
||||||
|
|
||||||
<para>Because the libraries have been moved, one symlink points to
|
|
||||||
a non-existent file. Recreate it:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">ln -sfv ../../lib/$(readlink $LFS/usr/lib/libncursesw.so) $LFS/usr/lib/libncursesw.so</userinput></screen>
|
|
||||||
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-ncurses" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,70 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-patch" role="wrap">
|
|
||||||
<?dbhtml filename="patch.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>patch</productname>
|
|
||||||
<productnumber>&patch-version;</productnumber>
|
|
||||||
<address>&patch-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Patch-&patch-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-patch">
|
|
||||||
<primary sortas="a-Patch">Patch</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/patch.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&patch-ch5-sbu;</seg>
|
|
||||||
<seg>&patch-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Patch</title>
|
|
||||||
|
|
||||||
<para>Prepare Patch for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">./configure --prefix=/usr \
|
|
||||||
--host=$LFS_TGT \
|
|
||||||
--build=$(build-aux/config.guess)</userinput></screen>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-patch" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,70 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-sed" role="wrap">
|
|
||||||
<?dbhtml filename="sed.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>sed</productname>
|
|
||||||
<productnumber>&sed-version;</productnumber>
|
|
||||||
<address>&sed-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Sed-&sed-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-sed">
|
|
||||||
<primary sortas="a-Sed">Sed</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/sed.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&sed-ch5-sbu;</seg>
|
|
||||||
<seg>&sed-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Sed</title>
|
|
||||||
|
|
||||||
<para>Prepare Sed for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">./configure --prefix=/usr \
|
|
||||||
--host=$LFS_TGT \
|
|
||||||
--bindir=/bin</userinput></screen>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-sed" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,53 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-stripping">
|
|
||||||
<?dbhtml filename="stripping.html"?>
|
|
||||||
|
|
||||||
<title>Stripping</title>
|
|
||||||
|
|
||||||
<para>The steps in this section are optional, but if the LFS partition is
|
|
||||||
rather small, it is beneficial to learn that unnecessary items can be removed.
|
|
||||||
The executables and libraries built so far contain about 70 MB of unneeded
|
|
||||||
debugging symbols. Remove those symbols with:</para>
|
|
||||||
|
|
||||||
<screen><userinput>$LFS_TGT-strip --strip-debug $LFS/usr/lib/*
|
|
||||||
$LFS_TGT-strip --strip-unneeded $LFS/usr/{,s}bin/*</userinput></screen>
|
|
||||||
|
|
||||||
<para>These commands will skip a number of files, reporting that it does not
|
|
||||||
recognize their file format. Most of these are scripts instead of binaries.
|
|
||||||
Note that we use the <command>strip</command> program built in
|
|
||||||
<quote>Binutils pass 1</quote>, since it is the one that knows how to strip
|
|
||||||
our cross-compiled programs.</para>
|
|
||||||
<!-- Normally, the host "strip" could be used too, since it is actually the
|
|
||||||
same computer. But Some old versions of binutils may generate buggy crt1.o
|
|
||||||
and the like, because they do not know about recently introduced symbol
|
|
||||||
types. For more details,
|
|
||||||
see https://sourceware.org/bugzilla/show_bug.cgi?id=22875-->
|
|
||||||
|
|
||||||
<para>Take care <emphasis>not</emphasis> to use
|
|
||||||
<parameter>--strip-unneeded</parameter> on the libraries. The static
|
|
||||||
ones would be destroyed and the toolchain packages would need to be
|
|
||||||
built all over again.</para>
|
|
||||||
|
|
||||||
<para>To save more, remove the documentation:</para>
|
|
||||||
|
|
||||||
<screen><userinput>rm -rf $LFS/usr/{,share}/{info,man,doc}</userinput></screen>
|
|
||||||
|
|
||||||
<para>The libtool .la files are only useful when linking with static
|
|
||||||
libraries. They are unneeded, and potentially harmful, when using dynamic
|
|
||||||
shared libraries, specially when using also non-autotools build systems.
|
|
||||||
Remove those files now:</para>
|
|
||||||
|
|
||||||
<screen><userinput>find $LFS/usr/{lib,libexec} -name \*.la -delete</userinput></screen>
|
|
||||||
|
|
||||||
<para>At this point, you should have at least 3 GB of free space in
|
|
||||||
<envar>$LFS</envar> that can be used to build and install Glibc and Gcc in
|
|
||||||
the next phase. If you can build and install Glibc, you can build and install
|
|
||||||
the rest too.</para>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,71 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-tar" role="wrap">
|
|
||||||
<?dbhtml filename="tar.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>tar</productname>
|
|
||||||
<productnumber>&tar-version;</productnumber>
|
|
||||||
<address>&tar-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Tar-&tar-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-tar">
|
|
||||||
<primary sortas="a-Tar">Tar</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/tar.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&tar-ch5-sbu;</seg>
|
|
||||||
<seg>&tar-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Tar</title>
|
|
||||||
|
|
||||||
<para>Prepare Tar for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">./configure --prefix=/usr \
|
|
||||||
--host=$LFS_TGT \
|
|
||||||
--build=$(build-aux/config.guess) \
|
|
||||||
--bindir=/bin</userinput></screen>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<para>Details on this package are located in
|
|
||||||
<xref linkend="contents-tar" role="."/></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,335 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-toolchaintechnotes">
|
|
||||||
<?dbhtml filename="toolchaintechnotes.html"?>
|
|
||||||
|
|
||||||
<title>Toolchain Technical Notes</title>
|
|
||||||
|
|
||||||
<para>This section explains some of the rationale and technical details
|
|
||||||
behind the overall build method. It is not essential to immediately
|
|
||||||
understand everything in this section. Most of this information will be
|
|
||||||
clearer after performing an actual build. This section can be referred
|
|
||||||
to at any time during the process.</para>
|
|
||||||
|
|
||||||
<para>The overall goal of <xref linkend="chapter-temporary-tools"/> is to
|
|
||||||
produce a temporary area that contains a known-good set of tools that can be
|
|
||||||
isolated from the host system. By using <command>chroot</command>, the
|
|
||||||
commands in the remaining chapters will be contained within that environment,
|
|
||||||
ensuring a clean, trouble-free build of the target LFS system. The build
|
|
||||||
process has been designed to minimize the risks for new readers and to provide
|
|
||||||
the most educational value at the same time.</para>
|
|
||||||
|
|
||||||
<para>The build process is based on the process of
|
|
||||||
<emphasis>cross-compilation</emphasis>. Cross-compilation is normally used
|
|
||||||
for building a compiler and its toolchain for a machine different from
|
|
||||||
the one that is used for the build. This is not strictly needed for LFS,
|
|
||||||
since the machine where the new system will run is the same as the one
|
|
||||||
used for the build. But cross-compilation has the great advantage that
|
|
||||||
anything that is cross-compiled cannot depend on the host environment.</para>
|
|
||||||
|
|
||||||
<sect2 id="cross-compile" xreflabel="About Cross-Compilation">
|
|
||||||
|
|
||||||
<title>About Cross-Compilation</title>
|
|
||||||
|
|
||||||
<para>Cross-compilation involves some concepts that deserve a section on
|
|
||||||
their own. Although this section may be omitted in a first reading, it
|
|
||||||
is strongly suggested to come back to it later in order to get a full
|
|
||||||
grasp of the build process.</para>
|
|
||||||
|
|
||||||
<para>Let us first define some terms used in this context:</para>
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry><term>build</term><listitem>
|
|
||||||
<para>is the machine where we build programs. Note that this machine
|
|
||||||
is referred to as the <quote>host</quote> in other
|
|
||||||
sections.</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry><term>host</term><listitem>
|
|
||||||
<para>is the machine/system where the built programs will run. Note
|
|
||||||
that this use of <quote>host</quote> is not the same as in other
|
|
||||||
sections.</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry><term>target</term><listitem>
|
|
||||||
<para>is only used for compilers. It is the machine the compiler
|
|
||||||
produces code for. It may be different from both build and
|
|
||||||
host.</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
<para>As an example, let us imagine the following scenario: we may have a
|
|
||||||
compiler on a slow machine only, let's call the machine A, and the compiler
|
|
||||||
ccA. We may have also a fast machine (B), but with no compiler, and we may
|
|
||||||
want to produce code for a another slow machine (C). Then, to build a
|
|
||||||
compiler for machine C, we would have three stages:</para>
|
|
||||||
|
|
||||||
<informaltable align="center">
|
|
||||||
<tgroup cols="5">
|
|
||||||
<colspec colnum="1" align="center"/>
|
|
||||||
<colspec colnum="2" align="center"/>
|
|
||||||
<colspec colnum="3" align="center"/>
|
|
||||||
<colspec colnum="4" align="center"/>
|
|
||||||
<colspec colnum="5" align="left"/>
|
|
||||||
<thead>
|
|
||||||
<row><entry>Stage</entry><entry>Build</entry><entry>Host</entry>
|
|
||||||
<entry>Target</entry><entry>Action</entry></row>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<row>
|
|
||||||
<entry>1</entry><entry>A</entry><entry>A</entry><entry>B</entry>
|
|
||||||
<entry>build cross-compiler cc1 using ccA on machine A</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>2</entry><entry>A</entry><entry>B</entry><entry>B</entry>
|
|
||||||
<entry>build cross-compiler cc2 using cc1 on machine A</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>3</entry><entry>B</entry><entry>C</entry><entry>C</entry>
|
|
||||||
<entry>build compiler ccC using cc2 on machine B</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</informaltable>
|
|
||||||
|
|
||||||
<para>Then, all the other programs needed by machine C can be compiled
|
|
||||||
using cc2 on the fast machine B. Note that unless B can run programs
|
|
||||||
produced for C, there is no way to test the built programs until machine
|
|
||||||
C itself is running. For example, for testing ccC, we may want to add a
|
|
||||||
fourth stage:</para>
|
|
||||||
|
|
||||||
<informaltable align="center">
|
|
||||||
<tgroup cols="5">
|
|
||||||
<colspec colnum="1" align="center"/>
|
|
||||||
<colspec colnum="2" align="center"/>
|
|
||||||
<colspec colnum="3" align="center"/>
|
|
||||||
<colspec colnum="4" align="center"/>
|
|
||||||
<colspec colnum="5" align="left"/>
|
|
||||||
<thead>
|
|
||||||
<row><entry>Stage</entry><entry>Build</entry><entry>Host</entry>
|
|
||||||
<entry>Target</entry><entry>Action</entry></row>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<row>
|
|
||||||
<entry>4</entry><entry>C</entry><entry>C</entry><entry>C</entry>
|
|
||||||
<entry>rebuild and test ccC using itself on machine C</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</informaltable>
|
|
||||||
|
|
||||||
<para>In the example above, only cc1 and cc2 are cross-compilers, that is,
|
|
||||||
they produce code for a machine different from the one they are run on.
|
|
||||||
The other compilers ccA and ccC produce code for the machine they are run
|
|
||||||
on. Such compilers are called <emphasis>native</emphasis> compilers.</para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 id="lfs-cross">
|
|
||||||
<title>Implementation of Cross-Compilation for LFS</title>
|
|
||||||
|
|
||||||
<note>
|
|
||||||
<para>Almost all the build systems use names of the form
|
|
||||||
cpu-vendor-kernel-os referred to as the machine triplet. An astute
|
|
||||||
reader may wonder why a <quote>triplet</quote> refers to a four component
|
|
||||||
name. The reason is history: initially, three component names were enough
|
|
||||||
to designate unambiguously a machine, but with new machines and systems
|
|
||||||
appearing, that proved insufficient. The word <quote>triplet</quote>
|
|
||||||
remained. A simple way to determine your machine triplet is to run
|
|
||||||
the <command>config.guess</command>
|
|
||||||
script that comes with the source for many packages. Unpack the Binutils
|
|
||||||
sources and run the script: <userinput>./config.guess</userinput> and note
|
|
||||||
the output. For example, for a 32-bit Intel processor the
|
|
||||||
output will be <emphasis>i686-pc-linux-gnu</emphasis>. On a 64-bit
|
|
||||||
system it will be <emphasis>x86_64-pc-linux-gnu</emphasis>.</para>
|
|
||||||
|
|
||||||
<para>Also be aware of the name of the platform's dynamic linker, often
|
|
||||||
referred to as the dynamic loader (not to be confused with the standard
|
|
||||||
linker <command>ld</command> that is part of Binutils). The dynamic linker
|
|
||||||
provided by Glibc finds and loads the shared libraries needed by a
|
|
||||||
program, prepares the program to run, and then runs it. The name of the
|
|
||||||
dynamic linker for a 32-bit Intel machine will be <filename
|
|
||||||
class="libraryfile">ld-linux.so.2</filename> (<filename
|
|
||||||
class="libraryfile">ld-linux-x86-64.so.2</filename> for 64-bit systems). A
|
|
||||||
sure-fire way to determine the name of the dynamic linker is to inspect a
|
|
||||||
random binary from the host system by running: <userinput>readelf -l
|
|
||||||
<name of binary> | grep interpreter</userinput> and noting the
|
|
||||||
output. The authoritative reference covering all platforms is in the
|
|
||||||
<filename>shlib-versions</filename> file in the root of the Glibc source
|
|
||||||
tree.</para>
|
|
||||||
</note>
|
|
||||||
|
|
||||||
<para>In order to fake a cross compilation, the name of the host triplet
|
|
||||||
is slightly adjusted by changing the "vendor" field in the
|
|
||||||
<envar>LFS_TGT</envar> variable. We also use the
|
|
||||||
<parameter>--with-sysroot</parameter> when building the cross linker and
|
|
||||||
cross compiler, to tell them where to find the needed host files. This
|
|
||||||
ensures none of the other programs built in <xref
|
|
||||||
linkend="chapter-temporary-tools"/> can link to libraries on the build
|
|
||||||
machine. Only two stages are mandatory, and one more for tests:</para>
|
|
||||||
|
|
||||||
<informaltable align="center">
|
|
||||||
<tgroup cols="5">
|
|
||||||
<colspec colnum="1" align="center"/>
|
|
||||||
<colspec colnum="2" align="center"/>
|
|
||||||
<colspec colnum="3" align="center"/>
|
|
||||||
<colspec colnum="4" align="center"/>
|
|
||||||
<colspec colnum="5" align="left"/>
|
|
||||||
<thead>
|
|
||||||
<row><entry>Stage</entry><entry>Build</entry><entry>Host</entry>
|
|
||||||
<entry>Target</entry><entry>Action</entry></row>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<row>
|
|
||||||
<entry>1</entry><entry>pc</entry><entry>pc</entry><entry>lfs</entry>
|
|
||||||
<entry>build cross-compiler cc1 using cc-pc on pc</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>2</entry><entry>pc</entry><entry>lfs</entry><entry>lfs</entry>
|
|
||||||
<entry>build compiler cc-lfs using cc1 on pc</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>3</entry><entry>lfs</entry><entry>lfs</entry><entry>lfs</entry>
|
|
||||||
<entry>rebuild and test cc-lfs using itself on lfs</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</informaltable>
|
|
||||||
|
|
||||||
<para>In the above table, <quote>on pc</quote> means the commands are run
|
|
||||||
on a machine using the already installed distribution. <quote>On
|
|
||||||
lfs</quote> means the commands are run in a chrooted environment.</para>
|
|
||||||
|
|
||||||
<para>Now, there is more about cross-compiling: the C language is not
|
|
||||||
just a compiler, but also defines a standard library. In this book, the
|
|
||||||
GNU C library, named glibc, is used. This library must
|
|
||||||
be compiled for the lfs machine, that is, using the cross compiler cc1.
|
|
||||||
But the compiler itself uses an internal library implementing complex
|
|
||||||
instructions not available in the assembler instruction set. This
|
|
||||||
internal library is named libgcc, and must be linked to the glibc
|
|
||||||
library to be fully functional! Furthermore, the standard library for
|
|
||||||
C++ (libstdc++) also needs being linked to glibc. The solution
|
|
||||||
to this chicken and egg problem is to first build a degraded cc1+libgcc,
|
|
||||||
lacking some fuctionalities such as threads and exception handling, then
|
|
||||||
build glibc using this degraded compiler (glibc itself is not
|
|
||||||
degraded), then build libstdc++. But this last library will lack the
|
|
||||||
same functionalities as libgcc.</para>
|
|
||||||
|
|
||||||
<para>This is not the end of the story: the conclusion of the preceding
|
|
||||||
paragraph is that cc1 is unable to build a fully functional libstdc++, but
|
|
||||||
this is the only compiler available for building the C/C++ libraries
|
|
||||||
during stage 2! Of course, the compiler built during stage 2, cc-lfs,
|
|
||||||
would be able to build those libraries, but (i) the build system of
|
|
||||||
gcc does not know that it is usable on pc, and (ii) using it on pc
|
|
||||||
would be at risk of linking to the pc libraries, since cc-lfs is a native
|
|
||||||
compiler. So we have to build libstdc++ later, in chroot.</para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 id="other-details">
|
|
||||||
|
|
||||||
<title>Other procedural details</title>
|
|
||||||
|
|
||||||
<para>The cross-compiler will be installed in a separate <filename
|
|
||||||
class="directory">$LFS/tools</filename> directory, since it will not
|
|
||||||
be part of the final system.</para>
|
|
||||||
|
|
||||||
<para>Binutils is installed first because the <command>configure</command>
|
|
||||||
runs of both GCC and Glibc perform various feature tests on the assembler
|
|
||||||
and linker to determine which software features to enable or disable. This
|
|
||||||
is more important than one might first realize. An incorrectly configured
|
|
||||||
GCC or Glibc can result in a subtly broken toolchain, where the impact of
|
|
||||||
such breakage might not show up until near the end of the build of an
|
|
||||||
entire distribution. A test suite failure will usually highlight this error
|
|
||||||
before too much additional work is performed.</para>
|
|
||||||
|
|
||||||
<para>Binutils installs its assembler and linker in two locations,
|
|
||||||
<filename class="directory">$LFS/tools/bin</filename> and <filename
|
|
||||||
class="directory">$LFS/tools/$LFS_TGT/bin</filename>. The tools in one
|
|
||||||
location are hard linked to the other. An important facet of the linker is
|
|
||||||
its library search order. Detailed information can be obtained from
|
|
||||||
<command>ld</command> by passing it the <parameter>--verbose</parameter>
|
|
||||||
flag. For example, <command>$LFS_TGT-ld --verbose | grep SEARCH</command>
|
|
||||||
will illustrate the current search paths and their order. It shows which
|
|
||||||
files are linked by <command>ld</command> by compiling a dummy program and
|
|
||||||
passing the <parameter>--verbose</parameter> switch to the linker. For
|
|
||||||
example,
|
|
||||||
<command>$LFS_TGT-gcc dummy.c -Wl,--verbose 2>&1 | grep succeeded</command>
|
|
||||||
will show all the files successfully opened during the linking.</para>
|
|
||||||
|
|
||||||
<para>The next package installed is GCC. An example of what can be
|
|
||||||
seen during its run of <command>configure</command> is:</para>
|
|
||||||
|
|
||||||
<screen><computeroutput>checking what assembler to use... /mnt/lfs/tools/i686-lfs-linux-gnu/bin/as
|
|
||||||
checking what linker to use... /mnt/lfs/tools/i686-lfs-linux-gnu/bin/ld</computeroutput></screen>
|
|
||||||
|
|
||||||
<para>This is important for the reasons mentioned above. It also
|
|
||||||
demonstrates that GCC's configure script does not search the PATH
|
|
||||||
directories to find which tools to use. However, during the actual
|
|
||||||
operation of <command>gcc</command> itself, the same search paths are not
|
|
||||||
necessarily used. To find out which standard linker <command>gcc</command>
|
|
||||||
will use, run: <command>$LFS_TGT-gcc -print-prog-name=ld</command>.</para>
|
|
||||||
|
|
||||||
<para>Detailed information can be obtained from <command>gcc</command> by
|
|
||||||
passing it the <parameter>-v</parameter> command line option while compiling
|
|
||||||
a dummy program. For example, <command>gcc -v dummy.c</command> will show
|
|
||||||
detailed information about the preprocessor, compilation, and assembly
|
|
||||||
stages, including <command>gcc</command>'s included search paths and their
|
|
||||||
order.</para>
|
|
||||||
|
|
||||||
<para>Next installed are sanitized Linux API headers. These allow the
|
|
||||||
standard C library (Glibc) to interface with features that the Linux
|
|
||||||
kernel will provide.</para>
|
|
||||||
|
|
||||||
<para>The next package installed is Glibc. The most important
|
|
||||||
considerations for building Glibc are the compiler, binary tools, and
|
|
||||||
kernel headers. The compiler is generally not an issue since Glibc will
|
|
||||||
always use the compiler relating to the <parameter>--host</parameter>
|
|
||||||
parameter passed to its configure script; e.g. in our case, the compiler
|
|
||||||
will be <command>$LFS_TGT-gcc</command>. The binary tools and kernel
|
|
||||||
headers can be a bit more complicated. Therefore, take no risks and use
|
|
||||||
the available configure switches to enforce the correct selections. After
|
|
||||||
the run of <command>configure</command>, check the contents of the
|
|
||||||
<filename>config.make</filename> file in the <filename
|
|
||||||
class="directory">build</filename> directory for all important details.
|
|
||||||
Note the use of <parameter>CC="$LFS_TGT-gcc"</parameter> (with
|
|
||||||
<envar>$LFS_TGT</envar> expanded) to control which binary tools are used
|
|
||||||
and the use of the <parameter>-nostdinc</parameter> and
|
|
||||||
<parameter>-isystem</parameter> flags to control the compiler's include
|
|
||||||
search path. These items highlight an important aspect of the Glibc
|
|
||||||
package—it is very self-sufficient in terms of its build machinery
|
|
||||||
and generally does not rely on toolchain defaults.</para>
|
|
||||||
|
|
||||||
<para>As said above, the standard C++ library is compiled next, followed
|
|
||||||
by all the programs that need themselves to be built. The install step
|
|
||||||
uses the <envar>DESTDIR</envar> variable to have the programs land into
|
|
||||||
the LFS filesystem.</para>
|
|
||||||
|
|
||||||
<para>Then the native lfs compiler is built. First Binutils Pass 2, with
|
|
||||||
the same <envar>DESTDIR</envar> install as the other programs, then the
|
|
||||||
second pass of GCC, omitting libstdc++ and other non-important libraries.
|
|
||||||
Due to some weird logic in GCC's configure script,
|
|
||||||
<envar>CC_FOR_TARGET</envar> ends up as <command>cc</command> when host
|
|
||||||
is the same as target, but is different from build. This is why
|
|
||||||
<parameter>CC_FOR_TARGET=$LFS_TGT-gcc</parameter> is put explicitely into
|
|
||||||
the configure options.</para>
|
|
||||||
|
|
||||||
<para>Upon entering the chroot environment in <xref
|
|
||||||
linkend="chapter-building-system"/>, the first task is to install
|
|
||||||
libstdc++. Then temporary installations of programs needed for the proper
|
|
||||||
operation of the toolchain are performed. Programs needed for testing
|
|
||||||
other programs are also built. From this point onwards, the
|
|
||||||
core toolchain is self-contained and self-hosted. In the remainder of
|
|
||||||
the <xref linkend="chapter-building-system"/>, final versions of all the
|
|
||||||
packages needed for a fully functional system are built, tested and
|
|
||||||
installed.</para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
@ -1,77 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
||||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
|
||||||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
|
||||||
%general-entities;
|
|
||||||
]>
|
|
||||||
|
|
||||||
<sect1 id="ch-tools-xz" role="wrap">
|
|
||||||
<?dbhtml filename="xz.html"?>
|
|
||||||
|
|
||||||
<sect1info condition="script">
|
|
||||||
<productname>xz</productname>
|
|
||||||
<productnumber>&xz-version;</productnumber>
|
|
||||||
<address>&xz-url;</address>
|
|
||||||
</sect1info>
|
|
||||||
|
|
||||||
<title>Xz-&xz-version;</title>
|
|
||||||
|
|
||||||
<indexterm zone="ch-tools-xz">
|
|
||||||
<primary sortas="a-xz">Xz</primary>
|
|
||||||
<secondary>tools</secondary>
|
|
||||||
</indexterm>
|
|
||||||
|
|
||||||
<sect2 role="package">
|
|
||||||
<title/>
|
|
||||||
|
|
||||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
href="../chapter08/xz.xml"
|
|
||||||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
|
||||||
|
|
||||||
<segmentedlist>
|
|
||||||
<segtitle>&buildtime;</segtitle>
|
|
||||||
<segtitle>&diskspace;</segtitle>
|
|
||||||
|
|
||||||
<seglistitem>
|
|
||||||
<seg>&xz-ch5-sbu;</seg>
|
|
||||||
<seg>&xz-ch5-du;</seg>
|
|
||||||
</seglistitem>
|
|
||||||
</segmentedlist>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="installation">
|
|
||||||
<title>Installation of Xz</title>
|
|
||||||
|
|
||||||
<para>Prepare Xz for compilation:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="configure">./configure --prefix=/usr \
|
|
||||||
--host=$LFS_TGT \
|
|
||||||
--build=$(build-aux/config.guess) \
|
|
||||||
--disable-static \
|
|
||||||
--docdir=/usr/share/doc/xz-&xz-version;</userinput></screen>
|
|
||||||
|
|
||||||
<para>Compile the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="make">make</userinput></screen>
|
|
||||||
|
|
||||||
<para>Install the package:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
|
||||||
|
|
||||||
<para>Make sure that all essential files are in the correct directory:</para>
|
|
||||||
|
|
||||||
<screen><userinput remap="install">mv -v $LFS/usr/bin/{lzma,unlzma,lzcat,xz,unxz,xzcat} $LFS/bin
|
|
||||||
mv -v $LFS/usr/lib/liblzma.so.* $LFS/lib
|
|
||||||
ln -svf ../../lib/$(readlink $LFS/usr/lib/liblzma.so) $LFS/usr/lib/liblzma.so</userinput></screen>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
<sect2 role="content">
|
|
||||||
<title/>
|
|
||||||
<para>Details on this package are located in<!-- TODO
|
|
||||||
<xref linkend="contents-xz" role="."/> --></para>
|
|
||||||
|
|
||||||
</sect2>
|
|
||||||
|
|
||||||
</sect1>
|
|
Loading…
Reference in New Issue
Block a user