mirror of
https://git.linuxfromscratch.org/lfs.git
synced 2025-03-10 07:59:38 +00:00
I've proposed a backport of the change to GCC 13.3 but no response yet. But even if the proposal is rejected I'd still have no choice but backporting downstream. So just do it.
196 lines
7.4 KiB
XML
196 lines
7.4 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>
|
|
-->
|
|
|
|
<!-- https://gcc.gnu.org/r14-4674 -->
|
|
<para>Again, fix an issue producing illegal instructions in linked
|
|
executables and shared libraries with GCC &gcc-version; and
|
|
Binutils-2.42:</para>
|
|
|
|
<screen><userinput remap='pre'>sed -e '/ASM_OUTPUT_ALIGN_WITH_NOP/,+1d' \
|
|
-i gcc/config/loongarch/loongarch.h</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>Set the default directory name for
|
|
64-bit libraries to <quote>lib</quote>:</para>
|
|
|
|
<screen><userinput remap="pre">sed -e 's/lib64/lib/' \
|
|
-i.orig gcc/config/loongarch/{t-linux,linux.h}</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. This switch is necessary
|
|
to build GCC without
|
|
<systemitem class='library'>libcrypt</systemitem> installed for
|
|
the target. In <xref linkend='ch-tools-gcc-pass1'/> it was
|
|
implied by <parameter>--disable-libstdcxx</parameter>, but now we
|
|
have to 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>
|