Changeset 73aedd1d for chapter05/gcc-pass2.xml
- Timestamp:
- 11/01/2003 10:31:50 PM (21 years ago)
- Branches:
- 10.0, 10.0-rc1, 10.1, 10.1-rc1, 11.0, 11.0-rc1, 11.0-rc2, 11.0-rc3, 11.1, 11.1-rc1, 11.2, 11.2-rc1, 11.3, 11.3-rc1, 12.0, 12.0-rc1, 12.1, 12.1-rc1, 6.0, 6.1, 6.1.1, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.5-systemd, 7.6, 7.6-systemd, 7.7, 7.7-systemd, 7.8, 7.8-systemd, 7.9, 7.9-systemd, 8.0, 8.1, 8.2, 8.3, 8.4, 9.0, 9.1, arm, bdubbs/gcc13, ml-11.0, multilib, renodr/libudev-from-systemd, s6-init, trunk, v5_0, v5_1, v5_1_1, xry111/arm64, xry111/arm64-12.0, xry111/clfs-ng, xry111/lfs-next, xry111/loongarch, xry111/loongarch-12.0, xry111/loongarch-12.1, xry111/mips64el, xry111/pip3, xry111/rust-wip-20221008, xry111/update-glibc
- Children:
- 49f4dd5
- Parents:
- 0b400add
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
chapter05/gcc-pass2.xml
r0b400add r73aedd1d 6 6 Estimated required disk space: &gcc-compsize-tools-pass2;</screen> 7 7 8 &c5-gcc-pass2-inst; 8 9 <sect2><title> </title><para> </para></sect2> 10 11 <sect2> 12 <title>Re-installation of GCC</title> 13 14 <para>The tools required to test GCC and Binutils are installed now (Tcl, Expect 15 and DejaGnu). We can continue on rebuilding GCC and Binutils, link them against 16 the new Glibc, and test them properly. One thing to note, however, is that these 17 test suites are highly dependent on properly functioning pseudo terminals (PTYs) 18 which are provided by your host distribution. These days, PTYs are most commonly 19 implemented via the <emphasis>devpts</emphasis> file system. You can quickly 20 check if your host system is set up correctly in this regard by performing a 21 simple test:</para> 22 23 <screen><userinput>expect -c "spawn ls"</userinput></screen> 24 25 <para>If you receive the message:</para> 26 27 <blockquote><screen>The system has no more ptys. Ask your system administrator to create more.</screen></blockquote> 28 29 <para>Your host distribution is not set up for proper PTY operation. In this 30 case there is no point in running the test suites for GCC and Binutils until you 31 are able to resolve the issue. You can consult the LFS Wiki at 32 <ulink url="http://wiki.linuxfromscratch.org/"/> for more information on how to 33 get PTYs working.</para> 34 35 <para>Unpack all three GCC tarballs (-core, -g++, and -testsuite) in one and the 36 same working directory. They will all unfold into a single 37 <filename>gcc-&gcc-version;/</filename> subdirectory.</para> 38 39 <para>First correct one problem and make an essential adjustment:</para> 40 41 <screen><userinput>patch -Np1 -i ../&gcc-nofixincludes-patch; 42 patch -Np1 -i ../&gcc-specs-patch;</userinput></screen> 43 44 <para>The first patch disables the GCC "fixincludes" script. We mentioned this 45 briefly earlier, but a slightly more in-depth explanation of the fixincludes 46 process is warranted here. Under normal circumstances, the GCC fixincludes 47 script scans your system for header files that need to be fixed. It might find 48 that some Glibc header files on your host system need to be fixed, fix them and 49 put them in the GCC private include directory. Then, later on in 50 <xref linkend="chapter06"/>, after we've installed the newer Glibc, this 51 private include directory would be searched before the system include 52 directory, resulting in GCC finding the fixed headers from the host system, 53 which would most likely not match the Glibc version actually used for the LFS 54 system.</para> 55 56 <para>The last patch changes GCC's default location of the dynamic linker 57 (typically <filename>ld-linux.so.2</filename>). It also removes 58 <filename class="directory">/usr/include</filename> from GCC's include search 59 path. Patching now rather than adjusting the specs file after installation 60 ensures that our new dynamic linker gets used during the actual build of GCC. 61 That is, all the final (and temporary) binaries created during the build will 62 link against the new Glibc.</para> 63 64 <important><para>These patches are <emphasis>critical</emphasis> in ensuring a 65 successful overall build. Do not forget to apply them.</para></important> 66 67 <para>Create a separate build directory again:</para> 68 69 <screen><userinput>mkdir ../gcc-build 70 cd ../gcc-build</userinput></screen> 71 72 <para>Before starting to build GCC, remember to unset any environment 73 variables that override the default optimization flags.</para> 74 75 <para>Now prepare GCC to be compiled:</para> 76 77 <screen><userinput>../gcc-&gcc-version;/configure --prefix=/tools \ 78 --with-local-prefix=/tools \ 79 --enable-clocale=gnu --enable-shared \ 80 --enable-threads=posix --enable-__cxa_atexit \ 81 --enable-languages=c,c++</userinput></screen> 82 83 <para>The meaning of the new configure options:</para> 84 85 <itemizedlist> 86 <listitem><para><userinput>--enable-threads=posix</userinput>: This enables 87 C++ exception handling for multi-threaded code.</para></listitem> 88 89 <listitem><para><userinput>--enable-__cxa_atexit</userinput>: This option 90 allows use of __cxa_atexit, rather than atexit, to register C++ destructors for 91 local statics and global objects and is essential for fully standards-compliant 92 handling of destructors. It also affects the C++ ABI and therefore results in 93 C++ shared libraries and C++ programs that are interoperable with other Linux 94 distributions.</para></listitem> 95 96 <listitem><para><userinput>--enable-clocale=gnu</userinput>: This option ensures 97 the correct locale model is selected for the C++ libraries under all 98 circumstances. If the configure script finds the <emphasis>de_DE</emphasis> 99 locale installed, it will select the correct model of <emphasis>gnu</emphasis>. 100 However, people who don't install the <emphasis>de_DE</emphasis> locale, run the 101 risk of building ABI incompatible C++ libraries due to the wrong locale model of 102 <emphasis>generic</emphasis> being selected.</para></listitem> 103 104 <listitem><para><userinput>--enable-languages=c,c++</userinput>: This option is 105 needed to ensure that both C and C++ compilers are built.</para></listitem> 106 </itemizedlist> 107 108 <para>Compile the package:</para> 109 110 <screen><userinput>make</userinput></screen> 111 112 <para>There is no need to use the <userinput>bootstrap</userinput> target now, 113 as the compiler we're using to compile this GCC was built from the exact same 114 version of the GCC sources we used earlier.</para> 115 116 <note><para>It's worth pointing out that running the GCC test suite here 117 is considered not as important as running it in 118 <xref linkend="chapter06"/>.</para></note> 119 120 <para>Test the results:</para> 121 122 <screen><userinput>make -k check</userinput></screen> 123 124 <para>The <userinput>-k</userinput> flag is used to make the test suite run 125 through to completion and not stop at the first failure. The GCC test suite is 126 very comprehensive and is almost guaranteed to generate a few failures. To get 127 a summary of the test suite results, run this:</para> 128 129 <screen><userinput>../gcc-&gcc-version;/contrib/test_summary | more</userinput></screen> 130 131 <para>You can compare your results to those posted to the gcc-testresults 132 mailing list for similar configurations to your own. For an example of how 133 current GCC-&gcc-version; should look on i686-pc-linux-gnu, see 134 <ulink url="http://gcc.gnu.org/ml/gcc-testresults/2003-08/msg01612.html"/>.</para> 135 136 <para>Note that the results contain:</para> 137 138 <screen>* 1 XPASS (unexpected pass) for g++ 139 * 1 FAIL (unexpected failure) for g++ 140 * 2 FAIL for gcc 141 * 26 XPASS's for libstdc++</screen> 142 143 <para>The unexpected pass for g++ is due to the use of 144 <userinput>--enable-__cxa_atexit</userinput>. Apparently not all platforms 145 supported by GCC have support for "__cxa_atexit" in their C libraries, so this 146 test is not always expected to pass.</para> 147 148 <para>The 26 unexpected passes for libstdc++ are due to the use of 149 <userinput>--enable-clocale=gnu</userinput>, which is the correct choice on 150 Glibc-based systems of versions 2.2.5 and above. The underlying locale support 151 in the GNU C library is superior to that of the otherwise selected "generic" 152 model (which may be applicable if for instance you were using Newlibc, Sun-libc 153 or whatever libc). The libstdc++ test suite is apparently expecting the 154 "generic" model, hence those tests are not always expected to pass.</para> 155 156 <para>Unexpected failures often cannot be avoided. The GCC developers are 157 usually aware of them but haven't yet gotten around to fixing them. In short, 158 unless your results are vastly different from those at the above URL, it is safe 159 to continue on.</para> 160 161 <para>And finally install the package:</para> 162 163 <screen><userinput>make install</userinput></screen> 164 165 <note><para>At this point it is strongly recommended to repeat the sanity check 166 we performed earlier in the chapter. Refer back to 167 <xref linkend="ch05-locking-glibc"/> and repeat the check. If the results are 168 wrong, then most likely you forgot to apply the above mentioned GCC Specs 169 patch.</para></note> 170 171 </sect2> 9 172 10 173 </sect1>
Note:
See TracChangeset
for help on using the changeset viewer.