2003-10-13 16:13:06 +00:00
|
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
|
|
|
|
|
|
<h1>
|
|
|
|
<center>
|
|
|
|
LLVM: Frequently Asked Questions
|
|
|
|
</center>
|
|
|
|
</h1>
|
|
|
|
|
|
|
|
<hr>
|
|
|
|
|
2003-10-25 17:06:55 +00:00
|
|
|
<!--=====================================================================-->
|
|
|
|
<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
|
2003-10-25 17:19:21 +00:00
|
|
|
the GPL. Our aim is to distribute LLVM source code under a <em>much
|
2003-10-25 17:06:55 +00:00
|
|
|
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.
|
2003-10-25 17:14:52 +00:00
|
|
|
<p>
|
2003-10-25 17:06:55 +00:00
|
|
|
<dt><b>Does the Illinois Open Source License really qualify
|
|
|
|
as an "open source" license?</b>
|
2003-10-25 17:22:08 +00:00
|
|
|
<dd>The license is
|
|
|
|
<a href="http://www.opensource.org/licenses/UoI-NCSA.php">certified</a>
|
|
|
|
by the Open Source Initiative (OSI).
|
2003-10-25 17:14:52 +00:00
|
|
|
<p>
|
2003-10-25 17:06:55 +00:00
|
|
|
<dt> <b>Can I modify LLVM source code and redistribute the modified
|
|
|
|
source?</b>
|
|
|
|
<dd>
|
2003-10-25 17:19:21 +00:00
|
|
|
Yes. The modified source distribution must retain the
|
2003-10-25 17:06:55 +00:00
|
|
|
copyright notice and follow the three bulletted conditions listed in
|
2003-10-25 17:20:38 +00:00
|
|
|
the <a href="http://llvm.cs.uiuc.edu/releases/1.0/LICENSE.TXT">LLVM license</a>.
|
2003-10-25 17:14:52 +00:00
|
|
|
<p>
|
2003-10-25 17:06:55 +00:00
|
|
|
<dt> <b>Can I modify LLVM source code and redistribute binaries or
|
2003-10-25 17:14:52 +00:00
|
|
|
other tools based on it, without redistributing the source?</b>
|
2003-10-25 17:06:55 +00:00
|
|
|
<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>
|
|
|
|
|
2003-10-13 16:13:06 +00:00
|
|
|
<!--=====================================================================-->
|
|
|
|
<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>
|
2003-10-24 22:48:20 +00:00
|
|
|
|
|
|
|
<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.
|
2003-10-13 16:13:06 +00:00
|
|
|
</dl>
|
|
|
|
<hr>
|
|
|
|
|
2003-10-24 22:48:20 +00:00
|
|
|
<a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a>
|
|
|
|
<br>
|
|
|
|
|
2003-10-13 16:13:06 +00:00
|
|
|
</body>
|
|
|
|
</html>
|