summaryrefslogtreecommitdiff
path: root/docs/FAQ.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/FAQ.html')
-rw-r--r--docs/FAQ.html211
1 files changed, 12 insertions, 199 deletions
diff --git a/docs/FAQ.html b/docs/FAQ.html
index 74e85347d1..2a46a9e75e 100644
--- a/docs/FAQ.html
+++ b/docs/FAQ.html
@@ -19,9 +19,6 @@
<ol>
<li><a href="#license">License</a>
<ol>
- <li>Why are the LLVM source code and the front-end distributed under
- different licenses?</li>
-
<li>Does the University of Illinois Open Source License really qualify as an
"open source" license?</li>
@@ -72,8 +69,6 @@
<li>After Subversion update, rebuilding gives the error "No rule to make
target".</li>
- <li><a href="#srcdir-objdir">When I compile LLVM-GCC with srcdir == objdir,
- it fails. Why?</a></li>
</ol></li>
<li><a href="#felangs">Source Languages</a>
@@ -91,30 +86,17 @@
instruction. Help!</a></li>
</ol>
- <li><a href="#cfe">Using the GCC Front End</a>
+ <li><a href="#cfe">Using the C and C++ Front Ends</a>
<ol>
- <li>When I compile software that uses a configure script, the configure
- script thinks my system has all of the header files and libraries it is
- testing for. How do I get configure to work correctly?</li>
-
- <li>When I compile code using the LLVM GCC front end, it complains that it
- cannot find libcrtend.a?</li>
-
- <li>How can I disable all optimizations when compiling code using the LLVM
- GCC front end?</li>
-
- <li><a href="#translatecxx">Can I use LLVM to convert C++ code to C
- code?</a></li>
-
<li><a href="#platformindependent">Can I compile C or C++ code to
platform-independent LLVM bitcode?</a></li>
</ol>
</li>
- <li><a href="#cfe_code">Questions about code generated by the GCC front-end</a>
+ <li><a href="#cfe_code">Questions about code generated by the demo page</a>
<ol>
<li><a href="#iosinit">What is this <tt>llvm.global_ctors</tt> and
- <tt>_GLOBAL__I__tmp_webcompile...</tt> stuff that happens when I
+ <tt>_GLOBAL__I_a...</tt> stuff that happens when I
#include &lt;iostream&gt;?</a></li>
<li><a href="#codedce">Where did all of my code go??</a></li>
@@ -143,19 +125,6 @@
<div>
<div class="question">
-<p>Why are the LLVM source code and the front-end distributed under different
- licenses?</p>
-</div>
-
-<div class="answer">
-<p>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>
-</div>
-
-<div class="question">
<p>Does the University of Illinois Open Source License really qualify as an
"open source" license?</p>
</div>
@@ -219,12 +188,9 @@ LLVM have been ported to a plethora of platforms.</p>
<p>Some porting problems may exist in the following areas:</p>
<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.</li>
-
- <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.</li>
+ <li>The autoconf/makefile 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.</li>
</ul>
</div>
@@ -256,7 +222,7 @@ LLVM have been ported to a plethora of platforms.</p>
<div class="question">
<p>The <tt>configure</tt> script finds the right C compiler, but it uses the
- LLVM linker from a previous build. What do I do?</p>
+ LLVM tools from a previous build. What do I do?</p>
</div>
<div class="answer">
@@ -426,25 +392,6 @@ Stop.
rebuilding.</p>
</div>
-<div class="question">
-<p><a name="srcdir-objdir">When I compile LLVM-GCC with srcdir == objdir, it
- fails. Why?</a></p>
-</div>
-
-<div class="answer">
-<p>The <tt>GNUmakefile</tt> in the top-level directory of LLVM-GCC is a special
- <tt>Makefile</tt> used by Apple to invoke the <tt>build_gcc</tt> script after
- setting up a special environment. This has the unfortunate side-effect that
- trying to build LLVM-GCC with srcdir == objdir in a "non-Apple way" invokes
- the <tt>GNUmakefile</tt> instead of <tt>Makefile</tt>. Because the
- environment isn't set up correctly to do this, the build fails.</p>
-
-<p>People not building LLVM-GCC the "Apple way" need to build LLVM-GCC with
- srcdir != objdir, or simply remove the GNUmakefile entirely.</p>
-
-<p>We regret the inconvenience.</p>
-</div>
-
</div>
<!-- *********************************************************************** -->
@@ -460,12 +407,8 @@ Stop.
<div class="answer">
<p>LLVM currently has full support for C and C++ source languages. These are
- available through a special version of GCC that LLVM calls the
- <a href="#cfe">C Front End</a></p>
-
-<p>There is an incomplete version of a Java front end available in the
- <tt>java</tt> module. There is no documentation on this yet so you'll need to
- download the code, compile it, and try it.</p>
+ available through both <a href="http://clang.llvm.org/">Clang</a> and
+ <a href="http://dragonegg.llvm.org/">DragonEgg</a>.</p>
<p>The PyPy developers are working on integrating LLVM into the PyPy backend so
that PyPy language can translate to LLVM.</p>
@@ -558,142 +501,12 @@ Stop.
<!-- *********************************************************************** -->
<h2>
- <a name="cfe">Using the GCC Front End</a>
+ <a name="cfe">Using the C and C++ Front Ends</a>
</h2>
<div>
<div class="question">
-<p>When I compile software that uses a configure script, the configure script
- thinks my system has all of the header files and libraries it is testing for.
- How do I get configure to work correctly?</p>
-</div>
-
-<div class="answer">
-<p>The configure script is getting things wrong because the LLVM linker allows
- symbols to be undefined at link time (so that they can be resolved during JIT
- or translation to the C back end). That is why configure thinks your system
- "has everything."</p>
-
-<p>To work around this, perform the following steps:</p>
-
-<ol>
- <li>Make sure the CC and CXX environment variables contains the full path to
- the LLVM GCC front end.</li>
-
- <li>Make sure that the regular C compiler is first in your PATH. </li>
-
- <li>Add the string "-Wl,-native" to your CFLAGS environment variable.</li>
-</ol>
-
-<p>This will allow the <tt>llvm-ld</tt> linker to create a native code
- executable instead of shell script that runs the JIT. Creating native code
- requires standard linkage, which in turn will allow the configure script to
- find out if code is not linking on your system because the feature isn't
- available on your system.</p>
-</div>
-
-<div class="question">
-<p>When I compile code using the LLVM GCC front end, it complains that it cannot
- find libcrtend.a.
-</p>
-</div>
-
-<div class="answer">
-<p>The only way this can happen is if you haven't installed the runtime
- library. To correct this, do:</p>
-
-<pre class="doc_code">
-% cd llvm/runtime
-% make clean ; make install-bytecode
-</pre>
-</div>
-
-<div class="question">
-<p>How can I disable all optimizations when compiling code using the LLVM GCC
- front end?</p>
-</div>
-
-<div class="answer">
-<p>Passing "-Wa,-disable-opt -Wl,-disable-opt" will disable *all* cleanup and
- optimizations done at the llvm level, leaving you with the truly horrible
- code that you desire.</p>
-</div>
-
-
-<div class="question">
-<p><a name="translatecxx">Can I use LLVM to convert C++ code to C code?</a></p>
-</div>
-
-<div class="answer">
-<p>Yes, you can use LLVM to convert code from any language LLVM supports to C.
- Note that the generated C code will be very low level (all loops are lowered
- to gotos, etc) and not very pretty (comments are stripped, original source
- formatting is totally lost, variables are renamed, expressions are
- regrouped), so this may not be what you're looking for. Also, there are
- several limitations noted below.<p>
-
-<p>Use commands like this:</p>
-
-<ol>
- <li><p>Compile your program with llvm-g++:</p>
-
-<pre class="doc_code">
-% llvm-g++ -emit-llvm x.cpp -o program.bc -c
-</pre>
-
- <p>or:</p>
-
-<pre class="doc_code">
-% llvm-g++ a.cpp -c -emit-llvm
-% llvm-g++ b.cpp -c -emit-llvm
-% llvm-ld a.o b.o -o program
-</pre>
-
- <p>This will generate program and program.bc. The .bc
- file is the LLVM version of the program all linked together.</p></li>
-
- <li><p>Convert the LLVM code to C code, using the LLC tool with the C
- backend:</p>
-
-<pre class="doc_code">
-% llc -march=c program.bc -o program.c
-</pre></li>
-
- <li><p>Finally, compile the C file:</p>
-
-<pre class="doc_code">
-% cc x.c -lstdc++
-</pre></li>
-
-</ol>
-
-<p>Using LLVM does not eliminate the need for C++ library support. If you use
- the llvm-g++ front-end, the generated code will depend on g++'s C++ support
- libraries in the same way that code generated from g++ would. If you use
- another C++ front-end, the generated code will depend on whatever library
- that front-end would normally require.</p>
-
-<p>If you are working on a platform that does not provide any C++ libraries, you
- may be able to manually compile libstdc++ to LLVM bitcode, statically link it
- into your program, then use the commands above to convert the whole result
- into C code. Alternatively, you might compile the libraries and your
- application into two different chunks of C code and link them.</p>
-
-<p>Note that, by default, the C back end does not support exception handling.
- If you want/need it for a certain program, you can enable it by passing
- "-enable-correct-eh-support" to the llc program. The resultant code will use
- setjmp/longjmp to implement exception support that is relatively slow, and
- not C++-ABI-conforming on most platforms, but otherwise correct.</p>
-
-<p>Also, there are a number of other limitations of the C backend that cause it
- to produce code that does not fully conform to the C++ ABI on most
- platforms. Some of the C++ programs in LLVM's test suite are known to fail
- when compiled with the C back end because of ABI incompatibilities with
- standard C++ libraries.</p>
-</div>
-
-<div class="question">
<p><a name="platformindependent">Can I compile C or C++ code to
platform-independent LLVM bitcode?</a></p>
</div>
@@ -719,14 +532,14 @@ Stop.
<!-- *********************************************************************** -->
<h2>
- <a name="cfe_code">Questions about code generated by the GCC front-end</a>
+ <a name="cfe_code">Questions about code generated by the demo page</a>
</h2>
<div>
<div class="question">
<p><a name="iosinit">What is this <tt>llvm.global_ctors</tt> and
- <tt>_GLOBAL__I__tmp_webcompile...</tt> stuff that happens when I <tt>#include
+ <tt>_GLOBAL__I_a...</tt> stuff that happens when I <tt>#include
&lt;iostream&gt;</tt>?</a></p>
</div>