path: root/docs/6 - Toolchain types.txt
diff options
Diffstat (limited to 'docs/6 - Toolchain types.txt')
-rw-r--r--docs/6 - Toolchain types.txt64
1 files changed, 64 insertions, 0 deletions
diff --git a/docs/6 - Toolchain types.txt b/docs/6 - Toolchain types.txt
new file mode 100644
index 0000000..a490a3b
--- /dev/null
+++ b/docs/6 - Toolchain types.txt
@@ -0,0 +1,64 @@
+File.........: 6 - Toolchain types.txt
+Copyrigth....: (C) 2010 Yann E. MORIN <>
+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, targetting 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,
+(*) The term Canadian Cross came about because at the time that these issues
+ were all being hashed out, Canada had three national political parties.