From 75338097c786eea1c461e744a2c45af78f56286f Mon Sep 17 00:00:00 2001 From: "Michael J. Spencer" Date: Thu, 19 Apr 2012 19:27:54 +0000 Subject: Remove llvm-ld and llvm-stub (which is only used by llvm-ld). llvm-ld is no longer useful and causes confusion and so it is being removed. * Does not work very well on Windows because it must call a gcc like driver to assemble and link. * Has lots of hard coded paths which are wrong on many systems. * Does not understand most of ld's options. * Can be partially replaced by llvm-link | opt | {llc | as, llc -filetype=obj} | ld, or fully replaced by Clang. I know of no production use of llvm-ld, and hacking use should be replaced by Clang's driver. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155147 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/FAQ.html | 211 ++++------------------------------------------------------ 1 file changed, 12 insertions(+), 199 deletions(-) (limited to 'docs/FAQ.html') 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 @@
  1. License
      -
    1. Why are the LLVM source code and the front-end distributed under - different licenses?
    2. -
    3. Does the University of Illinois Open Source License really qualify as an "open source" license?
    4. @@ -72,8 +69,6 @@
    5. After Subversion update, rebuilding gives the error "No rule to make target".
    6. -
    7. When I compile LLVM-GCC with srcdir == objdir, - it fails. Why?
  2. Source Languages @@ -91,30 +86,17 @@ instruction. Help!
-
  • Using the GCC Front End +
  • Using the C and C++ Front Ends
      -
    1. 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?
    2. - -
    3. When I compile code using the LLVM GCC front end, it complains that it - cannot find libcrtend.a?
    4. - -
    5. How can I disable all optimizations when compiling code using the LLVM - GCC front end?
    6. - -
    7. Can I use LLVM to convert C++ code to C - code?
    8. -
    9. Can I compile C or C++ code to platform-independent LLVM bitcode?
  • -
  • Questions about code generated by the GCC front-end +
  • Questions about code generated by the demo page
    1. What is this llvm.global_ctors and - _GLOBAL__I__tmp_webcompile... stuff that happens when I + _GLOBAL__I_a... stuff that happens when I #include <iostream>?
    2. Where did all of my code go??
    3. @@ -143,19 +125,6 @@
      -

      Why are the LLVM source code and the front-end distributed under different - licenses?

      -
      - -
      -

      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 much less - restrictive 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.

      -
      - -

      Does the University of Illinois Open Source License really qualify as an "open source" license?

      @@ -219,12 +188,9 @@ LLVM have been ported to a plethora of platforms.

      Some porting problems may exist in the following areas:

        -
      • The GCC front end code is not as portable as the LLVM suite, so it may not - compile as well on unsupported platforms.
      • - -
      • 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.
      • +
      • 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.
      @@ -256,7 +222,7 @@ LLVM have been ported to a plethora of platforms.

      The configure script finds the right C compiler, but it uses the - LLVM linker from a previous build. What do I do?

      + LLVM tools from a previous build. What do I do?

      @@ -426,25 +392,6 @@ Stop. rebuilding.

      - - -
      -

      The GNUmakefile in the top-level directory of LLVM-GCC is a special - Makefile used by Apple to invoke the build_gcc 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 GNUmakefile instead of Makefile. Because the - environment isn't set up correctly to do this, the build fails.

      - -

      People not building LLVM-GCC the "Apple way" need to build LLVM-GCC with - srcdir != objdir, or simply remove the GNUmakefile entirely.

      - -

      We regret the inconvenience.

      -
      - @@ -460,12 +407,8 @@ Stop.

      LLVM currently has full support for C and C++ source languages. These are - available through a special version of GCC that LLVM calls the - C Front End

      - -

      There is an incomplete version of a Java front end available in the - java module. There is no documentation on this yet so you'll need to - download the code, compile it, and try it.

      + available through both Clang and + DragonEgg.

      The PyPy developers are working on integrating LLVM into the PyPy backend so that PyPy language can translate to LLVM.

      @@ -558,142 +501,12 @@ Stop.

      - Using the GCC Front End + Using the C and C++ Front Ends

      -

      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?

      -
      - -
      -

      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."

      - -

      To work around this, perform the following steps:

      - -
        -
      1. Make sure the CC and CXX environment variables contains the full path to - the LLVM GCC front end.
      2. - -
      3. Make sure that the regular C compiler is first in your PATH.
      4. - -
      5. Add the string "-Wl,-native" to your CFLAGS environment variable.
      6. -
      - -

      This will allow the llvm-ld 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.

      -
      - -
      -

      When I compile code using the LLVM GCC front end, it complains that it cannot - find libcrtend.a. -

      -
      - -
      -

      The only way this can happen is if you haven't installed the runtime - library. To correct this, do:

      - -
      -% cd llvm/runtime
      -% make clean ; make install-bytecode
      -
      -
      - -
      -

      How can I disable all optimizations when compiling code using the LLVM GCC - front end?

      -
      - -
      -

      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.

      -
      - - - - -
      -

      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.

      - -

      Use commands like this:

      - -
        -
      1. Compile your program with llvm-g++:

        - -
        -% llvm-g++ -emit-llvm x.cpp -o program.bc -c
        -
        - -

        or:

        - -
        -% llvm-g++ a.cpp -c -emit-llvm
        -% llvm-g++ b.cpp -c -emit-llvm
        -% llvm-ld a.o b.o -o program
        -
        - -

        This will generate program and program.bc. The .bc - file is the LLVM version of the program all linked together.

      2. - -
      3. Convert the LLVM code to C code, using the LLC tool with the C - backend:

        - -
        -% llc -march=c program.bc -o program.c
        -
      4. - -
      5. Finally, compile the C file:

        - -
        -% cc x.c -lstdc++
        -
      6. - -
      - -

      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.

      - -

      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.

      - -

      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.

      - -

      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.

      -
      - - @@ -719,14 +532,14 @@ Stop.

      - Questions about code generated by the GCC front-end + Questions about code generated by the demo page