Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 5.5. GCC-4.7.1 - Pass 1
- The GCC package contains the GNU compiler collection, which includes the C and C++ compilers.
- Approximate build time: 5.5 SBU
- Required disk space: 1.4 GB
- 5.5.1. Installation of Cross GCC
- GCC now requires the GMP, MPFR and MPC packages. As these packages may not be included in your host
- distribution, they will be built with GCC. Unpack each package into the GCC source directory and rename the
- resulting directories so the GCC build procedures will automatically use them:
- Note
- There are frequent misunderstandings about this chapter. The procedures are the same as every other chapter
- as explained earlier (Package build instructions). First extract the gcc tarball from the sources directory and
- then change to the directory created. Only then should you proceed with the instructions below.
- tar -Jxf ../mpfr-3.1.1.tar.xz
- mv -v mpfr-3.1.1 mpfr
- tar -Jxf ../gmp-5.0.5.tar.xz
- mv -v gmp-5.0.5 gmp
- tar -zxf ../mpc-1.0.tar.gz
- mv -v mpc-1.0 mpc
- The following command will change the location of GCC's default dynamic linker to use the one installed in / tools.
- It also removes / usr/ include from GCC's include search path. Issue:
- for file in \
- $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)
- do
- cp -uv $file{,.orig}
- sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
- -e 's@/usr@/tools@g' $file.orig > $file
- echo '
- #undef STANDARD_STARTFILE_PREFIX_1
- #undef STANDARD_STARTFILE_PREFIX_2
- #define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
- #define STANDARD_STARTFILE_PREFIX_2 ""' >> $file
- touch $file.orig
- done
- In case the above seems hard to follow, let's break it down a bit. First we find all the files under the gcc/ config
- directory that are named either linux. h, linux64. h or sysv4. h. For each file found, we copy it to a file of the
- same name but with an added suffix of “.orig”. Then the first sed expression prepends “/tools” to every instance of
- “/lib/ld”, “/lib64/ld” or “/lib32/ld”, while the second one replaces hard-coded instances of “/usr”. Next, we add our
- define statements which alter the default startfile prefix to the end of the file. Note that the trailing “/” in “/tools/lib/”
- is required. Finally, we use touch to update the timestamp on the copied files. When used in conjunction with cp -u,
- this prevents unexpected changes to the original files in case the commands are inadvertently run twice.
- Linux From Scratch - Version 7.2
- 39
- GCC doesn't detect stack protection correctly, which causes problems for the build of Glibc-2.16.0, so fix that by
- issuing the following command:
- sed -i '/k prot/agcc_cv_libc_provides_ssp=yes' gcc/configure
- The GCC documentation recommends building GCC outside of the source directory in a dedicated build directory:
- mkdir -v ../gcc-build
- cd ../gcc-build
- Prepare GCC for compilation:
- ../gcc-4.7.1/configure \
- --target=$LFS_TGT \
- --prefix=/tools \
- --with-sysroot=$LFS \
- --with-newlib \
- --without-headers \
- --with-local-prefix=/tools \
- --with-native-system-header-dir=/tools/include \
- --disable-nls \
- --disable-shared \
- --disable-multilib \
- --disable-decimal-float \
- --disable-threads \
- --disable-libmudflap \
- --disable-libssp \
- --disable-libgomp \
- --disable-libquadmath \
- --enable-languages=c \
- --with-mpfr-include=$(pwd)/../gcc-4.7.1/mpfr/src \
- --with-mpfr-lib=$(pwd)/mpfr/src/.libs
- The meaning of the configure options:
- --with-newlib
- Since a working C library is not yet available, this ensures that the inhibit_libc constant is defined when building
- libgcc. This prevents the compiling of any code that requires libc support.
- --without-headers
- When creating a complete cross-compiler, GCC requires standard headers compatible with the target system.
- For our purposes these headers will not be needed. This switch prevents GCC from looking for them.
- --with-local-prefix=/tools
- The local prefix is the location in the system that GCC will search for locally installed include files. The default
- is / usr/ local. Setting this to / tools helps keep the host location of / usr/ local out of this GCC's
- search path.
- --with-native-system-header-dir=/tools/include
- By default GCC searches / usr/ include for system headers. In conjunction with the sysroot switch, this
- would translate normally to $LFS/ usr/ include. However the headers that will be installed in the next two
- Linux From Scratch - Version 7.2
- 40
- sections will go to $LFS/ tools/ include. This switch ensures that gcc will find them correctly. In the
- second pass of GCC, this same switch will ensure that no headers from the host system are found.
- --disable-shared
- This switch forces GCC to link its internal libraries statically. We do this to avoid possible issues with the host
- system.
- --disable-decimal-float, --disable-threads, --disable-libmudflap,
- --disable-libssp, --disable-libgomp, --disable-libquadmath
- These switches disable support for the decimal floating point extension, threading, libmudflap, libssp and
- libgomp and libquadmath respectively. These features will fail to compile when building a cross-compiler and
- are not necessary for the task of cross-compiling the temporary libc.
- --disable-multilib
- On x86_64, LFS does not yet support a multilib configuration. This switch is harmless for x86.
- --enable-languages=c
- This option ensures that only the C compiler is built. This is the only language needed now.
- Compile GCC by running:
- make
- Compilation is now complete. At this point, the test suite would normally be run, but, as mentioned before, the test
- suite framework is not in place yet. The benefits of running the tests at this point are minimal since the programs
- from this first pass will soon be replaced.
- Install the package:
- make install
- Using - - disable- shared means that the libgcc_ eh. a file isn't created and installed. The Glibc package
- depends on this library as it uses - lgcc_ eh within its build system. This dependency can be satisfied by creating a
- symlink to libgcc. a, since that file will end up containing the objects normally contained in libgcc_ eh. a:
- ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | sed 's/libgcc/&_eh/'`
- Details on this package are located in Section 6.17.2, “Contents of GCC.”
Add Comment
Please, Sign In to add comment