source: chapter05/glibc.xml@ 7d9f881

multilib-10.1
Last change on this file since 7d9f881 was 8eb3fe4, checked in by Thomas Trepl <thomas@…>, 5 years ago

First apply of multilib-patch of April 1st, 2019

git-svn-id: http://svn.linuxfromscratch.org/LFS/branches/multilib@11566 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689

  • Property mode set to 100644
File size: 11.9 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="../chapter06/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-ch5-sbu;</seg>
37 <seg>&glibc-ch5-du;</seg>
38 </seglistitem>
39 </segmentedlist>
40
41 </sect2>
42
43 <sect2 role="installation">
44 <title>Installation of Glibc</title>
45
46 <para>The Glibc documentation recommends building Glibc
47 in a dedicated build directory:</para>
48
49<screen><userinput remap="pre">mkdir -v build
50cd build</userinput></screen>
51
52 <para>Next, prepare Glibc for compilation:</para>
53
54<screen><userinput remap="configure">../configure \
55 --prefix=/tools \
56 --host=$LFS_TGT \
57 --build=$(../scripts/config.guess) \
58 --enable-kernel=&min-kernel; \
59 --with-headers=/tools/include</userinput></screen>
60<!--
61 libc_cv_forced_unwind=yes \
62 libc_cv_c_cleanup=yes</userinput></screen> -->
63
64 <variablelist>
65 <title>The meaning of the configure options:</title>
66
67 <varlistentry>
68 <term><parameter>--host=$LFS_TGT, --build=$(../scripts/config.guess)</parameter></term>
69 <listitem>
70 <para>The combined effect of these switches is that Glibc's build system
71 configures itself to cross-compile, using the cross-linker and
72 cross-compiler in <filename class="directory">/tools</filename>.</para>
73 </listitem>
74 </varlistentry>
75
76 <varlistentry>
77 <term><parameter>--enable-kernel=&min-kernel;</parameter></term>
78 <listitem>
79 <para>This tells Glibc to compile the library with support
80 for &min-kernel; and later Linux kernels. Workarounds for older
81 kernels are not enabled.</para>
82 </listitem>
83 </varlistentry>
84
85 <varlistentry arch="multilib">
86 <term><parameter>--enable-multi-arch</parameter></term>
87 <listitem>
88 <para>Enables glibc for multiarch environments.</para>
89 </listitem>
90 </varlistentry>
91
92 <varlistentry>
93 <term><parameter>--with-headers=/tools/include</parameter></term>
94 <listitem>
95 <para>This tells Glibc to compile itself against the headers recently
96 installed to the tools directory, so that it knows exactly what
97 features the kernel has and can optimize itself accordingly.</para>
98 </listitem>
99 </varlistentry>
100<!--
101 <varlistentry>
102 <term><parameter>libc_cv_forced_unwind=yes</parameter></term>
103 <listitem>
104 <para>The linker installed during
105 <xref linkend="ch-tools-binutils-pass1"/> was cross-compiled and as
106 such cannot be used until Glibc has been installed. This means that
107 the configure test for force-unwind support will fail, as it relies on
108 a working linker. The libc_cv_forced_unwind=yes variable is passed in
109 order to inform <command>configure</command> that force-unwind
110 support is available without it having to run the test.</para>
111 </listitem>
112 </varlistentry>
113 <varlistentry>
114 <term><parameter>libc_cv_c_cleanup=yes</parameter></term>
115 <listitem>
116 <para>Similarly, we pass libc_cv_c_cleanup=yes through to the
117 <command>configure</command> script so that the test is skipped and C
118 cleanup handling support is configured.</para>
119 </listitem>
120 </varlistentry>
121-->
122<!-- <varlistentry>
123 <term><parameter>libc_cv_ctors_header=yes</parameter></term>
124 <listitem>
125 <para>Similarly, we pass libc_cv_ctors_header=yes through to the
126 <command>configure</command> script so that the test is skipped and
127 gcc constructor support is configured.</para>
128 </listitem>
129 </varlistentry>-->
130
131 </variablelist>
132
133 <para>During this stage the following warning might appear:</para>
134
135 <blockquote>
136<screen><computeroutput>configure: WARNING:
137*** These auxiliary programs are missing or
138*** incompatible versions: msgfmt
139*** some features will be disabled.
140*** Check the INSTALL file for required versions.</computeroutput></screen>
141 </blockquote>
142
143 <para>The missing or incompatible <command>msgfmt</command> program is
144 generally harmless. This <command>msgfmt</command> program is part of the
145 Gettext package which the host distribution should provide.</para>
146
147 <note><para>There have been reports that this package may fail when
148 building as a "parallel make". If this occurs, rerun the make command
149 with a "-j1" option.</para></note>
150
151 <para>Compile the package:</para>
152
153<screen><userinput remap="make">make</userinput></screen>
154
155 <para>Install the package:</para>
156
157<screen><userinput remap="install">make install</userinput></screen>
158
159 <caution>
160 <para>At this point, it is imperative to stop and ensure that the basic
161 functions (compiling and linking) of the new toolchain are working as
162 expected. To perform a sanity check, run the following commands:</para>
163
164<screen><userinput>echo 'int main(){}' &gt; dummy.c
165$LFS_TGT-gcc dummy.c
166readelf -l a.out | grep ': /tools'</userinput></screen>
167
168 <para>If everything is working correctly, there should be no errors,
169 and the output of the last command will be of the form:</para>
170
171<screen><computeroutput>[Requesting program interpreter: /tools/lib64/ld-linux-x86-64.so.2]</computeroutput></screen>
172
173 <para>Note that for 32-bit machines, the interpreter name will be
174 <filename>/tools/lib/ld-linux.so.2</filename>.</para>
175
176 <para>If the output is not shown as above or there was no output at all,
177 then something is wrong. Investigate and retrace the steps to find out
178 where the problem is and correct it. This issue must be resolved before
179 continuing on.</para>
180
181 <para>Once all is well, clean up the test files:</para>
182
183<screen><userinput>rm -v dummy.c a.out</userinput></screen>
184
185 </caution>
186
187 <note><para>Building Binutils in the section after next will serve as an
188 additional check that the toolchain has been built properly. If Binutils
189 fails to build, it is an indication that something has gone wrong with the
190 previous Binutils, GCC, or Glibc installations.</para></note>
191
192 </sect2>
193
194 <sect2 arch="multilib" role="installation">
195 <title>Installation of Glibc 32-bit</title>
196
197 <para>Clean the build directory for redoing glibc for 32-bit:</para>
198<screen><userinput remap="pre">mkdir ../build32
199cd ../build32</userinput></screen>
200
201 <para>Rebuild glibc for 32-bit:</para>
202<screen><userinput remap="configure">echo slibdir=/tools/lib32 &gt; configparms
203BUILD_CC="gcc -m32" \
204CC="${LFS_TGT}-gcc -m32" \
205CXX="${LFS_TGT}-g++ -m32" \
206AR="${LFS_TGT}-ar" \
207RANLIB="${LFS_TGT}-ranlib" \
208../configure --prefix=/tools \
209 --build=$(../scripts/config.guess) \
210 --host=${LFS_TGT32} \
211 --enable-kernel=&min-kernel; \
212 --enable-multi-arch \
213 --libdir=/tools/lib32 \
214 --libexecdir=/tools/lib32 \
215 --with-headers=/tools/include \
216 --with-binutils=/tools/bin \
217 libc_cv_forced_unwind=yes \
218 libc_cv_c_cleanup=yes</userinput></screen>
219
220 <para>Now compile the 32-bit version of glibc:</para>
221<screen><userinput remap="make">make</userinput></screen>
222
223 <para>Install 32-bit version of glibc:</para>
224<screen><userinput remap="install">make install_root="${PWD}/DESTDIR" install
225install -vdm755 /tools/lib32
226cp -Rv DESTDIR/tools/lib32/* /tools/lib32
227install -vm644 DESTDIR/tools/include/gnu/{lib-names,stubs}-32.h \
228 /tools/include/gnu/
229ln -svf /tools/lib32/ld-linux.so.2 /tools/lib/
230cd ..</userinput></screen>
231
232 </sect2>
233
234 <sect2 arch="multilib" role="installation">
235 <title>Installation of Glibc x32-bit</title>
236
237 <para>Create a build directory for redoing glibc for x32-bit:</para>
238<screen><userinput remap="pre">mkdir build32x
239cd build32x</userinput></screen>
240
241 <para>Rebuild glibc for x32-bit:</para>
242<screen><userinput remap="configure">echo slibdir=/tools/libx32 &gt; configparms
243BUILD_CC="gcc -mx32" \
244CC="${LFS_TGT}-gcc -mx32" \
245CXX="${LFS_TGT}-g++ -mx32" \
246AR="${LFS_TGT}-ar" \
247RANLIB="${LFS_TGT}-ranlib" \
248../configure --prefix=/tools \
249 --build=$(../scripts/config.guess) \
250 --host=${LFS_TGTX32} \
251 --enable-kernel=&min-kernel; \
252 --enable-multi-arch \
253 --libdir=/tools/libx32 \
254 --libexecdir=/tools/libx32 \
255 --with-headers=/tools/include \
256 --with-binutils=/tools/bin \
257 libc_cv_forced_unwind=yes \
258 libc_cv_c_cleanup=yes</userinput></screen>
259
260 <para>Now compile the x32-bit version of glibc:</para>
261<screen><userinput remap="make">make</userinput></screen>
262
263 <para>Install x32-bit version of glibc:</para>
264<screen><userinput remap="install">make install_root="${PWD}/DESTDIR" install
265install -vdm755 /tools/libx32
266cp -Rv DESTDIR/tools/libx32/* /tools/libx32
267install -vm644 DESTDIR/tools/include/gnu/lib-names-x32.h \
268 /tools/include/gnu/
269[ -e DESTDIR/tools/include/gnu/stubs-x32.h ] \
270 &amp;&amp; install -vm644 DESTDIR/tools/include/gnu/stubs-x32.h /tools/include/gnu/ \
271 || ln -v /tools/include/gnu/stubs-64.h /tools/include/gnu/stubs-x32.h
272ln -svf /tools/libx32/ld-linux-x32.so.2 /tools/lib/</userinput></screen>
273<!-- For whatever reason the stubs-x32.h doesn't get created. The 'ln' above is
274just a "brute force" workaraound - by copying the stubs-64.h file. -->
275
276 <caution>
277 <para>At this point, it is imperative to stop and ensure that the basic
278 functions (compiling and linking) of the new toolchain are working as
279 expected. To perform a sanity check, run the following commands:</para>
280
281<screen><userinput>echo 'int main(){}' &gt; dummy.c
282$LFS_TGT-gcc -m32 dummy.c
283readelf -l a.out | grep ': /tools'</userinput></screen>
284
285 <para>If everything is working correctly, there should be no errors,
286 and the output of the last command will be of the form:</para>
287
288<screen><computeroutput>[Requesting program interpreter: /tools/lib/ld-linux.so.2]</computeroutput></screen>
289
290 <para>Redo test for x32-ABI:</para>
291
292<screen><userinput>echo 'int main(){}' &gt; dummy.c
293$LFS_TGT-gcc -mx32 dummy.c
294readelf -l a.out | grep ': /tools'</userinput></screen>
295
296 <para>Output should be like:</para>
297
298<screen><computeroutput>[Requesting program interpreter: /tools/lib/ld-linux-x32.so.2]</computeroutput></screen>
299
300 <para>If the output is not shown as above or there was no output at all,
301 then something is wrong. Investigate and retrace the steps to find out
302 where the problem is and correct it. This issue must be resolved before
303 continuing on.</para>
304
305 <para>Once all is well, clean up the test files:</para>
306
307<screen><userinput>rm -v dummy.c a.out</userinput></screen>
308
309 </caution>
310 </sect2>
311
312 <sect2 role="content">
313 <title/>
314
315 <para>Details on this package are located in
316 <xref linkend="contents-glibc" role="."/></para>
317
318 </sect2>
319
320</sect1>
Note: See TracBrowser for help on using the repository browser.