GCC Cross-Compiler on Debian Linux

From OSDev Wiki

Jump to: navigation, search

For some reason the repositories are currently broken. I'm trying to figure out why. JackScott 05:42, 20 July 2010 (UTC)

By far the easiest way to obtain a GCC Cross-Compiler, if you are running Debian GNU/Linux or Ubuntu Linux, is to install one of the binary packages built by bored forum members. Getting set up is fairly easy, and once done, you will get automatically updated to newer versions of GCC soon after they come out. The compiler set includes support for C and C++, as well as libgcc.

The package and repository system is designed so that multiple cross-compiler targets (for instance, both i586-elf and powerpc-elf) can be installed on a system without any clashes.

Note to Debian users: the following code examples assume you have sudo installed on your system.

Contents

Prerequisites

Firstly, you'll need to have an up to date Debian or Ubuntu system. If you are using another operating system, these cross compilers won't work.

Secondly, you need to understand that these packages have no warranty. While several users are using them on production servers, it is NOT RECOMMENDED. Any damage (including data loss) caused is not the fault of any of the package maintainers, or the mirror owners.

Setting Up

Step 1: Add an Archive to /etc/apt/sources.list

Run the following from the command line:

sudo nano /etc/apt/sources.list

And then the following line (anywhere in the file will do):

deb http://www.pedigree-project.org/debian/ stable main    #Primary Mirror. Hosted by OrOS.
deb http://www.tucs.org.au/~jscott4/debian/ stable main    #Primary Mirror. Hosted by University of Tasmania.

After you've added the line, use Ctrl+X to exit, remembering to save the file.

Step 2: Add the OpenPGP Signing Public Key

At the moment we aren't currently signing packages... this will happen in the near future.

Like both the Debian and Ubuntu official repositories, the OSDev package repository uses OpenPGP signing (implemented by GPG) to check the validity of the packages downloaded. This step isn't strictly necessary, but not doing it makes for some annoying warning messages. To import the key and use it for checking packages, run the following from the command line:

gpg --recv-keys 0x2F90DE4A
gpg -a --export 0x2F90DE4A | sudo apt-key add -

If you want, you can check the details of the key before importing it by visiting this page.

Step 3: Update the Package Lists

Run the following from the command line:

sudo apt-get update

Installing A Cross-Compiler

Step 1: Checking the Package You Want Exists

Unfortunately, packages don't exist for every single target architecture (the machine you want to compile for) and every host architecture (the machine you are doing the compiling on). You can check the packages that have been built in the table below.

The target architecture names running across the top of the table should be substituted for $TARGET in Step 2. Note that x86_64-elf has been renamed x86-64-elf for the purposes of installing the packages. The host architectures run down the table.

i586-elf x86-64-elf powerpc-elf sparc-elf ia64-elf
i386 Yes Yes Yes Yes Yes
AMD64 Yes Yes Yes Yes Yes

Step 2: Installing the Package

Run the following from the command line:

sudo apt-get install osdev-crosscompiler-$TARGET

Replace $TARGET with the name of a target architecture, as described in step 1. For instance, for a "standard" i586-elf cross-compiler for compiling the Bare Bones:

sudo apt-get install osdev-crosscompiler-i586-elf

Using Your Cross-Compiler

The package, upon installation, will set up your $PATH variable so that upon your next login you have immediate access to the cross compilers. To use one of the tools (for example, GCC), run like the following:

x86_64-elf-gcc -c myFile.c -o myFile.o

This same pattern (TARGET-gcc, TARGET-ld, etc) is the same for all tools in the GCC and Binutils collection.

The Internals: How It All Works

TODO

The short story: voodoo magic.

Need Help?

Ask a question in the forum. Alternatively, contact the following people for support:

  • JackScott - Package Maintainer, Main Server Owner

Want To Help?

TODO

See Also

Articles

External Links

Personal tools