source: chapter05/glibc.xml@ 8778c71

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

Fix double-dash

  • Property mode set to 100644
File size: 15.4 KB
RevLine 
[7152faa]1<?xml version="1.0" encoding="UTF-8"?>
[b06ca36]2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
[673b0d8]4 <!ENTITY % general-entities SYSTEM "../general.ent">
5 %general-entities;
6]>
[1f7ca93]7
[9652249]8<sect1 id="ch-tools-glibc" role="wrap">
[1f7ca93]9 <?dbhtml filename="glibc.html"?>
10
[e747759]11 <sect1info condition="script">
12 <productname>glibc</productname>
13 <productnumber>&glibc-version;</productnumber>
14 <address>&glibc-url;</address>
15 </sect1info>
16
[1f7ca93]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/>
[bc82645e]26
[d9441360]27 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
[6dfcfecc]28 href="../chapter08/glibc.xml"
[1f7ca93]29 xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
[81fd230]30
[1f7ca93]31 <segmentedlist>
32 <segtitle>&buildtime;</segtitle>
33 <segtitle>&diskspace;</segtitle>
[673b0d8]34
[1f7ca93]35 <seglistitem>
[6dfcfecc]36 <seg>&glibc-tmp-sbu;</seg>
37 <seg>&glibc-tmp-du;</seg>
[1f7ca93]38 </seglistitem>
39 </segmentedlist>
[673b0d8]40
[1f7ca93]41 </sect2>
[73aedd1d]42
[1f7ca93]43 <sect2 role="installation">
44 <title>Installation of Glibc</title>
[6fc168b]45
[ceebda5]46 <para>First, create a symbolic link for LSB compliance. Additionally,
[6dfcfecc]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
[0fc1b27]61 <note>
62 <para>
63 The above command is correct. The <command>ln</command> command has
[f6820bb6]64 several syntactic versions, so be sure to check
[ea93c11]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.
[0fc1b27]68 </para>
69 </note>
70
[f6820bb6]71 <para>Some of the Glibc programs use the non-FHS-compliant
[6dfcfecc]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
[a26f29f]78 <para>The Glibc documentation recommends building Glibc
[f1dd547]79 in a dedicated build directory:</para>
[9bda40d]80
[f1dd547]81<screen><userinput remap="pre">mkdir -v build
82cd build</userinput></screen>
[f1c177f]83
[4eee9cc]84 <para>Ensure that the <command>ldconfig</command> and <command>sln</command>
[bcb20b4]85 utilities are installed into
[4eee9cc]86 <filename class="directory">/usr/sbin</filename>:</para>
87
88<screen><userinput remap="pre">echo "rootsbindir=/usr/sbin" &gt; configparms</userinput></screen>
89
[1f7ca93]90 <para>Next, prepare Glibc for compilation:</para>
[73aedd1d]91
[62a13d02]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<!--
[9c31d62]101<screen arch="default"><userinput remap="configure">../configure \
[8778c71]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 \
[d4b5218]108 libc_cv_slibdir=/usr/lib</userinput></screen>
[9c31d62]109<screen arch="ml_32,ml_x32,ml_all"><userinput remap="configure">../configure \
[8778c71]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 \
[d4b5218]116 libc_cv_slibdir=/usr/lib</userinput></screen>
[62a13d02]117-->
[73aedd1d]118
[1f7ca93]119 <variablelist>
120 <title>The meaning of the configure options:</title>
121
[4e82d47]122 <varlistentry>
[418b038]123 <term><parameter>--host=$LFS_TGT, --build=$(../scripts/config.guess)</parameter></term>
[4e82d47]124 <listitem>
125 <para>The combined effect of these switches is that Glibc's build system
[6dfcfecc]126 configures itself to be cross-compiled, using the cross-linker and
127 cross-compiler in <filename class="directory">$LFS/tools</filename>.</para>
[4e82d47]128 </listitem>
129 </varlistentry>
[1118b17]130
[1f7ca93]131 <varlistentry>
[70cd9f32]132 <term><parameter>--enable-kernel=&min-kernel;</parameter></term>
[1f7ca93]133 <listitem>
134 <para>This tells Glibc to compile the library with support
[70cd9f32]135 for &min-kernel; and later Linux kernels. Workarounds for older
[3532721]136 kernels are not enabled.</para>
[1f7ca93]137 </listitem>
138 </varlistentry>
[1118b17]139
[1f7ca93]140 <varlistentry>
[6dfcfecc]141 <term><parameter>--with-headers=$LFS/usr/include</parameter></term>
[1f7ca93]142 <listitem>
[6dfcfecc]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>
[4e82d47]147 </listitem>
148 </varlistentry>
[6dfcfecc]149
[4e82d47]150 <varlistentry>
[d7a9421]151 <term><parameter>libc_cv_slibdir=/usr/lib</parameter></term>
[4e82d47]152 <listitem>
[d7a9421]153 <para>This ensures that the library is installed in /usr/lib instead
[f6820bb6]154 of the default /lib64 on 64-bit machines.</para>
[1f7ca93]155 </listitem>
156 </varlistentry>
157
[25b3c0f]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
[1f7ca93]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
[81fd230]173*** incompatible versions: msgfmt
174*** some features will be disabled.
[1f7ca93]175*** Check the INSTALL file for required versions.</computeroutput></screen>
176 </blockquote>
[81fd230]177
[1f7ca93]178 <para>The missing or incompatible <command>msgfmt</command> program is
[5f7456b]179 generally harmless. This <command>msgfmt</command> program is part of the
[f6820bb6]180 Gettext package, which the host distribution should provide.</para>
[81fd230]181
[a26f29f]182 <note><para>There have been reports that this package may fail when
[360fdfca]183 building as a <quote>parallel make.</quote> If that occurs, rerun the make command
184 with the <option>-j1</option> option.</para></note>
[7b1923d]185
[1f7ca93]186 <para>Compile the package:</para>
[73aedd1d]187
[0445a3d]188<screen><userinput remap="make">make</userinput></screen>
[73aedd1d]189
[1f7ca93]190 <para>Install the package:</para>
[73aedd1d]191
[6dfcfecc]192 <warning><para>If <envar>LFS</envar> is not properly set, and despite the
[38de42d]193 recommendations, you are building as
194 <systemitem class="username">root</systemitem>, the next command will
[f6820bb6]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>
[6dfcfecc]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
[f6820bb6]211 the package is installed in <filename class="directory">$LFS
212 </filename>, which will become the root directory in <xref linkend=
[6dfcfecc]213 "ch-tools-chroot"/>.</para>
214 </listitem>
215 </varlistentry>
[73aedd1d]216
[6dfcfecc]217 </variablelist>
218
[f6820bb6]219 <para>Fix a hard coded path to the executable loader in the
[0ebda11]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
[6dfcfecc]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>
[1a3e6a3]228
[793f9087]229<screen><userinput>echo 'int main(){}' | $LFS_TGT-gcc -xc -
[b3f157c6]230readelf -l a.out | grep ld-linux</userinput></screen>
[1a3e6a3]231
[6dfcfecc]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>
[1a3e6a3]234
[6dfcfecc]235<screen><computeroutput>[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</computeroutput></screen>
[1a3e6a3]236
[6dfcfecc]237 <para arch="default">Note that for 32-bit machines, the interpreter name will be
238 <filename>/lib/ld-linux.so.2</filename>.</para>
[1a3e6a3]239
[f6820bb6]240 <para>If the output is not as shown above, or there is no output at all,
[6dfcfecc]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
[f6820bb6]243 continuing.</para>
[1a3e6a3]244
[b3f157c6]245 <para>Once all is well, clean up the test file:</para>
[1a3e6a3]246
[b3f157c6]247<screen><userinput>rm -v a.out</userinput></screen>
[1a3e6a3]248
[6dfcfecc]249 </caution>
[1a3e6a3]250
[f6820bb6]251 <note><para>Building the packages in the next chapter will serve as an
[6dfcfecc]252 additional check that the toolchain has been built properly. If some
[f6820bb6]253 package, especially Binutils-pass2 or GCC-pass2, fails to build, it is
[6dfcfecc]254 an indication that something has gone wrong with the
[f6820bb6]255 preceding Binutils, GCC, or Glibc installations.</para></note>
[bd5b888]256<!--
[6dfcfecc]257 <para>Now that our cross-toolchain is complete, finalize the installation
[f6820bb6]258 of the limits.h header. To do this, run a utility provided by the GCC
[6dfcfecc]259 developers:</para>
[bc82645e]260
[6dfcfecc]261<screen><userinput>$LFS/tools/libexec/gcc/$LFS_TGT/&gcc-version;/install-tools/mkheaders</userinput></screen>
[bd5b888]262-->
[6dfcfecc]263 </sect2>
[e2ccc32]264
[6dfcfecc]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
[0ebda11]272 reused but needs to be cleaned before installing the m32
[6dfcfecc]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 \
[800ee38]291 --disable-nscd \
[0ebda11]292 --libdir=/usr/lib32 \
293 --libexecdir=/usr/lib32 \
[d4b5218]294 libc_cv_slibdir=/usr/lib32</userinput></screen>
[e2ccc32]295
[6dfcfecc]296 <para>Compile the package:</para>
[e2ccc32]297
[6dfcfecc]298<screen><userinput remap="make">make</userinput></screen>
[e2ccc32]299
[6dfcfecc]300 <para>Install the package:</para>
[e2ccc32]301
[6dfcfecc]302<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install
[0ebda11]303cp -a DESTDIR/usr/lib32 $LFS/usr/
[6dfcfecc]304install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-32.h \
305 $LFS/usr/include/gnu/
[0ebda11]306ln -svf ../lib32/ld-linux.so.2 $LFS/lib/ld-linux.so.2</userinput></screen>
307
[b3f1ebb3]308
[6dfcfecc]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>
[b3f1ebb3]313
[6dfcfecc]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>
[b3f1ebb3]317
[6dfcfecc]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>
[b3f1ebb3]320
[6dfcfecc]321<screen><computeroutput>[Requesting program interpreter: /lib/ld-linux.so.2]</computeroutput></screen>
[e2ccc32]322
[6dfcfecc]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>
[e2ccc32]327
[6dfcfecc]328 <para>Once all is well, clean up the test files:</para>
[e2ccc32]329
[6dfcfecc]330<screen><userinput>rm -v dummy.c a.out</userinput></screen>
[e2ccc32]331
[6dfcfecc]332 </caution>
[e2ccc32]333
[6dfcfecc]334 </sect2><!-- m32 -->
[b3f1ebb3]335
[6dfcfecc]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
[0ebda11]344 reused but needs to be cleaned before installing the mx32
[6dfcfecc]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 \
[800ee38]363 --disable-nscd \
[0ebda11]364 --libdir=/usr/libx32 \
365 --libexecdir=/usr/libx32 \
[d4b5218]366 libc_cv_slibdir=/usr/libx32</userinput></screen>
[b3f1ebb3]367
[6dfcfecc]368 <para>Compile the package:</para>
369
370<screen><userinput remap="make">make</userinput></screen>
[b3f1ebb3]371
[6dfcfecc]372 <para>Install the package:</para>
[b3f1ebb3]373
[6dfcfecc]374<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install
[0ebda11]375cp -a DESTDIR/usr/libx32 $LFS/usr/
[6dfcfecc]376install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-x32.h \
377 $LFS/usr/include/gnu/
[0ebda11]378ln -svf ../libx32/ld-linux-x32.so.2 $LFS/lib/ld-linux-x32.so.2</userinput></screen>
[b3f1ebb3]379
[6dfcfecc]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>
[b3f1ebb3]384
385<screen><userinput>echo 'int main(){}' &gt; dummy.c
386$LFS_TGT-gcc -mx32 dummy.c
[6dfcfecc]387readelf -l a.out | grep '/ld-linux-x32'</userinput></screen>
[b3f1ebb3]388
[6dfcfecc]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>
[b3f1ebb3]391
[d7e0db5]392<screen><computeroutput>[Requesting program interpreter: /libx32/ld-linux-x32.so.2]</computeroutput></screen>
[b3f1ebb3]393
[6dfcfecc]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>
[b3f1ebb3]398
[6dfcfecc]399 <para>Once all is well, clean up the test files:</para>
[b3f1ebb3]400
401<screen><userinput>rm -v dummy.c a.out</userinput></screen>
402
[6dfcfecc]403 </caution>
404
405 </sect2><!-- mx32 -->
406
[1f7ca93]407 <sect2 role="content">
408 <title/>
[81fd230]409
[1f7ca93]410 <para>Details on this package are located in
411 <xref linkend="contents-glibc" role="."/></para>
412
413 </sect2>
[81fd230]414
[1f7ca93]415</sect1>
Note: See TracBrowser for help on using the repository browser.