From 75338097c786eea1c461e744a2c45af78f56286f Mon Sep 17 00:00:00 2001
From: "Michael J. Spencer" 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? Some porting problems may exist in the following areas:
-
-
-
-
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?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.
-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.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:
- -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:
- -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.
Convert the LLVM code to C code, using the LLC tool with the C - backend:
- --% llc -march=c program.bc -o program.c -
Finally, compile the C file:
- --% cc x.c -lstdc++ -
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.
-