Building an ARM cross-toolchain with binutils, gcc, newlib, and gdb from source

I've been planning to write about building custom ARM toolchains for a while (I used stuff from gnuarm.com in the past, but I switched to the lastest and greatest upstream versions at some point). Among other things, recent upstream versions now have ARM Cortex support.

First you will need a few base utilities and libs:

  $ apt-get install flex bison libgmp3-dev libmpfr-dev autoconf texinfo build-essential

Then you can use my tiny build-arm-toolchain script, which will download, build, and install the whole toolchain:

  $ cat build-arm-toolchain
  #!/bin/sh
  # Written by Uwe Hermann <uwe@hermann-uwe.de>, released as public domain.

  TARGET=arm-elf                         # Or: TARGET=arm-none-eabi
  PREFIX=/tmp/arm-cortex-toolchain       # Install location of your final toolchain
  PARALLEL="-j 2"                        # Or: PARALLEL=""

  BINUTILS=binutils-2.19.1
  GCC=gcc-4.3.3
  NEWLIB=newlib-1.17.0
  GDB=gdb-6.8

  export PATH="$PATH:$PREFIX/bin"

  mkdir build

  wget -c http://ftp.gnu.org/gnu/binutils/$BINUTILS.tar.bz2
  tar xfvj $BINUTILS.tar.bz2
  cd build
  ../$BINUTILS/configure --target=$TARGET --prefix=$PREFIX --enable-interwork --enable-multilib \
    --with-gnu-as --with-gnu-ld --disable-nls
  make $PARALLEL
  make install
  cd ..
  rm -rf build/* $BINUTILS $BINUTILS.tar.bz2

  wget -c ftp://ftp.gnu.org/gnu/gcc/$GCC/$GCC.tar.bz2
  tar xfvj $GCC.tar.bz2
  cd build
  ../$GCC/configure --target=$TARGET --prefix=$PREFIX --enable-interwork --enable-multilib \
    --enable-languages="c" --with-newlib --without-headers --disable-shared --with-gnu-as --with-gnu-ld
  make $PARALLEL all-gcc
  make install-gcc
  cd ..
  rm -rf build/* $GCC.tar.bz2

  wget -c ftp://sources.redhat.com/pub/newlib/$NEWLIB.tar.gz
  tar xfvz $NEWLIB.tar.gz
  cd build
  ../$NEWLIB/configure --target=$TARGET --prefix=$PREFIX --enable-interwork --enable-multilib \
    --with-gnu-as --with-gnu-ld --disable-nls
  make $PARALLEL
  make install
  cd ..
  rm -rf build/* $NEWLIB $NEWLIB.tar.gz

  # Yes, you need to build gcc again!
  cd build
  ../$GCC/configure --target=$TARGET --prefix=$PREFIX --enable-interwork --enable-multilib \
    --enable-languages="c,c++" --with-newlib --disable-shared --with-gnu-as --with-gnu-ld
  make $PARALLEL
  make install
  cd ..
  rm -rf build/* $GCC

  wget -c ftp://ftp.gnu.org/gnu/gdb/$GDB.tar.bz2
  tar xfvj $GDB.tar.bz2
  cd build
  ../$GDB/configure --target=$TARGET --prefix=$PREFIX --enable-interwork --enable-multilib
  make $PARALLEL
  make install
  cd ..
  rm -rf build $GDB $GDB.tar.bz2

The final toolchain is located in /tmp/arm-cortex-toolchain per default, and is ca. 170 MB in size. I explicitly created the build script in such a way that it minimizes the amount of disk space used during the build (ca. 1.2 GB or so, compared to more than 3 GB in the "naive" approach).

Using the "-j 2" option for make (see script) you can speed up the build quite a bit on multi-core machines (ca. 30 minutes vs. 60 minutes on an AMD X2 dual-core box). Also, you can change the script to build for other target variants if you want to (arm-elf or arm-none-eabi, for example).

Checkout the blog entry How to build arm gnu gcc toolchain for Mac OS X by Piotr Esden-Tempski for similar instructions for Mac OS X users.

Oh, and while I'm at it — does anybody have any idea why there are no pre-built toolchains for embedded (microcontroller) ARM targets in Debian? There are some toolchains for other microcontroller architectures (avr, m68hc1x, h8300, z80) but not too much other stuff. Is there some specific reason for the missing ARM toolchains (other than "nobody cared enough yet")?

I have heard about Emdebian, but from a quick look that seems to be more intended for toolchains with Linux/libc, not for microcontroller firmware (i.e. no MMU, no Linux, no libc etc.), but maybe I'm wrong?

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Hi Uwe, I try your script in

Hi Uwe,
I try your script in Ubuntu 9.10 and got some error like follow:
-----------------------------------------------------------------------------------------
Wno-char-subscripts -Werror ../../gdb-6.8/gdb/cli/cli-cmds.c
cc1: warnings being treated as errors
../../gdb-6.8/gdb/cli/cli-cmds.c: In function ‘pwd_command’:
../../gdb-6.8/gdb/cli/cli-cmds.c:323: error: ignoring return value of ‘getcwd’, declared with attribute warn_unused_result
make[2]: *** [cli-cmds.o] Error 1
make[2]: Leaving directory `/home/chris/Downloads/build/gdb'
make[1]: *** [install-gdb] Error 2
make[1]: Leaving directory `/home/chris/Downloads/build'
make: *** [install] Error 2
-----------------------------------------------------------------------------------------
please, help me to fix this problem.
thanks!

Newlib-1.180.0

Hi Uwe

I am installing ARM toolchain, and this moment I installed binutils-2.20.51 and gcc-4.3.3 and whit newlib I configure it:

./configure --target=arm-elf --prefix=/home/alejandro/bin/arm-elf --enable-interwork --enable-multilib --with-float=soft --disable-werror

but when I install something happens and will not let me and shows me this error:

./make -j 2

/tmp/ccRfX9Qs.s: Assembler messages:
/tmp/ccRfX9Qs.s:173: Error: selected processor does not support `ldrh w2,[wp2]'
make[9]: *** [lib_a-strcmp.o] Error 1
make[9]: *** Se espera a que terminen otras tareas....
/tmp/ccXSKexr.s: Assembler messages:
/tmp/ccXSKexr.s:87: Error: selected processor does not support `ldrh r2,[r1],#2'
/tmp/ccXSKexr.s:90: Error: selected processor does not support `strneh r2,[ip],#2'
make[9]: *** [lib_a-strcpy.o] Error 1
make[9]: se sale del directorio `/home/alejandro/gnu_arm_toolchain/newlib-1.18.0/arm-elf/nofmult/newlib/libc/machine/arm'
make[8]: *** [all-recursive] Error 1
make[8]: se sale del directorio `/home/alejandro/gnu_arm_toolchain/newlib-1.18.0/arm-elf/nofmult/newlib/libc/machine'
make[7]: *** [all-recursive] Error 1
make[7]: se sale del directorio `/home/alejandro/gnu_arm_toolchain/newlib-1.18.0/arm-elf/nofmult/newlib/libc'
make[6]: *** [all-recursive] Error 1
make[6]: se sale del directorio `/home/alejandro/gnu_arm_toolchain/newlib-1.18.0/arm-elf/nofmult/newlib'
make[5]: *** [all] Error 2
make[5]: se sale del directorio `/home/alejandro/gnu_arm_toolchain/newlib-1.18.0/arm-elf/nofmult/newlib'
make[4]: *** [multi-do] Error 1
make[4]: se sale del directorio `/home/alejandro/gnu_arm_toolchain/newlib-1.18.0/arm-elf/newlib'
make[3]: *** [all-multi] Error 2
make[3]: se sale del directorio `/home/alejandro/gnu_arm_toolchain/newlib-1.18.0/arm-elf/newlib'
make[2]: *** [all] Error 2
make[2]: se sale del directorio `/home/alejandro/gnu_arm_toolchain/newlib-1.18.0/arm-elf/newlib'
make[1]: *** [all-target-newlib] Error 2
make[1]: se sale del directorio `/home/alejandro/gnu_arm_toolchain/newlib-1.18.0'
make: *** [all] Error 2

please, what do I must do to fix this?
thanks for help me

GCC ARM compile from Source

Hi Uwe,

I got the same error 'selected processor does not support `ldrh w2,[wp2]'' . It seams that the
optimized string-functions, in recent newlib-packages do not match all variants of arm,
(see http://sourceware.org/ml/newlib/2009/msg00040.html).

So i took an rather older newlib ( newlib-1.14.0) and the compilation process was successfull (Ubuntu 7.10)...
But it lacks of the variants i expected to get. I nead -mbig-endian, -mcpu=arm7tdmi and Software
FP-Emulation. I found, that the -eabi-work seams to be in progress, but still lacks of the big-endian variant.

I found at http://www.gnuarm.com/support.html#build (it dates from 2006) the hint, that in the script
't-arm-elf' in the GCC-Tree most variants are commented out. This is true even in the most recent
GCC-Source-packages.

I replaced that script and got the libraries i expected - but when i compile a project - it failed with the
statement that the libraries are compiled for FPU (the libraries in the folder
$PREFIX/arm-elf/lib/be/nofmult/ seamed to be compiled with wrong options).

Because the offered binaries at http://www.gnuarm.com/support.html are compiled for 64-Bit Linux,
i had to recompile the source (and still to replace t-arm-elf). I took the versions of binutils, gcc and , newlib which are
linked there and i got all the variants i expected.

I did it the way they mentioned (the first run for gcc with --with-headers=../../newlib-1.14.0/newlib/libc/include).

After the first GCC-compilation the test 'arm-elf-gcc --print-multi-lib' shows all variants wich will
be produced by the newlib-compilation (newlib checks that this way).

I know, thats not the solution for those which nead -meabi and the optimized string-functions, but for me
it works and i hope that this is usefull for others.

don't compiler binutils and gcc ¿Why?

I'm making the same that you say in your scrip but don't compiler and genera a Error mensage I have Ubuntu 9.10

./configure --target=arm-elf --prefix=/home/alejandro/bin/arm-elf --enable-interwork --enable-multilib --with-gnu-as --with-gnu-ld --disable-nls

and

elf32-arm.c:2524: error: ignoring return value of 'asprintf', declared with attribute warn_unused_result
elf32-arm.c: In function 'find_arm_glue':
elf32-arm.c:2557: error: ignoring return value of 'asprintf', declared with attribute warn_unused_result
make[4]: *** [elf32-arm.lo] Error 1
make[4]: se sale del directorio `/home/alejandro/ARM/binutils-2.17.90/bfd'
make[3]: *** [all-recursive] Error 1
make[3]: se sale del directorio `/home/alejandro/ARM/binutils-2.17.90/bfd'
make[2]: *** [all] Error 2
make[2]: se sale del directorio `/home/alejandro/ARM/binutils-2.17.90/bfd'
make[1]: *** [all-bfd] Error 2
make[1]: se sale del directorio `/home/alejandro/ARM/binutils-2.17.90'
make: *** [all] Error 2

what is my error??

Solution

Ok, look you are using Ubuntu 9.10 and you have to write that:

#export PATH=$PATH:/home/alejandro/bin/arm-elf/bin

#cd binutils-2.17.90
#./configure --target=arm-elf --prefix=/home/alejandro/bin/arm-elf --enable-interwork --enable-multilib --with-float=soft --disable-werror
#make all install
#cd..

ever you write --disable-werror when configure arm-toolchain Ok
tell me then what happen

alejandro is my name ok /home/my-name/ in your case /home/your-name/ in prefix

Compilation problem in toolchain use

I built the toolchain on Mandriva 2009 for arm-none-eabi targets. When using the toolchain, I see an error indicating "recognized option `-meabi=4' ". On further research, it appears that new arm-none-eabi-gcc is calling the "stock" assember. I notice that other toolchains (such as sourcery) generate an arm-none-eabi-gcc and arm-none-eabi-as. Have I missed something? Any suggestions? Thanks

Ubuntu 9.04 32bit compilation

To successfully compile under Ubuntu 9.04 i386:
- install libncurses5-dev
- use --disable-werror, at least for gdb

the toolchain cannot be created

Hi Uwe,
Please can you help me?
I've tried your script, but I've got some errors at making GDB. I've got something like:

libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../../gdb-6.8/bfd -I. -I. -I../../gdb-6.8/bfd -I../../gdb-6.8/bfd/../include -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror -g -O2 -c ../../gdb-6.8/bfd/elf32-arm.c -o elf32-arm.o
cc1: warnings being treated as errors
In file included from ../../gdb-6.8/bfd/elf32-arm.c:10432:

and then a lot of errors:

./elf32-target.h:683: error: initialization from incompatible pointer type
./elf32-target.h:686: error: initialization from incompatible pointer type
./elf32-target.h:688: error: initialization from incompatible pointer type
./elf32-target.h:691: error: initialization from incompatible pointer type
./elf32-target.h:692: error: initialization from incompatible pointer type
./elf32-target.h:694: error: initialization from incompatible pointer type
./elf32-target.h:695: error: initialization from incompatible pointer type
./elf32-target.h:696: error: initialization from incompatible pointer type
./elf32-target.h:700: error: initialization from incompatible pointer type
./elf32-target.h:702: error: initialization from incompatible pointer type
./elf32-target.h:703: error: initialization from incompatible pointer type
./elf32-target.h:704: error: initialization from incompatible pointer type
./elf32-target.h:706: error: initialization from incompatible pointer type
./elf32-target.h:707: error: initialization from incompatible pointer type
./elf32-target.h:708: error: initialization from incompatible pointer type
./elf32-target.h:709: error: initialization makes integer from pointer without a cast
./elf32-target.h:712: error: initialization from incompatible pointer type
./elf32-target.h:713: error: initialization makes integer from pointer without a cast
./elf32-target.h:714: error: initialization makes pointer from integer without a cast
./elf32-target.h:716: error: initialization from incompatible pointer type
./elf32-target.h:717: error: initialization makes integer from pointer without a cast
./elf32-target.h:718: error: large integer implicitly truncated to unsigned type
./elf32-target.h:731: error: large integer implicitly truncated to unsigned type
./elf32-target.h:736: error: excess elements in struct initializer
./elf32-target.h:736: error: (near initialization for 'elf32_bed')
./elf32-target.h:738: error: excess elements in struct initializer
./elf32-target.h:738: error: (near initialization for 'elf32_bed')
In file included from ../../gdb-6.8/bfd/elf32-arm.c:10497:
./elf32-target.h:683: error: initialization from incompatible pointer type
./elf32-target.h:686: error: initialization from incompatible pointer type
./elf32-target.h:688: error: initialization from incompatible pointer type
./elf32-target.h:691: error: initialization from incompatible pointer type
./elf32-target.h:692: error: initialization from incompatible pointer type
./elf32-target.h:694: error: initialization from incompatible pointer type
./elf32-target.h:695: error: initialization from incompatible pointer type
./elf32-target.h:696: error: initialization from incompatible pointer type
./elf32-target.h:700: error: initialization from incompatible pointer type
./elf32-target.h:702: error: initialization from incompatible pointer type
./elf32-target.h:703: error: initialization from incompatible pointer type
./elf32-target.h:704: error: initialization from incompatible pointer type
./elf32-target.h:706: error: initialization from incompatible pointer type
./elf32-target.h:707: error: initialization from incompatible pointer type
./elf32-target.h:708: error: initialization from incompatible pointer type
./elf32-target.h:709: error: initialization makes integer from pointer without a cast
./elf32-target.h:712: error: initialization from incompatible pointer type
./elf32-target.h:713: error: initialization makes integer from pointer without a cast
./elf32-target.h:714: error: initialization makes pointer from integer without a cast
./elf32-target.h:716: error: initialization from incompatible pointer type
./elf32-target.h:717: error: initialization makes integer from pointer without a cast
./elf32-target.h:718: error: large integer implicitly truncated to unsigned type
./elf32-target.h:731: error: large integer implicitly truncated to unsigned type
./elf32-target.h:736: error: excess elements in struct initializer
./elf32-target.h:736: error: (near initialization for 'elf32_arm_vxworks_bed')
./elf32-target.h:738: error: excess elements in struct initializer
./elf32-target.h:738: error: (near initialization for 'elf32_arm_vxworks_bed')
In file included from ../../gdb-6.8/bfd/elf32-arm.c:10649:
./elf32-target.h:683: error: initialization from incompatible pointer type
./elf32-target.h:686: error: initialization from incompatible pointer type
./elf32-target.h:688: error: initialization from incompatible pointer type
./elf32-target.h:691: error: initialization from incompatible pointer type
./elf32-target.h:692: error: initialization from incompatible pointer type
./elf32-target.h:694: error: initialization from incompatible pointer type
./elf32-target.h:695: error: initialization from incompatible pointer type
./elf32-target.h:696: error: initialization from incompatible pointer type
./elf32-target.h:700: error: initialization from incompatible pointer type
./elf32-target.h:702: error: initialization from incompatible pointer type
./elf32-target.h:703: error: initialization from incompatible pointer type
./elf32-target.h:704: error: initialization from incompatible pointer type
./elf32-target.h:706: error: initialization from incompatible pointer type
./elf32-target.h:707: error: initialization from incompatible pointer type
./elf32-target.h:708: error: initialization from incompatible pointer type
./elf32-target.h:709: error: initialization makes integer from pointer without a cast
./elf32-target.h:712: error: initialization from incompatible pointer type
./elf32-target.h:713: error: initialization makes integer from pointer without a cast
./elf32-target.h:716: error: initialization from incompatible pointer type
./elf32-target.h:717: error: initialization makes integer from pointer without a cast
./elf32-target.h:718: error: large integer implicitly truncated to unsigned type
./elf32-target.h:731: error: large integer implicitly truncated to unsigned type
./elf32-target.h:736: error: excess elements in struct initializer
./elf32-target.h:736: error: (near initialization for 'elf32_arm_symbian_bed')
./elf32-target.h:738: error: excess elements in struct initializer
./elf32-target.h:738: error: (near initialization for 'elf32_arm_symbian_bed')
make[3]: *** [elf32-arm.lo] Error 1
make[3]: Leaving directory `/home/fabrice/build/bfd'
make[2]: *** [install-recursive] Error 1
make[2]: Leaving directory `/home/fabrice/build/bfd'
make[1]: *** [install-bfd] Error 2
make[1]: Leaving directory `/home/fabrice/build'
make: *** [install] Error 2

How can I fix it?

Lack of prebuild ARM packages for Debian

Hi Uwe,

I totally agree with you that it is a shame that there is no prebuild ARM cross-development packages for debian. Ordinary embedded software developer usually is not fluent in configuration and building compilers. I managed to build it myself, but the struggle with correct dependencies was horrible. I hope someone will add that kind of software package to Debian distribution soon.

Regards,
Adam

Script for glibc

Hi Uwe,

I need to build a version with glibc 2.9 instead of newlib. Do you think that just replacing the NEWLIB environment and tar location will do, or this is totally different.

How do I change the script to creats also libraries and libc header files?

Thanks,
Avi.

libgcc

Hmmm... so I was able to get a working compiler this way, but libgcc was apparently built with hardware floating point, which is unfortunate because it contains all of the soft floating point functions, which ld refuses to link to. Is there some way around this?

--with-float=soft

Untested, but I guess you could use an additional --with-float=soft when building the tools. Please let me know if it works for you.

it doesn't work

it doesn't work

It kind of worked - I can

It kind of worked - I can now link against libgcc.a. On the other hand, it appears to have compiled the floating point functions as ARM functions, with interworking, which probably won't work so well on a cortex-m3.

Any idea why my gcc build

Any idea why my gcc build fails with ${PREFIX}/arm-linux/bin/as: unrecognized option '-Qy' ? Does this happen to anyone else?

THANKS!

That makes perfect sense. I've been working on that all day and tried everything. Little did I know that's what that meant.

Everything works like a charm now. Thanks again!

Check your $PATH

I had the same problem, it turns out, I had "::" in my PATH (for example echo $PATH /usr/local/bin::/usr/bin:/bin). Which is the same as having a "." in your PATH. This breaks GCC compilation at some point, because it tries to run "as" in a directory where it just compiled the assembler for the embedded system. So just check that your PATH is clean, for example by running "export PATH=/usr/local/bin:/usr/bin:/bin" before running Uwe's script.

PREFIX\include

hi uwe,

i've tried your workflow slightly edited with MinGW/MSYS. all works fine but i get no header files into $PREFIX\include. can you tell me why?
is there a option i've missed or have they copied manually?

best regards

includes

I think that's ok, my $PREFIX/include/ is also empty, all the files are in $PREFIX/arm-elf/include/, $PREFIX/lib/gcc/arm-elf/4.3.3/install-tools/include, and $PREFIX/lib/gcc/arm-elf/4.3.3/include.

Where is the as ?

I generated the toolchain using your method. My target is the LM3S8962 cortex-m3.
When I try to compile a simple example, I get this output:

arm-elf-gcc -c "-DPART_LM3S8962" -mthumb -mcpu=cortex-m3 -MD -std=c99 -o "Debug/hello.o" -I../../StellarisWare "hello.c"
as: unrecognized option '-mcpu=cortex-m3'
make: *** [Debug/hello.o] Error 1

The compiler tries to use native assembler, that cannot understand Arm code.
Your script doesn't generate assembler and linker: in the final installation dir, arm-elf-as and arm-elf-ld are missing, and arm-elf-gcc tries to run as. Is it correct ?

Removing trailing spaces

Hi David,

this is maybe a problem of copy-and-paste. Removing trailing spaces just after the backslash in line 21 (../$(BINUTILS)/configure ... \ ) should fix your problem!

Kudos to Uwe Hermann for providing this nice script!

Regards,
Stefan

It's not a trailing space problem

Hi Stefan,
Thanks for the suggestion, but I downloaded the script using the link, and it has no any line break
Any other idea ?

Can't confirm that here, I

Can't confirm that here, I have arm-elf-as and arm-elf-ld in my bin/ directory. Are you sure you did the export PATH="$PATH:$PREFIX/bin" part as in the script (before running the build of the toolchain) as well as adding the respective bin/ dir to your PATH (e.g. in ~/.bashrc) after the build, so that the tools can be found?

Problem solved

I found the problem:
http://www.mail-archive.com/bug-binutils@gnu.org/msg06475.html
binutils failed compilation of gas, ld was missing because it's compiled after gas.
I'm sorry I didn't check enough my compilation report.

gas not compiling

Hi,
First, thanks for a great script. It has helped a lot.

I am getting the same error compiling using Ubuntu 9.04
I have ensured that libncurses5-dev is installed and that --disable-werror is included for the $GDB build.
I followed the http://www.mail-archive.com/bug-binutils@gnu.org/msg06475.html
which indicates that it was applied to the sources for binutils.

But I still get the error. I am getting the right sources?
Should I specify --disable-werror for all under Ubuntu?

Here is where it fails:

gcc -DHAVE_CONFIG_H -I. -I../../binutils-2.19.1/gas -I. -I. -I../../binutils-2.19.1/gas -I../bfd -I../../binutils-2.19.1/gas/config -I../../binutils-2.19.1/gas/../include -I../../binutils-2.19.1/gas/.. -I../../binutils-2.19.1/gas/../bfd -DLOCALEDIR="\"/tmp/arm-cortex-toolchain/share/locale\"" -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror -g -O2 -c ../../binutils-2.19.1/gas/config/tc-arm.c
cc1: warnings being treated as errors
../../binutils-2.19.1/gas/config/tc-arm.c: In function ‘s_arm_unwind_save_mmxwr’:
../../binutils-2.19.1/gas/config/tc-arm.c:3459: error: format not a string literal and no format arguments
../../binutils-2.19.1/gas/config/tc-arm.c:3473: error: format not a string literal and no format arguments
../../binutils-2.19.1/gas/config/tc-arm.c: In function ‘s_arm_unwind_save_mmxwcg’:
../../binutils-2.19.1/gas/config/tc-arm.c:3591: error: format not a string literal and no format arguments
../../binutils-2.19.1/gas/config/tc-arm.c:3606: error: format not a string literal and no format arguments
../../binutils-2.19.1/gas/config/tc-arm.c: In function ‘s_arm_unwind_movsp’:
../../binutils-2.19.1/gas/config/tc-arm.c:3712: error: format not a string literal and no format arguments
make[3]: *** [tc-arm.o] Error 1
make[3]: Leaving directory `/home/john/workspace/te/build/gas'

Path exported

Hi Hermann,
I'm using Kubuntu 8.10, I added it to PATH in etc/environment.
Anyway, I'm using your full script, so it's executed by the script at the start.
In your script I changed only the "PREFIX=" line at start, to point at my cortex compiler dir.
The ls of the PREFIX/bin at end of work reported:

arm-elf-addr2line arm-elf-cpp arm-elf-gccbug arm-elf-objdump arm-elf-size
arm-elf-ar arm-elf-g++ arm-elf-gcov arm-elf-ranlib arm-elf-strings
arm-elf-c++ arm-elf-gcc arm-elf-nm arm-elf-readelf arm-elf-strip
arm-elf-c++filt arm-elf-gcc-4.3.3 arm-elf-objcopy arm-elf-run

P.S.: For the same problem, the script fails in compiling arm-elf-gdb.

For the parallel stuff I

For the parallel stuff I use:
PARALLEL=-j`getconf _NPROCESSORS_ONLN`

getconf _NPROCESSORS_ONLN

Nice, thanks!

Hi

Hi,

I tried your toolchain to compile a cortex device, beagleboard kernel, i am getting this error:

LD arch/arm/boot/compressed/vmlinux
arm-elf-ld: ERROR: arch/arm/boot/compressed/misc.o uses VFP instructions, whereas arch/arm/boot/compressed/vmlinux does not
arm-elf-ld: failed to merge target specific data of file arch/arm/boot/compressed/misc.o
make[2]: *** [arch/arm/boot/compressed/vmlinux] Error 1
make[1]: *** [arch/arm/boot/compressed/vmlinux] Error 2
make: *** [zImage] Error 2

Best Regards

beagleboard

Not sure this is the correct toolchain for that use-case, you probably need arm-linux-* or similar. Please check beagleboard-specific resources for more info, I don't know too much about that.