What is Toolchain?
- A toolchain is a collection of programming tools.
- It consists of a compiler, linker, assembler, and a debugger.
- The GNU toolchain is a programming tools produced by the GNU Project.
The toolchain used for embedded development is a cross toolchain (cross compiler). In other words, when the host and target architectures are different, the toolchain is called a cross compiler (e.g. if we develop a code on a Linux machine based on the x64 architecture, but we're compiling for an ARM target, then we need Linux-based ARM-targeting cross compiler).
When talking about toolchains, one must distinguish three different machines:
- the build machine, on which the toolchain is built
- the host machine, on which the toolchain is executed
- the target machine, for which the toolchain generates code
Toolchain - Name convention
Toolchain name usually contains the so-called target triple, which is in the form of arch[-system][-abi] or in a longer form arch[-vendor][-system][-abi], e.g. arm-linux-gnueabihf. Typically, local toolchains have symbolic links that omit triple in binary name: we use gcc instead of the full name x86_64-linux-gnu-gcc.
- arch - architecture
- arm, mips, x86, i686, etc.
- vendor - tool chain supplier
- os - operating system
- linux, none (bare metal)
- abi - application binary interface
- eabi, gnueabi, gnueabihf
This toolchain targets the ARM architecture, has no vendor, does not target an operating system (i.e. targets a "bare metal" system), and complies with the ARM eabi. (Note) arm-elf and arm-none-eabi just use two versions of the ARM abi. The eabi toolchain uses a newer revision, but could also be called arm-elf-eabi, as it generates elf too.
This toolchain targets the Intel i686 architecture, the vendor is Apple, and the target OS is Darwin version 10.
The toolchain that can be installed in Debian-based systems using a package manager like apt (the package is called gcc-arm-linux-gnueabi). This toolchain targets the ARM architecture, has no vendor, creates binaries that run on the Linux operating system, and uses the GNU EABI. In other words, it is used to target ARM-based Linux systems.
This is actually binary for gcc which produces objects for ARM architecture to be run on Linux with default configuration (abi) provided by toolchain.
Android ARM compiler
x86_64 architecture means AMD64, w64 is actually mingw-w64 used as a "vendor" here, mingw32 is the same as win32 API for gcc's perspective.
32-bit, "pc" is a generic name, msys binary