source: chapter05/glibc.xml@ ee1a413

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

Change profiling attribute to enable selection of m32 and/or mx32. Fixes #4452.

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

  • Property mode set to 100644
File size: 12.0 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="ml_32,ml_x32,ml_all">
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="ml_32,ml_all" 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</userinput></screen>
217<!-- \
218 libc_cv_forced_unwind=yes \
219 libc_cv_c_cleanup=yes</userinput></screen> -->
220
221 <para>Now compile the 32-bit version of glibc:</para>
222<screen><userinput remap="make">make</userinput></screen>
223
224 <para>Install 32-bit version of glibc:</para>
225<screen><userinput remap="install">make install_root="${PWD}/DESTDIR" install
226install -vdm755 /tools/lib32
227cp -Rv DESTDIR/tools/lib32/* /tools/lib32
228install -vm644 DESTDIR/tools/include/gnu/{lib-names,stubs}-32.h \
229 /tools/include/gnu/
230ln -svf /tools/lib32/ld-linux.so.2 /tools/lib/
231cd ..</userinput></screen>
232
233 </sect2>
234
235 <sect2 arch="ml_x32,ml_all" role="installation">
236 <title>Installation of Glibc x32-bit</title>
237
238 <para>Create a build directory for redoing glibc for x32-bit:</para>
239<screen><userinput remap="pre">mkdir build32x
240cd build32x</userinput></screen>
241
242 <para>Rebuild glibc for x32-bit:</para>
243<screen><userinput remap="configure">echo slibdir=/tools/libx32 &gt; configparms
244BUILD_CC="gcc -mx32" \
245CC="${LFS_TGT}-gcc -mx32" \
246CXX="${LFS_TGT}-g++ -mx32" \
247AR="${LFS_TGT}-ar" \
248RANLIB="${LFS_TGT}-ranlib" \
249../configure --prefix=/tools \
250 --build=$(../scripts/config.guess) \
251 --host=${LFS_TGTX32} \
252 --enable-kernel=&min-kernel; \
253 --enable-multi-arch \
254 --libdir=/tools/libx32 \
255 --libexecdir=/tools/libx32 \
256 --with-headers=/tools/include \
257 --with-binutils=/tools/bin</userinput></screen>
258<!-- \
259 libc_cv_forced_unwind=yes \
260 libc_cv_c_cleanup=yes</userinput></screen> -->
261
262 <para>Now compile the x32-bit version of glibc:</para>
263<screen><userinput remap="make">make</userinput></screen>
264
265 <para>Install x32-bit version of glibc:</para>
266<screen><userinput remap="install">make install_root="${PWD}/DESTDIR" install
267install -vdm755 /tools/libx32
268cp -Rv DESTDIR/tools/libx32/* /tools/libx32
269install -vm644 DESTDIR/tools/include/gnu/lib-names-x32.h \
270 /tools/include/gnu/
271[ -e DESTDIR/tools/include/gnu/stubs-x32.h ] \
272 &amp;&amp; install -vm644 DESTDIR/tools/include/gnu/stubs-x32.h /tools/include/gnu/ \
273 || ln -v /tools/include/gnu/stubs-64.h /tools/include/gnu/stubs-x32.h
274ln -svf /tools/libx32/ld-linux-x32.so.2 /tools/lib/</userinput></screen>
275<!-- For whatever reason the stubs-x32.h doesn't get created. The 'ln' above is
276just a "brute force" workaraound - by copying the stubs-64.h file. -->
277
278 <caution>
279 <para>At this point, it is imperative to stop and ensure that the basic
280 functions (compiling and linking) of the new toolchain are working as
281 expected. To perform a sanity check, run the following commands:</para>
282
283<screen><userinput>echo 'int main(){}' &gt; dummy.c
284$LFS_TGT-gcc -m32 dummy.c
285readelf -l a.out | grep ': /tools'</userinput></screen>
286
287 <para>If everything is working correctly, there should be no errors,
288 and the output of the last command will be of the form:</para>
289
290<screen><computeroutput>[Requesting program interpreter: /tools/lib/ld-linux.so.2]</computeroutput></screen>
291
292 <para>Redo test for x32-ABI:</para>
293
294<screen><userinput>echo 'int main(){}' &gt; dummy.c
295$LFS_TGT-gcc -mx32 dummy.c
296readelf -l a.out | grep ': /tools'</userinput></screen>
297
298 <para>Output should be like:</para>
299
300<screen><computeroutput>[Requesting program interpreter: /tools/lib/ld-linux-x32.so.2]</computeroutput></screen>
301
302 <para>If the output is not shown as above or there was no output at all,
303 then something is wrong. Investigate and retrace the steps to find out
304 where the problem is and correct it. This issue must be resolved before
305 continuing on.</para>
306
307 <para>Once all is well, clean up the test files:</para>
308
309<screen><userinput>rm -v dummy.c a.out</userinput></screen>
310
311 </caution>
312 </sect2>
313
314 <sect2 role="content">
315 <title/>
316
317 <para>Details on this package are located in
318 <xref linkend="contents-glibc" role="."/></para>
319
320 </sect2>
321
322</sect1>
Note: See TracBrowser for help on using the repository browser.