binutils-pass2: workaround "binaries link to host libraries" issue

A very old libtool copy (2009-11-29) is shipped in binutils tarball.  It
does not support sysroot, so the cross-built binutils binaries may link
to libraries from the host distro, if certain libraries are available.

The ideal solution should be updating libtool, as libtool-2.4.6 (in LFS)
has sysroot support.  However, updating libtool for binutils is not
trivial: it would require to rerun autoconf and binutils building system
sticks to autoconf-2.69.  Another issue is the sysroot support for
libtool has introduced a configure option "--with-sysroot", which
conflicts with an already existing option with the same name in
GCC and binutils building system (we are using the GCC/binutils version
of --with-sysroot in chapter 5).

GCC building system has --with-build-sysroot (we are using this for GCC
pass 2) for this issue.  Binutils copied GCC building system, but it
does not respect --with-build-sysroot.

So for now we just edit libtool code to prevent "-L/usr/lib" in
$LFS_TGT_gcc command line.  It should fix the issue about host libiberty
(reported in #lfs-support) as well, but it still need to be confirmed by
someone having such a host.

Tested with a jhalfs run on LFS.
This commit is contained in:
Xi Ruoyao 2022-02-10 20:13:21 +08:00
parent b35ab48b26
commit 426913ea08
No known key found for this signature in database
GPG Key ID: D95E4716CCBB34DC
4 changed files with 21 additions and 74 deletions

View File

@ -39,6 +39,17 @@
<listitem revision="sysv"> or <listitem revision="systemd"> as <listitem revision="sysv"> or <listitem revision="systemd"> as
appropriate for the entry or if needed the entire day's listitem. appropriate for the entry or if needed the entire day's listitem.
--> -->
<listitem>
<para>2022-02-10</para>
<itemizedlist>
<listitem>
<para>[xry111] - Workaround the issue causing binaries link to
libraries from the host distro for pass 2 binutils. It's now
unnecessary to build zlib in chapter 6.</para>
</listitem>
</itemizedlist>
</listitem>
<listitem> <listitem>
<para>2022-02-09</para> <para>2022-02-09</para>
<itemizedlist> <itemizedlist>

View File

@ -43,6 +43,14 @@
<sect2 role="installation"> <sect2 role="installation">
<title>Installation of Binutils</title> <title>Installation of Binutils</title>
<!-- Don't remove this until Binutils upstream updates the libtool
copy. On some host distros the issue doesn't show up. -->
<para>Binutils ships an outdated libtool copy in the tarball. It lacks
sysroot support so the produced binaries will be mistakenly linked to
libraries from the host distro. Workaround this issue:</para>
<screen><userinput remap="pre">sed '6009s/$add_dir//' -i ltmain.sh</userinput></screen>
<para>Create a separate build directory again:</para> <para>Create a separate build directory again:</para>
<screen><userinput remap="pre">mkdir -v build <screen><userinput remap="pre">mkdir -v build
@ -85,13 +93,9 @@ cd build</userinput></screen>
<screen><userinput remap="make">make</userinput></screen> <screen><userinput remap="make">make</userinput></screen>
<para>Install the package, and <para>Install the package:</para>
workaround an issue causing
<filename class="libraryfile">libctf.so</filename>
to link against zlib from the host distribution:</para>
<screen><userinput remap="install">make DESTDIR=$LFS install <screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
install -vm755 libctf/.libs/libctf.so.0.0.0 $LFS/usr/lib</userinput></screen>
</sect2> </sect2>

View File

@ -28,7 +28,6 @@
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="sed.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="sed.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="tar.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="tar.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="xz.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="xz.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="zlib.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="binutils-pass2.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="binutils-pass2.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gcc-pass2.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gcc-pass2.xml"/>

View File

@ -1,67 +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-zlib" role="wrap">
<?dbhtml filename="zlib.html"?>
<sect1info condition="script">
<productname>zlib</productname>
<productnumber>&zlib-version;</productnumber>
<address>&zlib-url;</address>
</sect1info>
<title>Zlib-&zlib-version;</title>
<indexterm zone="ch-tools-zlib">
<primary sortas="a-Zlib">Zlib</primary>
</indexterm>
<sect2 role="package">
<title/>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="../chapter08/zlib.xml"
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
<segtitle>&diskspace;</segtitle>
<seglistitem>
<seg>&zlib-tmp-sbu;</seg>
<seg>&zlib-tmp-du;</seg>
</seglistitem>
</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Zlib</title>
<para>Prepare Zlib for compilation:</para>
<screen><userinput remap="configure">./configure --prefix=/usr</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-zlib" role="."/>
</para>
</sect2>
</sect1>