summaryrefslogtreecommitdiff
path: root/clang/www/UniversalDriver.html
diff options
context:
space:
mode:
authorCarlo Zancanaro <carlo@pc-4w14-0.cs.usyd.edu.au>2012-10-15 17:10:06 +1100
committerCarlo Zancanaro <carlo@pc-4w14-0.cs.usyd.edu.au>2012-10-15 17:10:06 +1100
commitbe1de4be954c80875ad4108e0a33e8e131b2f2c0 (patch)
tree1fbbecf276bf7c7bdcbb4dd446099d6d90eaa516 /clang/www/UniversalDriver.html
parentc4626a62754862d20b41e8a46a3574264ea80e6d (diff)
parentf1bd2e48c5324d3f7cda4090c87f8a5b6f463ce2 (diff)
Merge branch 'master' of ssh://bitbucket.org/czan/honours
Diffstat (limited to 'clang/www/UniversalDriver.html')
-rw-r--r--clang/www/UniversalDriver.html87
1 files changed, 87 insertions, 0 deletions
diff --git a/clang/www/UniversalDriver.html b/clang/www/UniversalDriver.html
new file mode 100644
index 0000000..2d41a62
--- /dev/null
+++ b/clang/www/UniversalDriver.html
@@ -0,0 +1,87 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Clang - Universal Driver</title>
+ <link type="text/css" rel="stylesheet" href="menu.css">
+ <link type="text/css" rel="stylesheet" href="content.css">
+</head>
+<body>
+
+<!--#include virtual="menu.html.incl"-->
+
+<div id="content">
+
+<h1>The Clang Universal Driver Project</h1>
+
+<p>Clang is inherently a cross compiler, in that it is always capable of
+building code for targets which are a different architecture or even operating
+system from the one running the compiler. However, actually cross compiling in
+practice involves much more than just generating the right assembly code for a
+target, it also requires having an appropriate tool chain (assemblers, linkers),
+access to header files and libraries for the target, and many other details (for
+example, the calling convention or whether software floating point is in
+use). Traditionally, compilers and development environments provide little
+assistance with this process, so users do not have easy access to the powerful
+underlying cross-compilation abilities of clang.</p>
+
+<p>We would like to solve this problem by defining a new model for how cross
+compilation is done, based on the idea of a <i>universal driver</i>. The key
+point of this model is that the user would always access the compiler through a
+single entry point (e.g., <tt>/usr/bin/cc</tt>) and provide an argument
+specifying the <i>configuration</i> they would like to target. Under the hood
+this entry point (the universal driver) would have access to all the information
+that the driver, compiler, and other tools need to build applications for that
+target.</p>
+
+<p>This is a large and open-ended project. It's eventual success depends not
+just on implementing the model, but also on getting buy-in from compiler
+developers, operating system distribution vendors and the development community
+at large. Our plan is to begin by defining a clear list of the problems we want
+to solve and a proposed implementation (from the user perspective).</p>
+
+<p>This project is in the very early (i.e., thought experiment) stages of
+development. Stay tuned for more information, and of course, patches
+welcome!</p>
+
+<p>See also <a href="http://llvm.org/PR4127">PR4127</a>.</p>
+
+<h2>Existing Solutions and Related Work</h2>
+
+<ul>
+ <li>gcc's command line arguments <tt>-V</tt>, <tt>-B</tt>, <tt>-b</tt> are
+ generic but limited solutions to related problems. Similarly, <tt>-m32</tt>
+ and <tt>-m64</tt> solve a small subset of the problem for specific
+ architectures.</li>
+
+ <li>gcc's <a href="http://www.airs.com/ian/configure/configure_8.html">multilibs</a>
+ solve the part of the problem that relates to finding appropriate libraries
+ and include files based on particular feature support (soft float,
+ etc.).</li>
+
+ <li>Apple's "driver driver" supported by gcc and clang solve a subset of the
+ problem by supporting <tt>-arch</tt>. Apple also provides a tool chain which
+ supports <a href="http://en.wikipedia.org/wiki/Universal_binary">universal
+ binaries</a> and object files which may include data for multiple
+ architectures. See <a href="http://developer.apple.com/mac/library/technotes/tn2005/tn2137.html">TN2137</a>
+ for an example of how this is used.</li>
+
+ <li>Many operating systems and environments solve the problem by installing
+ complete development environments (including the IDE, tools, header files,
+ and libraries) for a single tool chain. This is cumbersome for users and
+ does not match well with tools which are inherently capable of cross
+ compiling.</li>
+
+ <li>The Debian <a href="http://wiki.debian.org/ArmEabiPort">ArmEabiPort</a>
+ wiki page for their work to support the ARM EABI provide an interesting
+ glimpse into how related issues impact the operating system distribution.</li>
+
+ <li><a href="http://icculus.org/fatelf/">FatELF</a> is a proposal for bringing
+ Mac OS X like "Universal Binary" support to ELF based platforms.</li>
+
+</ul>
+
+</div>
+</body>
+</html>