source: chapter05/glibc.xml@ 6586901

xry111/arm64 xry111/arm64-12.0
Last change on this file since 6586901 was 6586901, checked in by Xi Ruoyao <xry111@…>, 21 months ago

Merge remote-tracking branch 'origin/trunk' into xry111/arm64

  • Property mode set to 100644
File size: 8.3 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-glibc" role="wrap">
9 <?dbhtml filename="glibc.html"?>
10
11 <sect1info condition="script">
12 <productname>glibc</productname>
13 <productnumber>&glibc-version;</productnumber>
14 <address>&glibc-url;</address>
15 </sect1info>
16
17 <title>Glibc-&glibc-version;</title>
18
19 <indexterm zone="ch-tools-glibc">
20 <primary sortas="a-Glibc">Glibc</primary>
21 <secondary>tools</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/glibc.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>&glibc-tmp-sbu;</seg>
37 <seg>&glibc-tmp-du;</seg>
38 </seglistitem>
39 </segmentedlist>
40
41 </sect2>
42
43 <sect2 role="installation">
44 <title>Installation of Glibc</title>
45
46 <para>Fix an issue building Glibc with parallel jobs and make-4.4
47 or later:</para>
48
49<screen><userinput remap="pre">sed '/MAKEFLAGS :=/s/)r/) -r/' -i Makerules</userinput></screen>
50
51 <para>Some of the Glibc programs use the non-FHS-compliant
52 <filename class="directory">/var/db</filename> directory to store their
53 runtime data. Apply the following patch to make such programs store their
54 runtime data in the FHS-compliant locations:</para>
55
56<screen><userinput remap="pre">patch -Np1 -i ../glibc-&glibc-version;-fhs-1.patch</userinput></screen>
57
58 <para>The Glibc documentation recommends building Glibc
59 in a dedicated build directory:</para>
60
61<screen><userinput remap="pre">mkdir -v build
62cd build</userinput></screen>
63
64 <para>Ensure that the <command>ldconfig</command> and <command>sln</command>
65 utilities are installed into
66 <filename class="directory">/usr/sbin</filename>:</para>
67
68<screen><userinput remap="pre">echo "rootsbindir=/usr/sbin" &gt; configparms</userinput></screen>
69
70 <para>Next, prepare Glibc for compilation:</para>
71
72<screen><userinput remap="configure">../configure \
73 --prefix=/usr \
74 --host=$LFS_TGT \
75 --build=$(../scripts/config.guess) \
76 --enable-kernel=&min-kernel; \
77 --with-headers=$LFS/usr/include \
78 libc_cv_slibdir=/usr/lib</userinput></screen>
79
80 <variablelist>
81 <title>The meaning of the configure options:</title>
82
83 <varlistentry>
84 <term><parameter>--host=$LFS_TGT, --build=$(../scripts/config.guess)</parameter></term>
85 <listitem>
86 <para>The combined effect of these switches is that Glibc's build system
87 configures itself to be cross-compiled, using the cross-linker and
88 cross-compiler in <filename class="directory">$LFS/tools</filename>.</para>
89 </listitem>
90 </varlistentry>
91
92 <varlistentry>
93 <term><parameter>--enable-kernel=&min-kernel;</parameter></term>
94 <listitem>
95 <para>This tells Glibc to compile the library with support
96 for &min-kernel; and later Linux kernels. Workarounds for older
97 kernels are not enabled.</para>
98 </listitem>
99 </varlistentry>
100
101 <varlistentry>
102 <term><parameter>--with-headers=$LFS/usr/include</parameter></term>
103 <listitem>
104 <para>This tells Glibc to compile itself against the headers
105 recently installed to the $LFS/usr/include directory, so that
106 it knows exactly what features the kernel has and can optimize
107 itself accordingly.</para>
108 </listitem>
109 </varlistentry>
110
111 <varlistentry>
112 <term><parameter>libc_cv_slibdir=/usr/lib</parameter></term>
113 <listitem>
114 <para>This ensures that the library is installed in /usr/lib instead
115 of the default /lib64 on 64-bit machines.</para>
116 </listitem>
117 </varlistentry>
118
119 </variablelist>
120
121 <para>During this stage the following warning might appear:</para>
122
123 <blockquote>
124<screen><computeroutput>configure: WARNING:
125*** These auxiliary programs are missing or
126*** incompatible versions: msgfmt
127*** some features will be disabled.
128*** Check the INSTALL file for required versions.</computeroutput></screen>
129 </blockquote>
130
131 <para>The missing or incompatible <command>msgfmt</command> program is
132 generally harmless. This <command>msgfmt</command> program is part of the
133 Gettext package, which the host distribution should provide.</para>
134
135 <note><para>There have been reports that this package may fail when
136 building as a "parallel make". If that occurs, rerun the make command
137 with the "-j1" option.</para></note>
138
139 <para>Compile the package:</para>
140
141<screen><userinput remap="make">make</userinput></screen>
142
143 <para>Install the package:</para>
144
145 <warning><para>If <envar>LFS</envar> is not properly set, and despite the
146 recommendations, you are building as
147 <systemitem class="username">root</systemitem>, the next command will
148 install the newly built Glibc to your host system, which will almost
149 certainly render it unusable. So double-check that the environment is
150 correctly set, and that you are not &root;, before running the following command.</para></warning>
151
152<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
153
154 <variablelist>
155 <title>The meaning of the <command>make install</command> option:</title>
156
157 <varlistentry>
158 <term><parameter>DESTDIR=$LFS</parameter></term>
159 <listitem>
160 <para>The <envar>DESTDIR</envar> make variable is used by almost all
161 packages to define the location where the package should be
162 installed. If it is not set, it defaults to the root (<filename
163 class="directory">/</filename>) directory. Here we specify that
164 the package is installed in <filename class="directory">$LFS
165 </filename>, which will become the root directory in <xref linkend=
166 "ch-tools-chroot"/>.</para>
167 </listitem>
168 </varlistentry>
169
170 </variablelist>
171
172 <para>Fix a hard coded path to the executable loader in the
173 <command>ldd</command> script:</para>
174
175<screen><userinput remap="install">sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd</userinput></screen>
176
177 <caution>
178 <para>At this point, it is imperative to stop and ensure that the basic
179 functions (compiling and linking) of the new toolchain are working as
180 expected. To perform a sanity check, run the following commands:</para>
181
182<screen><userinput>echo 'int main(){}' | $LFS_TGT-gcc -xc -
183readelf -l a.out | grep ld-linux</userinput></screen>
184
185 <para>If everything is working correctly, there should be no errors,
186 and the output of the last command will be of the form:</para>
187
188<screen><computeroutput>[Requesting program interpreter: /lib/ld-linux-aarch64.so.1]</computeroutput></screen>
189
190 <para>Note that for big-endian machines, the interpreter name will be
191 <filename>/lib/ld-linux-aarch64_be.so.1</filename>.</para>
192
193 <para>If the output is not as shown above, or there is no output at all,
194 then something is wrong. Investigate and retrace the steps to find out
195 where the problem is and correct it. This issue must be resolved before
196 continuing.</para>
197
198 <para>Once all is well, clean up the test file:</para>
199
200<screen><userinput>rm -v a.out</userinput></screen>
201
202 </caution>
203
204 <note><para>Building the packages in the next chapter will serve as an
205 additional check that the toolchain has been built properly. If some
206 package, especially Binutils-pass2 or GCC-pass2, fails to build, it is
207 an indication that something has gone wrong with the
208 preceding Binutils, GCC, or Glibc installations.</para></note>
209
210 <para>Now that our cross-toolchain is complete, finalize the installation
211 of the limits.h header. To do this, run a utility provided by the GCC
212 developers:</para>
213
214<screen><userinput>$LFS/tools/libexec/gcc/$LFS_TGT/&gcc-version;/install-tools/mkheaders</userinput></screen>
215
216 </sect2>
217
218 <sect2 role="content">
219 <title/>
220
221 <para>Details on this package are located in
222 <xref linkend="contents-glibc" role="."/></para>
223
224 </sect2>
225
226</sect1>
Note: See TracBrowser for help on using the repository browser.