<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Getting Started with LLVM System for Microsoft Visual Studio</title>
  <link rel="stylesheet" href="llvm.css" type="text/css">
</head>
<body>

<div class="doc_title">
  Getting Started with the LLVM System using Microsoft Visual Studio
</div>

<ul>
  <li><a href="#overview">Overview</a>
  <li><a href="#quickstart">Getting Started Quickly (A Summary)</a>
  <li><a href="#requirements">Requirements</a>
    <ol>
      <li><a href="#hardware">Hardware</a>
      <li><a href="#software">Software</a>
    </ol></li>

  <li><a href="#starting">Getting Started with LLVM</a>
    <ol>
      <li><a href="#terminology">Terminology and Notation</a>
      <li><a href="#objfiles">The Location of LLVM Object Files</a>
    </ol></li>

  <li><a href="#tutorial">An Example Using the LLVM Tool Chain</a>
  <li><a href="#problems">Common Problems</a>
  <li><a href="#links">Links</a>
</ul>

<div class="doc_author">
  <p>Written by: 
    <a href="mailto:jeffc@jolt-lang.org">Jeff Cohen</a>
  </p>
</div>


<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="overview"><b>Overview</b></a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

  <p>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.</p>

  <p>To emphasize, there is no C/C++ front end currently available.
  <tt>llvm-gcc</tt> is based on GCC, which cannot be bootstrapped using VC++.
  Eventually there should be a <tt>llvm-gcc</tt> 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 <tt>llvm-gcc</tt> with code compiled with VC++ is essentially
  zero.</p>

  <p>The LLVM test suite cannot be run on the Visual Studio port at this
  time.</p>

  <p>Most of the tools build and work.  <tt>llvm-db</tt> does not build at this
  time.  <tt>bugpoint</tt> does build, but does not work.

  <p>Additional information about the LLVM directory structure and tool chain
  can be found on the main <a href="GettingStarted.html">Getting Started</a>
  page.</P>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="quickstart"><b>Getting Started Quickly (A Summary)</b></a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>Here's the short story for getting up and running quickly with LLVM:</p>

<ol>
  <li>Read the documentation.</li>
  <li>Read the documentation.</li>
  <li>Remember that you were warned twice about reading the documentation.</li>

  <li>Get the Source Code
  <ul>
    <li>With the distributed files:
    <ol>
      <li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
      <li><tt>gunzip --stdout llvm-<i>version</i>.tar.gz | tar -xvf -</tt>
      <i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or use WinZip</i>
      <li><tt>cd llvm</tt></li>
    </ol></li>

    <li>With anonymous CVS access:
    <ol>
      <li><tt>cd <i>where-you-want-llvm-to-live</i></tt></li>
      <li><tt>cvs -d
          :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm login</tt></li>
      <li>Hit the return key when prompted for the password.
      <li><tt>cvs -z3 -d :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm 
          co llvm</tt></li>
      <li><tt>cd llvm</tt></li>
      <li><tt>cvs up -P -d</tt></li>
    </ol></li>
  </ul></li>

  <li>Start Visual Studio
  <ol>
    <li>Simply double click on the solution file <tt>llvm/win32/llvm.sln</tt>.
    </li>
  </ol></li>

  <li>Build the LLVM Suite:
  <ol>
    <li>Simply build the solution.</li>
    <li>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.</li>
  </ol></li>

</ol>

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

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="requirements"><b>Requirements</b></a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

  <p>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.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="hardware"><b>Hardware</b></a>
</div>

<div class="doc_text">

  <p>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.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection"><a name="software"><b>Software</b></a></div>
<div class="doc_text">

  <p>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.</p>

  <p>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.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="starting"><b>Getting Started with LLVM</b></a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>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.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="terminology">Terminology and Notation</a>
</div>

<div class="doc_text">

<p>Throughout this manual, the following names are used to denote paths
specific to the local system and working environment.  <i>These are not
environment variables you need to set but just strings used in the rest
of this document below</i>.  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:</p>

<dl>
    <dt>SRC_ROOT
    <dd>
    This is the top level directory of the LLVM source tree.
    <p>

    <dt>OBJ_ROOT
    <dd>
    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).
    <p>
</dl>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="objfiles">The Location of LLVM Object Files</a>
</div>

<div class="doc_text">

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

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

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="tutorial">An Example Using the LLVM Tool Chain</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<ol>
  <li>First, create a simple C file, name it 'hello.c':
       <pre>
   #include &lt;stdio.h&gt;
   int main() {
     printf("hello world\n");
     return 0;
   }
       </pre></li>

  <li><p>Next, compile the C file into a LLVM bytecode file:</p>
      <p><tt>% llvm-gcc hello.c -o hello</tt></p>

      <p>Note that you should have already built the tools and they have to be
      in your path, at least <tt>gccas</tt> and <tt>gccld</tt>.</p>

      <p>This will create two result files: <tt>hello</tt> and
      <tt>hello.bc</tt>. The <tt>hello.bc</tt> is the LLVM bytecode that
      corresponds the the compiled program and the library facilities that it
      required.  <tt>hello</tt> is a simple shell script that runs the bytecode
      file with <tt>lli</tt>, making the result directly executable.  Note that
      all LLVM optimizations are enabled by default, so there is no need for a 
      "-O3" switch.</p>
      
      <p><b>Note: while you cannot do this step on Windows, you can do it on a
        Unix system and transfer <tt>hello.bc</tt> to Windows.</b></p></li>

  <li><p>Run the program using the just-in-time compiler:</p>
      
      <p><tt>% lli hello.bc</tt></p></li>

  <li><p>Use the <tt>llvm-dis</tt> utility to take a look at the LLVM assembly
      code:</p>

      <p><tt>% llvm-dis &lt; hello.bc | more</tt><p></li>

  <li><p>Compile the program to C using the LLC code generator:</p>

      <p><tt>% llc -march=c hello.bc</tt></p></li>

  <li><p>Compile to binary using Microsoft C:</p>

      <p><tt>% cl hello.cbe.c</tt></p></li>

  <li><p>Execute the native code program:</p>

      <p><tt>% hello.cbe.exe</tt></p></li>

</ol>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="problems">Common Problems</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>If you are having problems building or using LLVM, or if you have any other
general questions about LLVM, please consult the <a href="FAQ.html">Frequently
Asked Questions</a> page.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="links">Links</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>This document is just an <b>introduction</b> to how to use LLVM to do
some simple things... there are many more interesting and complicated things
that you can do that aren't documented here (but we'll gladly accept a patch
if you want to write something up!).  For more information about LLVM, check
out:</p>

<ul>
  <li><a href="http://llvm.org/">LLVM homepage</a></li>
  <li><a href="http://llvm.org/doxygen/">LLVM doxygen tree</a></li>
  <li><a href="http://llvm.org/docs/Projects.html">Starting a Project
  that Uses LLVM</a></li>
</ul>

</div>

<!-- *********************************************************************** -->

<hr>
<address>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
  src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
  <a href="http://validator.w3.org/check/referer"><img
  src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>

  <a href="mailto:jeffc@jolt-lang.org">Jeff Cohen</a><br>
  <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
  Last modified: $Date$
</address>
</body>
</html>
