X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FGettingStartedVS.html;h=d6bf1b66839ad6ebdfb36bf345c859644caddae9;hb=d589099eec8d120b5a7227072c4e717856e2276f;hp=7934f1ea6894b40aad84d6636e64d814d537af9d;hpb=3c8dfcd53dc7e4b9f82e9e099d27d9d3ee70e6e3;p=oota-llvm.git diff --git a/docs/GettingStartedVS.html b/docs/GettingStartedVS.html index 7934f1ea689..d6bf1b66839 100644 --- a/docs/GettingStartedVS.html +++ b/docs/GettingStartedVS.html @@ -8,85 +8,129 @@ -
+

Getting Started with the LLVM System using Microsoft Visual Studio -

+
-

Written by: - Jeff Cohen -

+

Written by: The LLVM Team

-
+

Overview -

+ -
+
-

The Visual Studio port at this time is experimental. It is suitable for - use only if you are writing your own compiler front end or otherwise have a - need to dynamically generate machine code. The JIT and interpreter are - functional, but it is currently not possible to generate assembly code which - is then assembled into an executable. You can indirectly create executables - by using the C back end.

+

Welcome to LLVM on Windows! This document only covers LLVM on Windows using + Visual Studio, not mingw or cygwin. In order to get started, you first need to + know some basic information.

-

To emphasize, there is no C/C++ front end currently available. - llvm-gcc is based on GCC, which cannot be bootstrapped using VC++. - Eventually there should be a llvm-gcc based on Cygwin or MinGW that - is usable. There is also the option of generating bytecode files on Unix and - copying them over to Windows. But be aware the odds of linking C++ code - compiled with llvm-gcc with code compiled with VC++ is essentially - zero.

+

There are many different projects that compose LLVM. The first is the LLVM + suite. This contains all of the tools, libraries, and header files needed to + use the low level virtual machine. It contains an assembler, disassembler, + bitcode analyzer and bitcode optimizer. It also contains a test suite that can + be used to test the LLVM tools.

-

The LLVM test suite cannot be run on the Visual Studio port at this +

Another useful project on Windows is + clang. Clang is a C family + ([Objective]C/C++) compiler. Clang mostly works on Windows, but does not + currently understand all of the Microsoft extensions to C and C++. Because of + this, clang cannot parse the C++ standard library included with Visual Studio, + nor parts of the Windows Platform SDK. However, most standard C programs do + compile. Clang can be used to emit bitcode, directly emit object files or + even linked executables using Visual Studio's link.exe

+ +

The large LLVM test suite cannot be run on the Visual Studio port at this time.

-

Most of the tools build and work. llvm-db does not build at this - time. bugpoint does build, but does not work. +

Most of the tools build and work. bugpoint does build, but does + not work.

Additional information about the LLVM directory structure and tool chain can be found on the main Getting Started - page.

+ page.

-
- Getting Started Quickly (A Summary) +

+ Requirements +

+ + +
+ +

Before you begin to use the LLVM system, review the requirements given + below. This may save you some trouble by knowing ahead of time what hardware + and software you will need.

+ + +

+ Hardware +

+ +
+ +

Any system that can adequately run Visual Studio .NET 2005 SP1 is fine. + The LLVM source tree and object files, libraries and executables will consume + approximately 3GB.

+ +
+ + +

Software

+
+ +

You will need Visual Studio .NET 2005 SP1 or higher. The VS2005 SP1 + beta and the normal VS2005 still have bugs that are not completely + compatible. Earlier versions of Visual Studio do not support the C++ standard + well enough and will not work.

+ +

You will also need the CMake build + system since it generates the project files you will use to build with.

+ +

If you would like to run the LLVM tests you will need + Python. Versions 2.4-2.7 are known to + work. You will need "GnuWin32" + tools, too.

+ +

Do not install the LLVM directory tree into a path containing spaces (e.g. + C:\Documents and Settings\...) as the configure step will fail.

+ +
+
+ + +

+ Getting Started +

-
+

Here's the short story for getting up and running quickly with LLVM:

  1. Read the documentation.
  2. -
  3. Read the documentation.
  4. +
  5. Seriously, read the documentation.
  6. Remember that you were warned twice about reading the documentation.
  7. Get the Source Code @@ -99,218 +143,188 @@
  8. cd llvm
