Adding a toolchain

Introduction [edit section]

In order to build tests for your target board, you need to install a toolchain (often in the form of an SDK) into the Fuego system, and let Fuego know how to access it.

Adding a toolchain to Fuego consists of these steps:

Obtain a toolchain [edit section]

First, you need to obtain a toolchain that will work with your board. You should have a toolchain that produces software which will work with the Linux distribution on your board. This is usually obtained from your build tool, if you are building the distribution yourself, or from your semiconductor supplier or embedded Linux OS vendor, if you have been provided the Linux distribution from an external source.

Installing a Debian cross-toolchain target [edit section]

If you are using an Debian-based target, then to get started, you may use a script to install a cross-compiler toolchain into the container. For example, for an ARM target, you might want to install the Debian armv7hf toolchain. You can even try a Debian toolchain with other Linux distributions. However, if you are not using Debian on your target board, there is no guarantee that this will produce correct software for your board. It is much better to install your own SDK for your board into the fuego system.

To install a Debian cross toolchain into the container, get to the shell prompt in the container and use the following script:

To use the script, pass it the argument naming the cross-compile architecture you are using. Available values are:

Execute the script, inside the docker container, with a single command-line option to indicate the cross-toolchain to install. You can use the script more than once, if you wish to install multiple toolchains.

Example:

The Debian packages for the specified toolchain will be installed into the docker container.

Building a Yocto Project SDK [edit section]

When you build an image in the Yocto Project, you can also build an SDK to go with that image using the '-c do_populate_sdk' build step with bitbake.

To build the SDK in Yocto Project, inside your yocto build directory do:

This will build an SDK archive (containing the toolchain, header files and libraries needed for creating software on your target, and put it into the directory <build-root>/tmp/deploy/sdk/

For example, if you are building the 'core-image-minimal' image, you would execute:

At this step look in tmp/deploy/sdk and note the name of the sdk install package (the file ending with .sh).

Install the SDK in the docker container [edit section]

To allow fuego to use the SDK, you need to install it into the fuego docker container. First, transfer the SDK into the container using docker cp.

With the container running, on the host machine do:

This last command will place the SDK install package into the /tmp directory in the container.

Now, install the SDK into the container, whereever you would like. Many toolchains install themselves under /opt.

At the shell inside the container, run the SDK install script (which is a self-extracting archive):

These instructions are for an SDK built by the Yocto Project. Similar instructions would apply for installing a different toolchain or SDK. That is, get the SDK into the container, then install it inside the container.

Create a -tools.sh file for the toolchain [edit section]

Now, fuego needs to be told how to interact with the toolchain. During test execution, the fuego system determines what toolchain to use based on the value of the TOOLCHAIN variable in the board file for the target under test. The TOOLCHAIN variable is a string that is used to select the appropriate '<TOOLCHAIN>-tools.sh' file in /fuego-ro/toolchains.

You need to determine a name for this TOOLCHAIN, and then create a file with that name, called $TOOLCHAIN-tools.sh. So, for example if you created an SDK with poky for the qemuarm image, you might call the TOOLCHAIN "poky-qemuarm". You would create a file called "poky-qemuarm-tools.sh"

The -tools.sh file is used by Fuego to define the environment variables needed to interact with the SDK. This includes things like CC, AR, and LD. The complete list of variables that this script neeeds to provide are described on the page tools.sh

Inside the -tools.sh file, you execute instructions that will set the environment variables needed to build software with that SDK. For an SDK built by the Yocto Project, this involves setting a few variables, and calling the environment-setup... script that comes with the SDK. For SDKs from other sources, you can define the needed variables by directly exporting them.

Here is an example of the tools.sh script for poky-qemuarm. This is in the sample file /fuego-ro/toolchains/poky-qemuarm-tools.sh:

Reference the toolchain in a board file [edit section]

Now, to use that SDK for building test software for a particular target board, set the value of the TOOLCHAIN variable in the board file for that target.

Edit the board file:

And add (or edit) the line:

Notes [edit section]

Python execution [edit section]

You may notice that some of the example scripts set the environment variable ORIG_PATH. This is used by the function run_python internally to execute the container's default python interpreter, instead of the interpreter that was built by the Yocto Project.