source: chapter05/glibc.xml@ 9a5dab1

xry111/arm64 xry111/arm64-12.0
Last change on this file since 9a5dab1 was 5f555ba, checked in by Xi Ruoyao <xry111@…>, 15 months ago

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

  • Property mode set to 100644
File size: 8.2 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-crypt \
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 </variablelist>
116
117 <para>During this stage the following warning might appear:</para>
118
119 <blockquote>
120<screen><computeroutput>configure: WARNING:
121*** These auxiliary programs are missing or
122*** incompatible versions: msgfmt
123*** some features will be disabled.
124*** Check the INSTALL file for required versions.</computeroutput></screen>
125 </blockquote>
126
127 <para>The missing or incompatible <command>msgfmt</command> program is
128 generally harmless. This <command>msgfmt</command> program is part of the
129 Gettext package, which the host distribution should provide.</para>
130
131 <note><para>There have been reports that this package may fail when
132 building as a "parallel make". If that occurs, rerun the make command
133 with the "-j1" option.</para></note>
134
135 <para>Compile the package:</para>
136
137<screen><userinput remap="make">make</userinput></screen>
138
139 <para>Install the package:</para>
140
141 <warning><para>If <envar>LFS</envar> is not properly set, and despite the
142 recommendations, you are building as
143 <systemitem class="username">root</systemitem>, the next command will
144 install the newly built Glibc to your host system, which will almost
145 certainly render it unusable. So double-check that the environment is
146 correctly set, and that you are not &root;, before running the following command.</para></warning>
147
148<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
149
150 <variablelist>
151 <title>The meaning of the <command>make install</command> option:</title>
152
153 <varlistentry>
154 <term><parameter>DESTDIR=$LFS</parameter></term>
155 <listitem>
156 <para>The <envar>DESTDIR</envar> make variable is used by almost all
157 packages to define the location where the package should be
158 installed. If it is not set, it defaults to the root (<filename
159 class="directory">/</filename>) directory. Here we specify that
160 the package is installed in <filename class="directory">$LFS
161 </filename>, which will become the root directory in <xref linkend=
162 "ch-tools-chroot"/>.</para>
163 </listitem>
164 </varlistentry>
165
166 </variablelist>
167
168 <para>Fix a hard coded path to the executable loader in the
169 <command>ldd</command> script:</para>
170
171<screen><userinput remap="install">sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd</userinput></screen>
172
173 <caution>
174 <para>At this point, it is imperative to stop and ensure that the basic
175 functions (compiling and linking) of the new toolchain are working as
176 expected. To perform a sanity check, run the following commands:</para>
177
178<screen><userinput>echo 'int main(){}' | $LFS_TGT-gcc -xc -
179readelf -l a.out | grep ld-linux</userinput></screen>
180
181 <para>If everything is working correctly, there should be no errors,
182 and the output of the last command will be of the form:</para>
183
184<screen><computeroutput>[Requesting program interpreter: /lib/ld-linux-aarch64.so.1]</computeroutput></screen>
185
186 <para>Note that for big-endian machines, the interpreter name will be
187 <filename>/lib/ld-linux-aarch64_be.so.1</filename>.</para>
188
189 <para>If the output is not as shown above, or there is no output at all,
190 then something is wrong. Investigate and retrace the steps to find out
191 where the problem is and correct it. This issue must be resolved before
192 continuing.</para>
193
194 <para>Once all is well, clean up the test file:</para>
195
196<screen><userinput>rm -v a.out</userinput></screen>
197
198 </caution>
199
200 <note><para>Building the packages in the next chapter will serve as an
201 additional check that the toolchain has been built properly. If some
202 package, especially Binutils-pass2 or GCC-pass2, fails to build, it is
203 an indication that something has gone wrong with the
204 preceding Binutils, GCC, or Glibc installations.</para></note>
205<!--
206 <para>Now that our cross-toolchain is complete, finalize the installation
207 of the limits.h header. To do this, run a utility provided by the GCC
208 developers:</para>
209
210<screen><userinput>$LFS/tools/libexec/gcc/$LFS_TGT/&gcc-version;/install-tools/mkheaders</userinput></screen>
211-->
212 </sect2>
213
214 <sect2 role="content">
215 <title/>
216
217 <para>Details on this package are located in
218 <xref linkend="contents-glibc" role="."/></para>
219
220 </sect2>
221
222</sect1>
Note: See TracBrowser for help on using the repository browser.