The toolchain is always your starting point; everything that follows from that is dependent on having a working, reliable toolchain.
Most embedded build environments are based on a cross development toolchain, which creates a clear separation between a powerful host computer building the code and a target computer on which it runs. The toolchain itself consists of the GNU binutils, a C compiler from the GNU compiler collection—and quite likely the C++ compiler as well—plus one of the C libraries I have described. Usually, the GNU debugger, GDB, will be generated at this point, which I describe in Chapter 14, Debugging with GDB. Also, keep a watch out for the Clang compiler, as it will develop over the next few years.
You may start with nothing but a toolchain—perhaps built using crosstool-NG or downloaded from Linaro—and use it to compile all...