-
  • With anonymous CVS access: +
  • With anonymous Subversion access:
    1. cd where-you-want-llvm-to-live
    2. -
    3. cvs -d - :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm login
    4. -
    5. Hit the return key when prompted for the password. -
    6. cvs -z3 -d :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm - co llvm
    7. +
    8. svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
    9. cd llvm
    10. -
    11. cvs up -P -d
  • +
  • Use CMake to generate up-to-date + project files: +
      +
    • Once CMake is installed then the simplest way is to just start the + CMake GUI, select the directory where you have LLVM extracted to, and the + default options should all be fine. One option you may really want to + change, regardless of anything else, might be the CMAKE_INSTALL_PREFIX + setting to select a directory to INSTALL to once compiling is complete, + although installation is not mandatory for using LLVM. Another important + option is LLVM_TARGETS_TO_BUILD, which controls the LLVM target + architectures that are included on the build. +
    • See the LLVM CMake guide for + detailed information about how to configure the LLVM + build.
    • +
    +
  • +
  • Start Visual Studio -
      -
    1. Simply double click on the solution file llvm/win32/llvm.sln. -
    2. -
  • +
      +
    • In the directory you created the project files will have + an llvm.sln file, just double-click on that to open + Visual Studio.
    • +
  • Build the LLVM Suite: -
      -
    1. Simply build the solution.
    2. -
    3. The Fibonacci project is a sample program that uses the JIT. Modify - the project's debugging properties to provide a numeric command line - argument. The program will print the corresponding fibonacci value.
    4. -
  • - - - -

    It is strongly encouraged that you get the latest version from CVS. Much -progress has been made since the 1.4 release.

    - -
    - - - - - -
    - -

    Before you begin to use the LLVM system, review the requirements given - below. This may save you some trouble by knowing ahead of time what hardware - and software you will need.

    +
      +
    • The projects may still be built individually, but + to build them all do not just select all of them in batch build (as some + are meant as configuration projects), but rather select and build just + the ALL_BUILD project to build everything, or the INSTALL project, which + first builds the ALL_BUILD project, then installs the LLVM headers, libs, + and other useful things to the directory set by the CMAKE_INSTALL_PREFIX + setting when you first configured CMake.
    • +
    • The Fibonacci project is a sample program that uses the JIT. + Modify the project's debugging properties to provide a numeric + command line argument or run it from the command line. The + program will print the corresponding fibonacci value.
    • +
    -
    +
  • Test LLVM on Visual Studio: +
      +
    • If %PATH% does not contain GnuWin32, you may specify LLVM_LIT_TOOLS_DIR + on CMake for the path to GnuWin32.
    • +
    • You can run LLVM tests by merely building the project + "check". The test results will be shown in the VS output + window.
    • +
    +
  • + + +
  • Test LLVM: +
      +
    • The LLVM tests can be run by cding to the llvm source directory + and running: - -
      - Hardware +
      +
      +% llvm-lit test
      +
      -
      +

      Note that quite a few of these test will fail.

      +
    • -

      Any system that can adequately run Visual Studio .NET 2003 is fine. The - LLVM source tree and object files, libraries and executables will consume - approximately 3GB.

      +
    • A specific test or test directory can be run with: +
      +
      +% llvm-lit test/path/to/test
      +
      - - - -
      - -

      You will need Visual Studio .NET 2003. Earlier versions cannot open the - solution/project files. The VS 2005 beta can, but will migrate these files - to its own format in the process. While it should work with the VS 2005 - beta, there are no guarantees and there is no support for it at this time. - It has been reported that VC++ Express also works.

      - -

      If you plan to modify any .y or .l files, you will need to have bison - and/or flex installed where Visual Studio can find them. Otherwise, you do - not need them and the pre-generated files that come with the source tree - will be used.

      +
    • +
    +
  • - +

    + An Example Using the LLVM Tool Chain +

    -
    - -

    The remainder of this guide is meant to get you up and running with -LLVM using Visual Studio and to give you some basic information about the LLVM -environment.

    +
    +
      +
    1. First, create a simple C file, name it 'hello.c':

      + +
      +
      +#include <stdio.h>
      +int main() {
      +  printf("hello world\n");
      +  return 0;
      +}
      +
    2. + +
    3. Next, compile the C file into a LLVM bitcode file:

      + +
      +
      +% clang -c hello.c -emit-llvm -o hello.bc
      +
      - - - -
      - -

      Throughout this manual, the following names are used to denote paths -specific to the local system and working environment. These are not -environment variables you need to set but just strings used in the rest -of this document below. In any of the examples below, simply replace -each of these names with the appropriate pathname on your local system. -All these paths are absolute:

      - -
      -
      SRC_ROOT -
      - This is the top level directory of the LLVM source tree. -

      - -

      OBJ_ROOT -
      - This is the top level directory of the LLVM object tree (i.e. the - tree where object files and compiled programs will be placed. It - is fixed at SRC_ROOT/win32). -

      -

      +

      This will create the result file hello.bc which is the LLVM + bitcode that corresponds the the compiled program and the library + facilities that it required. You can execute this file directly using + lli tool, compile it to native assembly with the llc, + optimize or analyze it further with the opt tool, etc.

      -
      +

      Alternatively you can directly output an executable with clang with: +

      - -
      - The Location of LLVM Object Files +
      +
      +% clang hello.c -o hello.exe
      +
      -
      - -

      The object files are placed under OBJ_ROOT/Debug for debug builds - and OBJ_ROOT/Release for release (optimized) builds. These include - both executables and libararies that your application can link against. - -

      The files that configure would create when building on Unix are - created by the Configure project and placed in - OBJ_ROOT/llvm. You application must have OBJ_ROOT in its include - search path just before SRC_ROOT/include. - -

      - - - - - -
      - -
        -
      1. First, create a simple C file, name it 'hello.c': -
        -   #include <stdio.h>
        -   int main() {
        -     printf("hello world\n");
        -     return 0;
        -   }
        -       
      2. - -
      3. Next, compile the C file into a LLVM bytecode file:

        -

        % llvm-gcc -c hello.c -emit-llvm -o hello.bc

        - -

        This will create the result file hello.bc which is the LLVM - bytecode that corresponds the the compiled program and the library - facilities that it required. You can execute this file directly using - lli tool, compile it to native assembly with the llc, - optimize or analyze it further with the opt tool, etc.

        - -

        Note: while you cannot do this step on Windows, you can do it on a - Unix system and transfer hello.bc to Windows. Important: - transfer as a binary file!

      4. +

        The -o hello.exe is required because clang currently outputs + a.out when neither -o nor -c are given.

      5. Run the program using the just-in-time compiler:

        - -

        % lli hello.bc

      6. -

        Note: this will only work for trivial C programs. Non-trivial programs - (and any C++ program) will have dependencies on the GCC runtime that - won't be satisfied by the Microsoft runtime libraries.

        +
        +
        +% lli hello.bc
        +
        +
      7. Use the llvm-dis utility to take a look at the LLVM assembly code:

        -

        % llvm-dis < hello.bc | more

      8. +
        +
        +% llvm-dis < hello.bc | more
        +
        +
        -
      9. Compile the program to C using the LLC code generator:

        +
      10. Compile the program to object code using the LLC code generator:

        -

        % llc -march=c hello.bc

      11. +
        +
        +% llc -filetype=obj hello.bc
        +
        +
        -
      12. Compile to binary using Microsoft C:

        +
      13. Link to binary using Microsoft link:

        -

        % cl hello.cbe.c

      14. - -

        Note: this will only work for trivial C programs. Non-trivial programs - (and any C++ program) will have dependencies on the GCC runtime that - won't be satisfied by the Microsoft runtime libraries. Currently, it - doesn't even work for trivial C programs such as the one above.

        +
        +
        +% link hello.obj -defaultlib:libcmt
        +
        +
      15. Execute the native code program:

        -

        % hello.cbe.exe

      16. - +
        +
        +% hello.exe
        +
        +
      - + -
      +

      If you are having problems building or using LLVM, or if you have any other general questions about LLVM, please consult the Frequently @@ -319,12 +333,12 @@ Asked Questions page.

      -
      +

      Links -

      + -
      +

      This document is just an introduction to how to use LLVM to do some simple things... there are many more interesting and complicated things @@ -335,8 +349,6 @@ out:

      @@ -346,12 +358,11 @@ out:


      Valid CSS! + src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"> Valid HTML 4.01! + src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"> - Jeff Cohen
      - The LLVM Compiler Infrastructure
      + The LLVM Compiler Infrastructure
      Last modified: $Date$