source: chapter06/binutils-pass2.xml@ 426913e

11.1 11.1-rc1 11.2 11.2-rc1 arm multilib s6-init trunk xry111/arm64 xry111/clfs-ng xry111/lfs-next xry111/pip3 xry111/queue-11.3 xry111/rust-wip-20221008
Last change on this file since 426913e was 426913e, checked in by Xi Ruoyao <xry111@…>, 10 months ago

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.

  • Property mode set to 100644
File size: 3.2 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../general.ent">
5 %general-entities;
6]>
7
8<sect1 id="ch-tools-binutils-pass2" role="wrap">
9 <?dbhtml filename="binutils-pass2.html"?>
10
11 <sect1info condition="script">
12 <productname>binutils-pass2</productname>
13 <productnumber>&binutils-version;</productnumber>
14 <address>&binutils-url;</address>
15 </sect1info>
16
17 <title>Binutils-&binutils-version; - Pass 2</title>
18
19 <indexterm zone="ch-tools-binutils-pass2">
20 <primary sortas="a-Binutils">Binutils</primary>
21 <secondary>tools, pass 2</secondary>
22 </indexterm>
23
24 <sect2 role="package">
25 <title/>
26
27 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
28 href="../chapter08/binutils.xml"
29 xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
30
31 <segmentedlist>
32 <segtitle>&buildtime;</segtitle>
33 <segtitle>&diskspace;</segtitle>
34
35 <seglistitem>
36 <seg>&binutils-tmpp2-sbu;</seg>
37 <seg>&binutils-tmpp2-du;</seg>
38 </seglistitem>
39 </segmentedlist>
40
41 </sect2>
42
43 <sect2 role="installation">
44 <title>Installation of Binutils</title>
45
46 <!-- Don't remove this until Binutils upstream updates the libtool
47 copy. On some host distros the issue doesn't show up. -->
48 <para>Binutils ships an outdated libtool copy in the tarball. It lacks
49 sysroot support so the produced binaries will be mistakenly linked to
50 libraries from the host distro. Workaround this issue:</para>
51
52<screen><userinput remap="pre">sed '6009s/$add_dir//' -i ltmain.sh</userinput></screen>
53
54 <para>Create a separate build directory again:</para>
55
56<screen><userinput remap="pre">mkdir -v build
57cd build</userinput></screen>
58
59 <para>Prepare Binutils for compilation:</para>
60
61<screen><userinput remap="configure">../configure \
62 --prefix=/usr \
63 --build=$(../config.guess) \
64 --host=$LFS_TGT \
65 --disable-nls \
66 --enable-shared \
67 --disable-werror \
68 --enable-64-bit-bfd</userinput></screen>
69
70 <variablelist>
71 <title>The meaning of the new configure options:</title>
72
73 <varlistentry>
74 <term><parameter>--enable-shared</parameter></term>
75 <listitem>
76 <para>Builds <filename
77 class="libraryfile">libbfd</filename> as a shared library.</para>
78 </listitem>
79 </varlistentry>
80
81
82 <varlistentry>
83 <term><parameter>--enable-64-bit-bfd</parameter></term>
84 <listitem>
85 <para>Enables 64-bit support (on hosts with narrower word sizes).
86 May not be needed on 64-bit systems, but does no harm.</para>
87 </listitem>
88 </varlistentry>
89
90 </variablelist>
91
92 <para>Compile the package:</para>
93
94<screen><userinput remap="make">make</userinput></screen>
95
96 <para>Install the package:</para>
97
98<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
99
100 </sect2>
101
102 <sect2 role="content">
103 <title/>
104
105 <para>Details on this package are located in
106 <xref linkend="contents-binutils" role="."/></para>
107
108 </sect2>
109
110</sect1>
Note: See TracBrowser for help on using the repository browser.