| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | <sect2><title> </title><para> </para></sect2><sect2><title>Installation of GCC</title><para>We won't be needing a C++ compiler until Chapter 6. So, onlythe gcc-core tarball needs to be unpacked at this time.</para><para>This package is known to behave badly when you have changed itsdefault optimization flags (including the -march and -mcpu options). GCC isbest left alone. Therefore, if you have defined any environment variablesthat override default optimizations, such as CFLAGS and CXXFLAGS, werecommend unsetting or modifying them when building GCC. You havebeen warned.</para><para>It is recommended by the GCC installation documentation to buildGCC outside of the source directory in a dedicated directory:</para><para><screen><userinput>mkdir ../gcc-buildcd ../gcc-build</userinput></screen></para><para>Prepare GCC to be compiled:</para><para><screen><userinput>../gcc-&gcc-version;/configure --prefix=/static \   --disable-nls --disable-shared \   --with-as=$LFS/static/bin/as \   --with-ld=$LFS/static/bin/ld</userinput></screen></para><para>The meaning of the configure options are:</para><itemizedlist><listitem><para><userinput>--prefix=/static:</userinput> This is NOT atypo. GCC hard codes some paths while compiling and so we need to pass<filename class="directory">/static</filename> as the prefix during theconfigure stage. We pass the real install prefix during the installationstage later on.</para></listitem><listitem><para><userinput>--disable-shared:</userinput> This prevents thebuild of dynamic libraries. They are useless to us at the moment. We'llcreate them when we reinstall GCC in chapter 6.</para></listitem><listitem><para><userinput>--with-as=$LFS/static/bin/as and--with-ld=$LFS/static/bin/ld:</userinput> GCC can be miscompiled if yourhost distribution's Binutils package is quite old. We need a good workingstatic GCC until we reinstall GCC later in chapter 6. So by using<filename>as</filename> and <filename>ld</filename> from the Binutilspackage we compiled earlier in this chapter we ensure that GCC will workcorrectly.</para></listitem></itemizedlist><para>Continue with compiling the package:</para><para><screen><userinput>make BOOT_LDFLAGS="-static" bootstrap</userinput></screen></para><para>The meaning of the make options are:</para><itemizedlist><listitem><para><userinput>BOOT_LDFLAGS="-static":</userinput> This isGCC's equivalent to make LDFLAGS="-static" as we use with other packages tocompile them statically.</para></listitem><listitem><para><userinput>bootstrap:</userinput> The<emphasis>bootstrap</emphasis> target doesn't just compile GCC, but itcompiles GCC a second time. It uses the first compiled programs to compileitself a second and third time to make sure the compiler compiled properlyand can compile itself properly.</para></listitem></itemizedlist><para>And finish off installing the package:</para><para><screen><userinput>make prefix=$LFS/static install-no-fixedincludes</userinput></screen></para><para>The meaning of the make option is:</para><itemizedlist><listitem><para><userinput>install-no-fixedincludes:</userinput> This preventsthe fixincludes script from running. Preventing this is necessary becauseunder normal circumstances the GCC installation will run the fixincludesscript which scans your system for header files that need to be fixed. Itmight find that the Glibc header files of your host system need to be fixed.If so, it will fix them and put them in<filename>$LFS/static/lib/gcc-lib/i686-pc-linux-gnu/3.2</filename>. Later onin chapter 6 you will install Glibc which will put its header files in<filename>/usr/include</filename>. Next you will install other programs thatuse the Glibc headers. GCC will look in<filename>/static/lib/gcc-lib</filename> before looking in<filename>/usr/include</filename>, with the result of finding and using thefixed Glibc header files from your host distribution, which are probablyincompatible with the Glibc version actually used on the LFSsystem.</para></listitem></itemizedlist><para>As the finishing touch we'll create the <filenameclass="symlink">$LFS/static/bin/cc</filename> symlink. A lot of programsand scripts try to run <userinput>cc</userinput> instead of<userinput>gcc</userinput> This is to keep programs generic and usable onall kinds of Unix systems. Not everybody has GNU CC installed. Just runningcc (C Compiler) leaves the user free to decide which C compiler to install.The symlink will point to the system's default compiler.</para><para><screen><userinput>ln -s gcc $LFS/static/bin/cc</userinput></screen></para></sect2>
 |