forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			88 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable File
		
	
	
| <!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="https://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="https://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="https://en.wikipedia.org/wiki/Universal_binary">universal
 | |
|     binaries</a> and object files which may include data for multiple
 | |
|     architectures. See <a href="https://developer.apple.com/library/archive/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="https://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="https://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>
 |