5.6. Cross Binutils-2.17

The Binutils package contains a linker, an assembler, and other tools for handling object files.

5.6.1. Installation of Cross Binutils

It is important that Binutils be the first package compiled because both Glibc and GCC perform various tests on the available linker and assembler to determine which of their own features to enable.

To make sure that the proper syntax is used for a couple of tools, apply the following patch:

patch -Np1 -i ../binutils-2.17-posix-1.patch

The following patch makes Binutils search in both the lib and lib64 directories in a multilib environment:

patch -Np1 -i ../binutils-2.17-genscripts_multilib-1.patch

The Binutils documentation recommends building Binutils outside of the source directory in a dedicated build directory:

mkdir -v ../binutils-build
cd ../binutils-build

Prepare Binutils for compilation:

../binutils-2.17/configure --prefix=/cross-tools \
   --host=${LFS_HOST} --target=${LFS_TARGET} --with-lib-path=/tools/lib \
   --disable-nls --enable-shared --enable-64-bit-bfd

The meaning of the configure options:

--prefix=/cross-tools

This tells the configure script to prepare to install the package in the /cross-tools directory.

--host=${LFS_HOST}

When used with --target, this creates a cross-architecture executable that creates files for ${LFS_TARGET} but runs on ${LFS_HOST).

--target=${LFS_TARGET}

When used with --host, this creates a cross-architecture executable that creates files for ${LFS_TARGET} but runs on ${LFS_HOST).

--with-lib-path=/tools/lib

This tells the configure script to specify the library search path during the compilation of Binutils, resulting in /tools/lib being passed to the linker. This prevents the linker from searching through library directories on the host.

--disable-nls

This disables internationalization as i18n is not needed for the cross-compile tools.

--enable-shared

Enable the creation of the shared libraries.

--enable-64-bit-bfd

This adds 64 bit support to binutils.

Compile the package:

make configure-host
make

The meaning of the make options:

configure-host

This checks the host environment and makes sure all the necessary tools are available to compile binutils.

Install the package:

make install

Copy the libiberty.h file to /tools/include directory:

cp -v ../binutils-2.17/include/libiberty.h /tools/include

Details on this package are located in Section 10.10.2, “Contents of Binutils.”