Daniel Dunbar | b114d2e | 2009-10-17 21:50:11 +0000 | [diff] [blame] | 1 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" |
| 2 | "http://www.w3.org/TR/html4/strict.dtd"> |
| 3 | <html> |
| 4 | <head> |
Benjamin Kramer | 665a8dc | 2012-01-15 15:26:07 +0000 | [diff] [blame] | 5 | <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
Daniel Dunbar | b114d2e | 2009-10-17 21:50:11 +0000 | [diff] [blame] | 6 | <title>Clang - Universal Driver</title> |
Benjamin Kramer | 665a8dc | 2012-01-15 15:26:07 +0000 | [diff] [blame] | 7 | <link type="text/css" rel="stylesheet" href="menu.css"> |
| 8 | <link type="text/css" rel="stylesheet" href="content.css"> |
Daniel Dunbar | b114d2e | 2009-10-17 21:50:11 +0000 | [diff] [blame] | 9 | </head> |
| 10 | <body> |
| 11 | |
| 12 | <!--#include virtual="menu.html.incl"--> |
| 13 | |
| 14 | <div id="content"> |
| 15 | |
| 16 | <h1>The Clang Universal Driver Project</h1> |
| 17 | |
| 18 | <p>Clang is inherently a cross compiler, in that it is always capable of |
| 19 | building code for targets which are a different architecture or even operating |
| 20 | system from the one running the compiler. However, actually cross compiling in |
| 21 | practice involves much more than just generating the right assembly code for a |
| 22 | target, it also requires having an appropriate tool chain (assemblers, linkers), |
| 23 | access to header files and libraries for the target, and many other details (for |
| 24 | example, the calling convention or whether software floating point is in |
| 25 | use). Traditionally, compilers and development environments provide little |
| 26 | assistance with this process, so users do not have easy access to the powerful |
| 27 | underlying cross-compilation abilities of clang.</p> |
| 28 | |
| 29 | <p>We would like to solve this problem by defining a new model for how cross |
| 30 | compilation is done, based on the idea of a <i>universal driver</i>. The key |
| 31 | point of this model is that the user would always access the compiler through a |
| 32 | single entry point (e.g., <tt>/usr/bin/cc</tt>) and provide an argument |
| 33 | specifying the <i>configuration</i> they would like to target. Under the hood |
| 34 | this entry point (the universal driver) would have access to all the information |
| 35 | that the driver, compiler, and other tools need to build applications for that |
| 36 | target.</p> |
| 37 | |
Daniel Dunbar | a249b72 | 2009-10-18 02:09:02 +0000 | [diff] [blame] | 38 | <p>This is a large and open-ended project. It's eventual success depends not |
Daniel Dunbar | b114d2e | 2009-10-17 21:50:11 +0000 | [diff] [blame] | 39 | just on implementing the model, but also on getting buy-in from compiler |
| 40 | developers, operating system distribution vendors and the development community |
| 41 | at large. Our plan is to begin by defining a clear list of the problems we want |
| 42 | to solve and a proposed implementation (from the user perspective).</p> |
| 43 | |
| 44 | <p>This project is in the very early (i.e., thought experiment) stages of |
| 45 | development. Stay tuned for more information, and of course, patches |
| 46 | welcome!</p> |
| 47 | |
| 48 | <p>See also <a href="http://llvm.org/PR4127">PR4127</a>.</p> |
| 49 | |
Daniel Dunbar | 31fec98 | 2009-10-17 22:08:19 +0000 | [diff] [blame] | 50 | <h2>Existing Solutions and Related Work</h2> |
| 51 | |
| 52 | <ul> |
| 53 | <li>gcc's command line arguments <tt>-V</tt>, <tt>-B</tt>, <tt>-b</tt> are |
| 54 | generic but limited solutions to related problems. Similarly, <tt>-m32</tt> |
| 55 | and <tt>-m64</tt> solve a small subset of the problem for specific |
| 56 | architectures.</li> |
| 57 | |
| 58 | <li>gcc's <a href="http://www.airs.com/ian/configure/configure_8.html">multilibs</a> |
| 59 | solve the part of the problem that relates to finding appropriate libraries |
| 60 | and include files based on particular feature support (soft float, |
| 61 | etc.).</li> |
| 62 | |
| 63 | <li>Apple's "driver driver" supported by gcc and clang solve a subset of the |
| 64 | problem by supporting <tt>-arch</tt>. Apple also provides a tool chain which |
| 65 | supports <a href="http://en.wikipedia.org/wiki/Universal_binary">universal |
| 66 | binaries</a> and object files which may include data for multiple |
| 67 | architectures. See <a href="http://developer.apple.com/mac/library/technotes/tn2005/tn2137.html">TN2137</a> |
| 68 | for an example of how this is used.</li> |
| 69 | |
| 70 | <li>Many operating systems and environments solve the problem by installing |
| 71 | complete development environments (including the IDE, tools, header files, |
| 72 | and libraries) for a single tool chain. This is cumbersome for users and |
| 73 | does not match well with tools which are inherently capable of cross |
| 74 | compiling.</li> |
| 75 | |
| 76 | <li>The Debian <a href="http://wiki.debian.org/ArmEabiPort">ArmEabiPort</a> |
| 77 | wiki page for their work to support the ARM EABI provide an interesting |
| 78 | glimpse into how related issues impact the operating system distribution.</li> |
| 79 | |
Daniel Dunbar | 8112c61 | 2009-11-03 08:18:34 +0000 | [diff] [blame] | 80 | <li><a href="http://icculus.org/fatelf/">FatELF</a> is a proposal for bringing |
| 81 | Mac OS X like "Universal Binary" support to ELF based platforms.</li> |
| 82 | |
Daniel Dunbar | 31fec98 | 2009-10-17 22:08:19 +0000 | [diff] [blame] | 83 | </ul> |
| 84 | |
Daniel Dunbar | b114d2e | 2009-10-17 21:50:11 +0000 | [diff] [blame] | 85 | </div> |
| 86 | </body> |
| 87 | </html> |