Remove llvm-ld and llvm-stub (which is only used by llvm-ld).
[oota-llvm.git] / docs / FAQ.html
index 74e85347d1173b20166d74016679d03f020d1b10..2a46a9e75eba6d84472e009b82afb92dd86ea6d9 100644 (file)
@@ -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>
       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>
 
 <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>
@@ -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,141 +501,11 @@ 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>
@@ -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>