<!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="#unpack">Unpacking the LLVM Archives</a>
      <li><a href="#checkout">Checkout LLVM from CVS</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 directly generate an
  executable file.  You can do so indirectly by using the C back end.</p>

  <p>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.</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>or use WinZip</i>
      <li><tt>cd llvm</tt></li>
    </ol></li>

    <li>With anonymous CVS access (or use a <a href="#mirror">mirror</a>):
    <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>

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

  <p>You will also need several open source packages:  bison, flex, and sed.
  These must be installed in <tt>llvm/win32/tools</tt>.  These can be found at
  <a href="http://gnuwin32.sourceforge.net/">http://gnuwin32.sourceforge.net/
  </a>.  Bison prefers that m4 be in the path.  You must add it to the Visual
  Studio configuration under the menu Options -&gt; Projects -&gt; VC++
  Directories.  Alternatively, you can set the environment variable <tt>M4</tt>
  to point to <tt>m4</tt> executable.</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="unpack">Unpacking the LLVM Archives</a>
</div>

<div class="doc_text">

<p>
If you have the LLVM distribution, you will need to unpack it before you
can begin to compile it.  LLVM is distributed as a set of two files: the LLVM
suite and the LLVM GCC front end compiled for your platform.  There is an
additional test suite that is optional.  Each file is a TAR archive that is
compressed with the gzip program.  The WinZip program can also unpack this
archive.  Only the LLVM suite is usable with Visual Studio.
</p>

<p> The files are as follows:
<dl>
  <dt><tt>llvm-1.4.tar.gz</tt></dt>
  <dd>This is the source code for the LLVM libraries and tools.<br/></dd>
</dl>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="checkout">Checkout LLVM from CVS</a>
</div>

<div class="doc_text">

<p>If you have access to our CVS repository, you can get a fresh copy of
the entire source code.  Note that significant progress has been made on the
Visual Studio port since 1.4 was released.  All you need to do is check it out
from CVS as follows:</p>

<ul>
<li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
  <li><tt>cvs -d :pserver:anon@llvm-cvs.cs.uiuc.edu:/var/cvs/llvm login</tt>
  <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>
</ul>

<p>This will create an '<tt>llvm</tt>' directory in the current
directory and fully populate it with the LLVM source code, Makefiles,
test directories, and local copies of documentation files.</p>

<p>If you want to get a specific release (as opposed to the most recent
revision), you can specify a label.  The following releases have the following
label:</p>

<ul>
<li>Release 1.4: <b>RELEASE_14</b></li>
<li>Release 1.3: <b>RELEASE_13</b></li>
<li>Release 1.2: <b>RELEASE_12</b></li>
<li>Release 1.1: <b>RELEASE_11</b></li>
<li>Release 1.0: <b>RELEASE_1</b></li>
</ul>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="mirrors">LLVM CVS Mirrors</a>
</div>

<div class="doc_text">

<p>If the main CVS server is overloaded or inaccessible, you can try one of
these user-hosted mirrors:</p>

<ul>
<li><a href="http://llvm.x10sys.com/">Mirror hosted by eXtensible Systems
Inc.</a></li>
</ul>
</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. To make sure the program ran, execute the
      following command:</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 | less</tt><p></li>

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

      <p><tt>% llc hello.bc -o hello.s</tt></p>

  <li><p>Assemble the native assembly language file into a program:</p>

  <p><b>Not currently possible, but eventually will use <tt>NASMW</tt>.</b></p>

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

      <p><tt>% ./hello.native</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.cs.uiuc.edu/">LLVM homepage</a></li>
  <li><a href="http://llvm.cs.uiuc.edu/doxygen/">LLVM doxygen tree</a></li>
  <li><a href="http://llvm.cs.uiuc.edu/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:sabre@nondot.org">Chris Lattner</a><br>
  <a href="http://llvm.x10sys.com/rspencer/">Reid Spencer</a><br>
  <a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a><br>
  Last modified: $Date$
</address>
</body>
</html>
