mirror of
https://github.com/crosstool-ng/crosstool-ng.git
synced 2024-12-22 14:12:26 +00:00
c009897aee
Reported-by: "Antony N. Pavlov" <antony@niisi.msk.ru> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
65 lines
2.6 KiB
Plaintext
65 lines
2.6 KiB
Plaintext
File.........: 6 - Toolchain types.txt
|
|
Copyright....: (C) 2010 Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
|
|
License......: Creative Commons Attribution Share Alike (CC-by-sa), v2.5
|
|
|
|
|
|
Toolchain types /
|
|
________________/
|
|
|
|
|
|
There are four kinds of toolchains you could encounter.
|
|
|
|
First off, you must understand the following: when it comes to compilers there
|
|
are up to four machines involved:
|
|
1) the machine configuring the toolchain components: the config machine
|
|
2) the machine building the toolchain components: the build machine
|
|
3) the machine running the toolchain: the host machine
|
|
4) the machine the toolchain is generating code for: the target machine
|
|
|
|
We can most of the time assume that the config machine and the build machine
|
|
are the same. Most of the time, this will be true. The only time it isn't
|
|
is if you're using distributed compilation (such as distcc). Let's forget
|
|
this for the sake of simplicity.
|
|
|
|
So we're left with three machines:
|
|
- build
|
|
- host
|
|
- target
|
|
|
|
Any toolchain will involve those three machines. You can be as pretty sure of
|
|
this as "2 and 2 are 4". Here is how they come into play:
|
|
|
|
1) build == host == target
|
|
This is a plain native toolchain, targeting the exact same machine as the
|
|
one it is built on, and running again on this exact same machine. You have
|
|
to build such a toolchain when you want to use an updated component, such
|
|
as a newer gcc for example.
|
|
crosstool-NG calls it "native".
|
|
|
|
2) build == host != target
|
|
This is a classic cross-toolchain, which is expected to be run on the same
|
|
machine it is compiled on, and generate code to run on a second machine,
|
|
the target.
|
|
crosstool-NG calls it "cross".
|
|
|
|
3) build != host == target
|
|
Such a toolchain is also a native toolchain, as it targets the same machine
|
|
as it runs on. But it is build on another machine. You want such a
|
|
toolchain when porting to a new architecture, or if the build machine is
|
|
much faster than the host machine.
|
|
crosstool-NG calls it "cross-native".
|
|
|
|
4) build != host != target
|
|
This one is called a canadian-toolchain (*), and is tricky. The three
|
|
machines in play are different. You might want such a toolchain if you
|
|
have a fast build machine, but the users will use it on another machine,
|
|
and will produce code to run on a third machine.
|
|
crosstool-NG calls it "canadian".
|
|
|
|
crosstool-NG can build all these kinds of toolchains (or is aiming at it,
|
|
anyway!)
|
|
|
|
(*) The term Canadian Cross came about because at the time that these issues
|
|
were all being hashed out, Canada had three national political parties.
|
|
http://en.wikipedia.org/wiki/Cross_compiler
|