diff options
Diffstat (limited to 'docs/FAQ.html')
-rw-r--r-- | docs/FAQ.html | 211 |
1 files changed, 12 insertions, 199 deletions
diff --git a/docs/FAQ.html b/docs/FAQ.html index 74e8534..2a46a9e 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 <iostream>?</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 <iostream></tt>?</a></p> </div> |