source: chapter05/glibc.xml@ 73d91ac

xry111/arm64
Last change on this file since 73d91ac was 73d91ac, checked in by Xi Ruoyao <xry111@…>, 7 months ago

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

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