| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | 
 |  | 
 | <h1> | 
 | <center> | 
 | LLVM: Frequently Asked Questions | 
 | </center> | 
 | </h1> | 
 |  | 
 | <hr> | 
 |  | 
 | <!--=====================================================================--> | 
 | <h2> | 
 | <a name="license">Licenses</a> | 
 | </h2> | 
 | <!--=====================================================================--> | 
 |  | 
 | <dl compact> | 
 | 	<dt> <b>Why are the LLVM source code and the front-end distributed | 
 | 	under different licenses?</b> | 
 | 	<dd> | 
 | 	The C/C++ front-ends are based on GCC and must be distributed under | 
 | 	the GPL.  Our aim is to distribute LLVM source code under a <em>much | 
 | 	less restrictive</em> license, in particular one that does not | 
 | 	compel users who distribute tools based on modifying the source to | 
 | 	redistribute the modified source code as well. | 
 | 	<p> | 
 | 	<dt><b>Does the University of Illinois Open Source License really qualify  | 
 | 	  as an "open source" license?</b> | 
 | 	<dd>Yes, the license is  | 
 | 	<a href="http://www.opensource.org/licenses/UoI-NCSA.php">certified</a> | 
 | 	by the Open Source Initiative (OSI). | 
 | 	<p> | 
 | 	<dt> <b>Can I modify LLVM source code and redistribute the modified | 
 | 	  source?</b> | 
 | 	<dd> | 
 | 	Yes.  The modified source distribution must retain the | 
 | 	copyright notice and follow the three bulletted conditions listed in | 
 | 	the <a href="http://llvm.cs.uiuc.edu/releases/1.0/LICENSE.TXT">LLVM license</a>. | 
 | 	<p> | 
 | 	<dt> <b>Can I modify LLVM source code and redistribute binaries or | 
 | 	  other tools based on it, without redistributing the source?</b> | 
 | 	<dd> | 
 | 	Yes, this is why we distribute LLVM under a less restrictive license | 
 | 	than GPL, as explained in the first question above. | 
 | 	<p> | 
 | </dl> | 
 | <hr> | 
 |  | 
 | <!--=====================================================================--> | 
 | <h2> | 
 | <a name="source">Source Code</a> | 
 | </h2> | 
 | <!--=====================================================================--> | 
 |  | 
 | <dl compact> | 
 | 	<dt> <b>In what language is LLVM written?</b> | 
 | 	<dd> | 
 | 	All of the LLVM tools and libraries are written in C++ with extensive use | 
 | 	of the STL. | 
 | 	<p> | 
 |  | 
 | 	<dt><b>How portable is the LLVM source code?</b> | 
 | 	<dd> | 
 | 	The LLVM source code should be portable to most modern UNIX-like operating | 
 | 	systems.  Most of the code is written in standard C++ with operating | 
 | 	system services abstracted to a support library.  The tools required to | 
 | 	build and test LLVM have been ported to a plethora of platforms. | 
 | 	<p> | 
 | 	Some porting problems may exist in the following areas: | 
 | 	<ul> | 
 | 		<li>The GCC front end code is not as portable as the LLVM suite, so it | 
 | 		may not compile as well on unsupported platforms. | 
 |  | 
 | 		<p> | 
 |  | 
 | 		<li>The Python test classes are more UNIX-centric than they should be, | 
 | 		so porting to non-UNIX like platforms (i.e. Windows, MacOS 9) will | 
 | 		require some effort. | 
 | 		<p> | 
 |  | 
 | 		<li>The LLVM build system relies heavily on UNIX shell tools, like the | 
 | 		Bourne Shell and sed.  Porting to systems without these tools (MacOS 9, | 
 | 		Plan 9) will require more effort. | 
 | 	</ul> | 
 | </dl> | 
 |  | 
 | <hr> | 
 |  | 
 | <!--=====================================================================--> | 
 | <h2> | 
 | <a name="build">Build Problems</a> | 
 | </h2> | 
 | <!--=====================================================================--> | 
 |  | 
 | <dl compact> | 
 | 	<dt><b>When I run configure, it finds the wrong C compiler.</b> | 
 | 	<dd> | 
 | 	The <tt>configure</tt> script attempts to locate first <tt>gcc</tt> and | 
 | 	then <tt>cc</tt>, unless it finds compiler paths set in <tt>CC</tt> and | 
 | 	<tt>CXX</tt> for the C and C++ compiler, respectively. | 
 |  | 
 | 	If <tt>configure</tt> finds the wrong compiler, either adjust your | 
 | 	<tt>PATH</tt> environment variable or set <tt>CC</tt> and <tt>CXX</tt> | 
 | 	explicitly. | 
 | 	<p> | 
 |  | 
 | 	<dt><b>I compile the code, and I get some error about /localhome</b>. | 
 | 	<dd> | 
 | 	There are several possible causes for this.  The first is that you | 
 | 	didn't set a pathname properly when using <tt>configure</tt>, and it | 
 | 	defaulted to a pathname that we use on our research machines. | 
 | 	<p> | 
 | 	Another possibility is that we hardcoded a path in our Makefiles.  If | 
 | 	you see this, please email the LLVM bug mailing list with the name of | 
 | 	the offending Makefile and a description of what is wrong with it. | 
 |  | 
 | 	<dt><b>The <tt>configure</tt> script finds the right C compiler, but it | 
 | 	uses the LLVM linker from a previous build.  What do I do?</b> | 
 | 	<dd> | 
 | 	The <tt>configure</tt> script uses the <tt>PATH</tt> to find | 
 | 	executables, so if it's grabbing the wrong linker/assembler/etc, there | 
 | 	are two ways to fix it: | 
 | 	<ol> | 
 | 		<li>Adjust your <tt>PATH</tt> environment variable so that the | 
 | 		correct program appears first in the <tt>PATH</tt>.  This may work, | 
 | 		but may not be convenient when you want them <i>first</i> in your | 
 | 		path for other work. | 
 | 		<p> | 
 |  | 
 | 		<li>Run <tt>configure</tt> with an alternative <tt>PATH</tt> that | 
 | 		is correct.  In a Borne compatible shell, the syntax would be: | 
 | 		<p> | 
 | 		<tt>PATH=<the path without the bad program> ./configure ...</tt> | 
 | 		<p> | 
 | 		This is still somewhat inconvenient, but it allows | 
 | 		<tt>configure</tt> to do its work without having to adjust your | 
 | 		<tt>PATH</tt> permanently. | 
 | 	</ol> | 
 |  | 
 | 	<dt><b>When creating a dynamic library, I get a strange GLIBC error.</b> | 
 | 	<dd> | 
 | 	Under some operating systems (i.e. Linux), libtool does not work correctly | 
 | 	if GCC was compiled with the --disable-shared option.  To work around this, | 
 | 	install your own version of GCC that has shared libraries enabled by | 
 | 	default. | 
 | 	<p> | 
 |  | 
 | 	<dt><b>I've updated my source tree from CVS, and now my build is trying to | 
 | 	use a file/directory that doesn't exist.</b> | 
 | 	<dd> | 
 | 	You need to re-run configure in your object directory.  When new Makefiles | 
 | 	are added to the source tree, they have to be copied over to the object | 
 | 	tree in order to be used by the build. | 
 | 	<p> | 
 |  | 
 | 	<dt><b>I've modified a Makefile in my source tree, but my build tree keeps | 
 | 	using the old version.  What do I do?</b> | 
 | 	<dd> | 
 | 	If the Makefile already exists in your object tree, you can just run the | 
 | 	following command in the top level directory of your object tree: | 
 | 	<p> | 
 | 	<tt>./config.status <relative path to Makefile></tt> | 
 | 	<p> | 
 | 	If the Makefile is new, you will have to modify the configure script to copy | 
 | 	it over. | 
 | 	<p> | 
 |  | 
 | 	<dt><b>I've upgraded to a new version of LLVM, and I get strange build | 
 | 	errors.</b> | 
 | 	<dd> | 
 | 	Sometimes changes to the LLVM source code alters how the build system | 
 | 	works.  Changes in libtool, autoconf, or header file dependencies are | 
 | 	especially prone to this sort of problem. | 
 | 	<p> | 
 | 	The best thing to try is to remove the old files and re-build.  In most | 
 | 	cases, this takes care of the problem.  To do this, just type <tt>make | 
 | 	clean</tt> and then <tt>make</tt> in the directory that fails to build. | 
 | 	<p> | 
 |  | 
 | 	<dt><b>I've built LLVM and am testing it, but the tests freeze.</b> | 
 | 	<dd> | 
 | 	This is most likely occurring because you built a profile or release | 
 | 	(optimized) build of LLVM and have not specified the same information on | 
 | 	the <tt>gmake</tt> command line. | 
 | 	<p> | 
 | 	For example, if you built LLVM with the command: | 
 | 	<p> | 
 | 	<tt>gmake ENABLE_PROFILING=1</tt> | 
 | 	<p> | 
 | 	...then you must run the tests with the following commands: | 
 | 	<p> | 
 | 	<tt>cd llvm/test<br>gmake  ENABLE_PROFILING=1</tt> | 
 | 	<p> | 
 |  | 
 | 	<dt><b>Why do test results differ when I perform different types of | 
 | 	builds?</b> | 
 | 	<dd> | 
 | 	The LLVM test suite is dependent upon several features of the LLVM tools | 
 | 	and libraries. | 
 | 	<p> | 
 | 	First, the debugging assertions in code are not enabled in optimized or | 
 | 	profiling builds.  Hence, tests that used to fail may pass. | 
 | 	<p> | 
 | 	Second, some tests may rely upon debugging options or behavior that is | 
 | 	only available in the debug build.  These tests will fail in an optimized | 
 | 	or profile build. | 
 | </dl> | 
 | <hr> | 
 |  | 
 | <a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a> | 
 | <br> | 
 |  | 
 | </body> | 
 | </html> |