source: chapter05/glibc.xml@ 8778c71

multilib
Last change on this file since 8778c71 was 8778c71, checked in by Thomas Trepl <thomas@…>, 3 weeks ago

Fix double-dash

  • Property mode set to 100644
File size: 15.4 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
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>First, create a symbolic link for LSB compliance. Additionally,
47 for x86_64, create a compatibility symbolic link required for proper
48 operation of the dynamic library loader:</para>
49
50<screen arch="default"><userinput remap="pre">case $(uname -m) in
51 i?86) ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
52 ;;
53 x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
54 ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
55 ;;
56esac</userinput></screen>
57<!-- no ld-linux.so.2 here as multilib is based on x86_64, not on i686 -->
58<screen arch="ml_32,ml_x32,ml_all"><userinput remap="pre">ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
59ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3</userinput></screen>
60
61 <note>
62 <para>
63 The above command is correct. The <command>ln</command> command has
64 several syntactic versions, so be sure to check
65 <command>info coreutils ln</command> and <ulink role='man'
66 url='&man;ln.1'>ln(1)</ulink> before reporting what may appear to be
67 an error.
68 </para>
69 </note>
70
71 <para>Some of the Glibc programs use the non-FHS-compliant
72 <filename class="directory">/var/db</filename> directory to store their
73 runtime data. Apply the following patch to make such programs store their
74 runtime data in the FHS-compliant locations:</para>
75
76<screen><userinput remap="pre">patch -Np1 -i ../glibc-&glibc-version;-fhs-1.patch</userinput></screen>
77
78 <para>The Glibc documentation recommends building Glibc
79 in a dedicated build directory:</para>
80
81<screen><userinput remap="pre">mkdir -v build
82cd build</userinput></screen>
83
84 <para>Ensure that the <command>ldconfig</command> and <command>sln</command>
85 utilities are installed into
86 <filename class="directory">/usr/sbin</filename>:</para>
87
88<screen><userinput remap="pre">echo "rootsbindir=/usr/sbin" &gt; configparms</userinput></screen>
89
90 <para>Next, prepare Glibc for compilation:</para>
91
92<screen><userinput remap="configure">../configure \
93 --prefix=/usr \
94 --host=$LFS_TGT \
95 --build=$(../scripts/config.guess) \
96 --enable-kernel=&min-kernel; \
97 --with-headers=$LFS/usr/include \
98 --disable-nscd \
99 libc_cv_slibdir=/usr/lib</userinput></screen>
100<!--
101<screen arch="default"><userinput remap="configure">../configure \
102 - -prefix=/usr \
103 - -host=$LFS_TGT \
104 - -build=$(../scripts/config.guess) \
105 - -enable-kernel=&min-kernel; \
106 - -with-headers=$LFS/usr/include \
107 - -disable-nscd \
108 libc_cv_slibdir=/usr/lib</userinput></screen>
109<screen arch="ml_32,ml_x32,ml_all"><userinput remap="configure">../configure \
110 - -prefix=/usr \
111 - -host=$LFS_TGT \
112 - -build=$(../scripts/config.guess) \
113 - -enable-kernel=&min-kernel; \
114 - -with-headers=$LFS/usr/include \
115 - -disable-nscd \
116 libc_cv_slibdir=/usr/lib</userinput></screen>
117-->
118
119 <variablelist>
120 <title>The meaning of the configure options:</title>
121
122 <varlistentry>
123 <term><parameter>--host=$LFS_TGT, --build=$(../scripts/config.guess)</parameter></term>
124 <listitem>
125 <para>The combined effect of these switches is that Glibc's build system
126 configures itself to be cross-compiled, using the cross-linker and
127 cross-compiler in <filename class="directory">$LFS/tools</filename>.</para>
128 </listitem>
129 </varlistentry>
130
131 <varlistentry>
132 <term><parameter>--enable-kernel=&min-kernel;</parameter></term>
133 <listitem>
134 <para>This tells Glibc to compile the library with support
135 for &min-kernel; and later Linux kernels. Workarounds for older
136 kernels are not enabled.</para>
137 </listitem>
138 </varlistentry>
139
140 <varlistentry>
141 <term><parameter>--with-headers=$LFS/usr/include</parameter></term>
142 <listitem>
143 <para>This tells Glibc to compile itself against the headers
144 recently installed to the $LFS/usr/include directory, so that
145 it knows exactly what features the kernel has and can optimize
146 itself accordingly.</para>
147 </listitem>
148 </varlistentry>
149
150 <varlistentry>
151 <term><parameter>libc_cv_slibdir=/usr/lib</parameter></term>
152 <listitem>
153 <para>This ensures that the library is installed in /usr/lib instead
154 of the default /lib64 on 64-bit machines.</para>
155 </listitem>
156 </varlistentry>
157
158 <varlistentry>
159 <term><parameter>--disable-nscd</parameter></term>
160 <listitem>
161 <para>Do not build the name service cache daemon which is no
162 longer used.</para>
163 </listitem>
164 </varlistentry>
165
166 </variablelist>
167
168 <para>During this stage the following warning might appear:</para>
169
170 <blockquote>
171<screen><computeroutput>configure: WARNING:
172*** These auxiliary programs are missing or
173*** incompatible versions: msgfmt
174*** some features will be disabled.
175*** Check the INSTALL file for required versions.</computeroutput></screen>
176 </blockquote>
177
178 <para>The missing or incompatible <command>msgfmt</command> program is
179 generally harmless. This <command>msgfmt</command> program is part of the
180 Gettext package, which the host distribution should provide.</para>
181
182 <note><para>There have been reports that this package may fail when
183 building as a <quote>parallel make.</quote> If that occurs, rerun the make command
184 with the <option>-j1</option> option.</para></note>
185
186 <para>Compile the package:</para>
187
188<screen><userinput remap="make">make</userinput></screen>
189
190 <para>Install the package:</para>
191
192 <warning><para>If <envar>LFS</envar> is not properly set, and despite the
193 recommendations, you are building as
194 <systemitem class="username">root</systemitem>, the next command will
195 install the newly built Glibc to your host system, which will almost
196 certainly render it unusable. So double-check that the environment is
197 correctly set, and that you are not &root;, before running the following command.</para></warning>
198
199<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
200
201 <variablelist>
202 <title>The meaning of the <command>make install</command> option:</title>
203
204 <varlistentry>
205 <term><parameter>DESTDIR=$LFS</parameter></term>
206 <listitem>
207 <para>The <envar>DESTDIR</envar> make variable is used by almost all
208 packages to define the location where the package should be
209 installed. If it is not set, it defaults to the root (<filename
210 class="directory">/</filename>) directory. Here we specify that
211 the package is installed in <filename class="directory">$LFS
212 </filename>, which will become the root directory in <xref linkend=
213 "ch-tools-chroot"/>.</para>
214 </listitem>
215 </varlistentry>
216
217 </variablelist>
218
219 <para>Fix a hard coded path to the executable loader in the
220 <command>ldd</command> script:</para>
221
222<screen><userinput remap="install">sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd</userinput></screen>
223
224 <caution>
225 <para>At this point, it is imperative to stop and ensure that the basic
226 functions (compiling and linking) of the new toolchain are working as
227 expected. To perform a sanity check, run the following commands:</para>
228
229<screen><userinput>echo 'int main(){}' | $LFS_TGT-gcc -xc -
230readelf -l a.out | grep ld-linux</userinput></screen>
231
232 <para>If everything is working correctly, there should be no errors,
233 and the output of the last command will be of the form:</para>
234
235<screen><computeroutput>[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</computeroutput></screen>
236
237 <para arch="default">Note that for 32-bit machines, the interpreter name will be
238 <filename>/lib/ld-linux.so.2</filename>.</para>
239
240 <para>If the output is not as shown above, or there is no output at all,
241 then something is wrong. Investigate and retrace the steps to find out
242 where the problem is and correct it. This issue must be resolved before
243 continuing.</para>
244
245 <para>Once all is well, clean up the test file:</para>
246
247<screen><userinput>rm -v a.out</userinput></screen>
248
249 </caution>
250
251 <note><para>Building the packages in the next chapter will serve as an
252 additional check that the toolchain has been built properly. If some
253 package, especially Binutils-pass2 or GCC-pass2, fails to build, it is
254 an indication that something has gone wrong with the
255 preceding Binutils, GCC, or Glibc installations.</para></note>
256<!--
257 <para>Now that our cross-toolchain is complete, finalize the installation
258 of the limits.h header. To do this, run a utility provided by the GCC
259 developers:</para>
260
261<screen><userinput>$LFS/tools/libexec/gcc/$LFS_TGT/&gcc-version;/install-tools/mkheaders</userinput></screen>
262-->
263 </sect2>
264
265 <!-- - - - - - - - - - -->
266 <!-- Multilib - 32bit -->
267 <!-- - - - - - - - - - -->
268 <sect2 arch="ml_32,ml_all">
269 <title>Building Glibc - 32bit</title>
270
271 <para>Now recompile for m32. The extracted source can be
272 reused but needs to be cleaned before installing the m32
273 version of Glibc.</para>
274
275 <para>Clear the build directory and remove artefacts from
276 previous build:</para>
277
278<screen><userinput remap="pre">make clean
279find .. -name "*.a" -delete</userinput></screen>
280
281 <para>Configure Glibc for m32 with the following commands:</para>
282
283<screen><userinput remap="configure">CC="$LFS_TGT-gcc -m32" \
284CXX="$LFS_TGT-g++ -m32" \
285../configure \
286 --prefix=/usr \
287 --host=$LFS_TGT32 \
288 --build=$(../scripts/config.guess) \
289 --enable-kernel=&min-kernel; \
290 --with-headers=$LFS/usr/include \
291 --disable-nscd \
292 --libdir=/usr/lib32 \
293 --libexecdir=/usr/lib32 \
294 libc_cv_slibdir=/usr/lib32</userinput></screen>
295
296 <para>Compile the package:</para>
297
298<screen><userinput remap="make">make</userinput></screen>
299
300 <para>Install the package:</para>
301
302<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install
303cp -a DESTDIR/usr/lib32 $LFS/usr/
304install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-32.h \
305 $LFS/usr/include/gnu/
306ln -svf ../lib32/ld-linux.so.2 $LFS/lib/ld-linux.so.2</userinput></screen>
307
308
309 <caution>
310 <para>At this point, it is imperative to stop and ensure that the basic
311 functions (compiling and linking) of the new toolchain are working as
312 expected. To perform a sanity check, run the following commands:</para>
313
314<screen><userinput>echo 'int main(){}' &gt; dummy.c
315$LFS_TGT-gcc -m32 dummy.c
316readelf -l a.out | grep '/ld-linux'</userinput></screen>
317
318 <para>If everything is working correctly, there should be no errors,
319 and the output of the last command will be of the form:</para>
320
321<screen><computeroutput>[Requesting program interpreter: /lib/ld-linux.so.2]</computeroutput></screen>
322
323 <para>If the output is not shown as above or there was no output at all,
324 then something is wrong. Investigate and retrace the steps to find out
325 where the problem is and correct it. This issue must be resolved before
326 continuing on.</para>
327
328 <para>Once all is well, clean up the test files:</para>
329
330<screen><userinput>rm -v dummy.c a.out</userinput></screen>
331
332 </caution>
333
334 </sect2><!-- m32 -->
335
336 <!-- - - - - - - - - - -->
337 <!-- Multilib - x32bit -->
338 <!-- - - - - - - - - - -->
339
340 <sect2 arch="ml_x32,ml_all">
341 <title>Building Glibc - x32bit</title>
342
343 <para>Now recompile for mx32. The extracted source can be
344 reused but needs to be cleaned before installing the mx32
345 version of Glibc.</para>
346
347 <para>Clear the build directory and remove artefacts from
348 previous build:</para>
349
350<screen><userinput remap="pre">make clean
351find .. -name "*.a" -delete</userinput></screen>
352
353 <para>Configure Glibc for mx32 with the following commands:</para>
354
355<screen><userinput remap="configure">CC="$LFS_TGT-gcc -mx32" \
356CXX="$LFS_TGT-g++ -mx32" \
357../configure \
358 --prefix=/usr \
359 --host=$LFS_TGTX32 \
360 --build=$(../scripts/config.guess) \
361 --enable-kernel=&min-kernel; \
362 --with-headers=$LFS/usr/include \
363 --disable-nscd \
364 --libdir=/usr/libx32 \
365 --libexecdir=/usr/libx32 \
366 libc_cv_slibdir=/usr/libx32</userinput></screen>
367
368 <para>Compile the package:</para>
369
370<screen><userinput remap="make">make</userinput></screen>
371
372 <para>Install the package:</para>
373
374<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install
375cp -a DESTDIR/usr/libx32 $LFS/usr/
376install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-x32.h \
377 $LFS/usr/include/gnu/
378ln -svf ../libx32/ld-linux-x32.so.2 $LFS/lib/ld-linux-x32.so.2</userinput></screen>
379
380 <caution>
381 <para>At this point, it is imperative to stop and ensure that the basic
382 functions (compiling and linking) of the new toolchain are working as
383 expected. To perform a sanity check, run the following commands:</para>
384
385<screen><userinput>echo 'int main(){}' &gt; dummy.c
386$LFS_TGT-gcc -mx32 dummy.c
387readelf -l a.out | grep '/ld-linux-x32'</userinput></screen>
388
389 <para>If everything is working correctly, there should be no errors,
390 and the output of the last command will be of the form:</para>
391
392<screen><computeroutput>[Requesting program interpreter: /libx32/ld-linux-x32.so.2]</computeroutput></screen>
393
394 <para>If the output is not shown as above or there was no output at all,
395 then something is wrong. Investigate and retrace the steps to find out
396 where the problem is and correct it. This issue must be resolved before
397 continuing on.</para>
398
399 <para>Once all is well, clean up the test files:</para>
400
401<screen><userinput>rm -v dummy.c a.out</userinput></screen>
402
403 </caution>
404
405 </sect2><!-- mx32 -->
406
407 <sect2 role="content">
408 <title/>
409
410 <para>Details on this package are located in
411 <xref linkend="contents-glibc" role="."/></para>
412
413 </sect2>
414
415</sect1>
Note: See TracBrowser for help on using the repository browser.