mirror of
https://git.linuxfromscratch.org/lfs.git
synced 2025-01-18 21:17:38 +00:00
87e5e08d34
GCC 14 libsanitizer no longer depends on crypt.h. But let's keep this option for reducing build time, just update the explanation. Also remove libxcrypt from GCC depedency list.
189 lines
7.0 KiB
XML
189 lines
7.0 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!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" xreflabel="gcc-pass2">
|
|
<?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-tmpp2-sbu;</seg>
|
|
<seg>&gcc-tmpp2-du;</seg>
|
|
</seglistitem>
|
|
</segmentedlist>
|
|
|
|
</sect2>
|
|
|
|
<sect2 role="installation">
|
|
<title>Installation of GCC</title>
|
|
<!--
|
|
<para>First fix a problem with the latest version of glibc:</para>
|
|
|
|
<screen><userinput remap="pre">patch -Np1 -i ../&gcc-upstream-fixes-patch;</userinput></screen>
|
|
-->
|
|
<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 directories:</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>Override the building rule of libgcc and libstdc++ headers, to
|
|
allow building these libraries with POSIX threads support:</para>
|
|
|
|
<screen><userinput remap="pre">sed '/thread_header =/s/@.*@/gthr-posix.h/' \
|
|
-i libgcc/Makefile.in libstdc++-v3/include/Makefile.in</userinput></screen>
|
|
|
|
<para>Create a separate build directory again:</para>
|
|
|
|
<screen><userinput remap="pre">mkdir -v build
|
|
cd build</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 \
|
|
--target=$LFS_TGT \
|
|
LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc \
|
|
--prefix=/usr \
|
|
--with-build-sysroot=$LFS \
|
|
--enable-default-pie \
|
|
--enable-default-ssp \
|
|
--disable-nls \
|
|
--disable-multilib \
|
|
--disable-libatomic \
|
|
--disable-libgomp \
|
|
--disable-libquadmath \
|
|
--disable-libsanitizer \
|
|
--disable-libssp \
|
|
--disable-libvtv \
|
|
--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 for GCC uses
|
|
other tools, which are not aware of this location. This switch is
|
|
needed so those tools will find the needed files in <filename
|
|
class="directory">$LFS</filename>, and not on the host.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><parameter>--target=$LFS_TGT</parameter></term>
|
|
<listitem>
|
|
<para>We are cross-compiling GCC, so it's impossible to build
|
|
target libraries (<filename class="libraryfile">libgcc</filename>
|
|
and <filename class="libraryfile">libstdc++</filename>) with the
|
|
previously compiled GCC binaries—those binaries won't run on the
|
|
host. The GCC build system will attempt to use the host's
|
|
C and C++ compilers as a workaround by default.
|
|
Building the GCC target libraries with a different
|
|
version of GCC is not supported, so using the host's compilers may cause
|
|
the build to fail. This parameter ensures the libraries are built by GCC
|
|
pass 1.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><parameter>LDFLAGS_FOR_TARGET=...</parameter></term>
|
|
<listitem>
|
|
<para>Allow <filename class="libraryfile">libstdc++</filename> to
|
|
use the shared <filename class="libraryfile">libgcc</filename> being
|
|
built in this pass, instead of the static version that was built in GCC
|
|
pass 1. This is necessary to support C++ exception
|
|
handling.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><parameter>--disable-libsanitizer</parameter></term>
|
|
<listitem>
|
|
<para>Disable GCC sanitizer runtime libraries. They are not
|
|
needed for the temporary installation. In
|
|
<xref linkend='ch-tools-gcc-pass1'/> it was implied by
|
|
<parameter>--disable-libstdcxx</parameter>, and now we can
|
|
explicitly pass 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>
|
|
|
|
<para>As a finishing touch, create a utility 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>
|