<!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=ISO-8859-1">
  <title>Clang - Getting Started</title>
  <link type="text/css" rel="stylesheet" href="menu.css">
  <link type="text/css" rel="stylesheet" href="content.css">
</head>
<body>

<!--#include virtual="menu.html.incl"-->

<div id="content">

<h1>Getting Started: Building and Running Clang</h1>

<p>This page gives you the shortest path to checking out Clang and demos a few
options.  This should get you up and running with the minimum of muss and fuss.
If you like what you see, please consider <a href="get_involved.html">getting
involved</a> with the Clang community.  If you run into problems, please file
bugs in <a href="https://bugs.llvm.org/">LLVM Bugzilla</a>.</p>

<h2 id="download">Release Clang Versions</h2>

<p>Clang is released as part of regular LLVM releases. You can download the release versions from <a href="https://llvm.org/releases/">https://llvm.org/releases/</a>.</p>
<p>Clang is also provided in all major BSD or GNU/Linux distributions as part of their respective packaging systems. From Xcode 4.2, Clang is the default compiler for Mac OS X.</p>

<h2 id="build">Building Clang and Working with the Code</h2>

<h3 id="buildNix">On Unix-like Systems</h3>

<p>Note: as an experimental setup, you can use a <b>single checkout</b> with all the projects, and an <b>easy CMake invocation</b>, see the LLVM Doc "<a href="https://llvm.org/docs/GettingStarted.html#for-developers-to-work-with-a-git-monorepo">For developers to work with a git monorepo</a>"</p>

<p>If you would like to check out and build Clang, the current procedure is as
follows:</p>

<ol>
  <li>Get the required tools.
  <ul>
    <li>See
      <a href="https://llvm.org/docs/GettingStarted.html#requirements">
      Getting Started with the LLVM System - Requirements</a>.</li>
    <li>Note also that Python is needed for running the test suite.
      Get it at: <a href="http://www.python.org/download">
      http://www.python.org/download</a></li>
    <li>Standard build process uses CMake. Get it at:
      <a href="http://www.cmake.org/download">
      http://www.cmake.org/download</a></li>
  </ul>

  <li>Check out LLVM:
  <ul>
    <li>Change directory to where you want the llvm directory placed.</li>
    <li><tt>svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm</tt></li>
  </ul>
  </li>
  <li>Check out Clang:
  <ul>
    <li><tt>cd llvm/tools</tt></li>
    <li><tt>svn co http://llvm.org/svn/llvm-project/cfe/trunk clang</tt></li>
    <li><tt>cd ../..</tt></li>
  </ul>
  </li>
  <li>Check out extra Clang tools: (optional)
  <ul>
    <li><tt>cd llvm/tools/clang/tools</tt></li>
    <li><tt>svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk
        extra</tt></li>
    <li><tt>cd ../../../..</tt></li>
  </ul>
  </li>
  <li>Check out Compiler-RT (optional):
  <ul>
    <li><tt>cd llvm/projects</tt></li>
    <li><tt>svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk
        compiler-rt</tt></li>
    <li><tt>cd ../..</tt></li>
  </ul>
  </li>
  <li>Check out libcxx: (only required to build and run Compiler-RT tests on OS X, optional otherwise)
  <ul>
    <li><tt>cd llvm/projects</tt></li>
    <li><tt>svn co http://llvm.org/svn/llvm-project/libcxx/trunk
        libcxx</tt></li>
    <li><tt>cd ../..</tt></li>
  </ul>
  </li>
  <li>Build LLVM and Clang:
  <ul>
    <li><tt>mkdir build</tt> (in-tree build is not supported)</li>
    <li><tt>cd build</tt></li>
    <li><tt>cmake -G "Unix Makefiles" ../llvm</tt></li>
    <li><tt>make</tt></li>
    <li>This builds both LLVM and Clang for debug mode.</li>
    <li>Note: For subsequent Clang development, you can just run
        <tt>make clang</tt>.</li>
    <li>CMake allows you to generate project files for several IDEs: Xcode,
        Eclipse CDT4, CodeBlocks, Qt-Creator (use the CodeBlocks generator),
        KDevelop3. For more details see
        <a href="https://llvm.org/docs/CMake.html">Building LLVM with CMake</a>
        page.</li>
  </ul>
  </li>

  <li>If you intend to use Clang's C++ support, you may need to tell it how
      to find your C++ standard library headers. In general, Clang will detect
      the best version of libstdc++ headers available and use them - it will
      look both for system installations of libstdc++ as well as installations
      adjacent to Clang itself. If your configuration fits neither of these
      scenarios, you can use the <tt>-DGCC_INSTALL_PREFIX</tt> cmake option
      to tell Clang where the gcc containing the desired libstdc++ is installed.
  </li>
  <li>Try it out (assuming you add llvm/build/bin to your path):
  <ul>
    <li><tt>clang --help</tt></li>
    <li><tt>clang file.c -fsyntax-only</tt> (check for correctness)</li>
    <li><tt>clang file.c -S -emit-llvm -o -</tt> (print out unoptimized llvm code)</li>
    <li><tt>clang file.c -S -emit-llvm -o - -O3</tt></li>
    <li><tt>clang file.c -S -O3 -o -</tt> (output native machine code)</li>
  </ul>
  </li>
  <li>Run the testsuite:
  <ul>
    <li><tt>make check-clang</tt></li>
  </ul>
  </li>
</ol>

<h3>Simultaneously Building Clang and LLVM:</h3>

<p>Once you have checked out Clang into the llvm source tree it will build along
with the rest of <tt>llvm</tt>. To build all of LLVM and Clang together all at
once simply run <tt>make</tt> from the root LLVM directory.</p>

<p>If you encounter problems while building Clang, make sure that your LLVM
checkout is at the same revision as your Clang checkout. LLVM's interfaces
change over time, and mismatched revisions are not expected to work
together. We recommend writing a script to automatically run <tt>svn up</tt> in
each repository to keep them synchronized. Alternatively, you may consider using
the unofficial
<a href="https://llvm.org/docs/GettingStarted.html#for-developers-to-work-with-a-git-monorepo">git monorepo</a>
which automatically keeps everything in sync at the same revision and lets you
commit changes atomically across multiple LLVM subprojects.</p>

<h3 id="buildWindows">Using Visual Studio</h3>

<p>The following details setting up for and building Clang on Windows using
Visual Studio:</p>

<ol>
  <li>Get the required tools:
  <ul>
    <li><b>Subversion</b>.  Source code control program.  Get it from:
        <a href="https://subversion.apache.org/packages.html">
        https://subversion.apache.org/packages.html</a></li>
    <li><b>CMake</b>.  This is used for generating Visual Studio solution and
        project files.  Get it from:
        <a href="https://cmake.org/download/">
        https://cmake.org/download/</a></li>
    <li><b>Visual Studio 2015 or later</b></li>
    <li><b>Python</b>.  It is used to run the clang test suite. Get it from:
        <a href="https://www.python.org/download/">
        https://www.python.org/download/</a></li>
    <li><b>GnuWin32 tools</b>
        The Clang and LLVM test suite use various GNU core utilities, such as
        <tt>grep</tt>, <tt>sed</tt>, and <tt>find</tt>. The gnuwin32 packages
        are the oldest and most well-tested way to get these tools. However, the
        MSys utilities provided by git for Windows have been known to work.
        Cygwin has worked in the past, but is not well tested.
        If you don't already have the core utilies from some other source, get
        gnuwin32 from <a href="http://getgnuwin32.sourceforge.net/">
        http://getgnuwin32.sourceforge.net/</a>.</li>
  </ul>
  </li>

  <li>Check out LLVM:
  <ul>
    <li><tt>svn co https://llvm.org/svn/llvm-project/llvm/trunk llvm</tt></li>
  </ul>
  </li>
  <li>Check out Clang:
  <ul>
     <li><tt>cd llvm\tools</tt>
     <li><tt>svn co https://llvm.org/svn/llvm-project/cfe/trunk clang</tt></li>
  </ul>
  <p><em>Note</em>:  Some Clang tests are sensitive to the line endings.  Ensure
     that checking out the files does not convert LF line endings to CR+LF.
     If you use git-svn, make sure your <tt>core.autocrlf</tt> setting is false.</p>
  </li>
  <li>Run CMake to generate the Visual Studio solution and project files:
  <ul>
    <li><tt>cd ..\..</tt>  (back to where you started)</li>
    <li><tt>mkdir build</tt> (for building without polluting the source dir)</li>
    <li><tt>cd build</tt></li>
    <li>
      If you are using Visual Studio 2017:
      <tt>cmake -G "Visual Studio 15 2017" -A x64 -Thost=x64 ..\llvm</tt><br/>
      <tt>-Thost=x64</tt> is required, since the 32-bit linker will run out of memory.
    </li>
    <li>To generate x86 binaries instead of x64, pass <tt>-A Win32</tt>.</li>
    <li>See the <a href="https://www.llvm.org/docs/CMake.html">LLVM CMake guide</a> for
        more information on other configuration options for CMake.</li>
    <li>The above, if successful, will have created an LLVM.sln file in the
       <tt>build</tt> directory.
  </ul>
  </li>
  <li>Build Clang:
  <ul>
    <li>Open LLVM.sln in Visual Studio.</li>
    <li>Build the "clang" project for just the compiler driver and front end, or
      the "ALL_BUILD" project to build everything, including tools.</li>
  </ul>
  </li>
  <li>Try it out (assuming you added llvm/debug/bin to your path).  (See the
    running examples from above.)</li>
  <li>See <a href="hacking.html#testingWindows">
     Hacking on clang - Testing using Visual Studio on Windows</a> for information
     on running regression tests on Windows.</li>
</ol>

<p>Note that once you have checked out both llvm and clang, to synchronize
to the latest code base, use the <tt>svn update</tt> command in both the
llvm and llvm\tools\clang directories, as they are separate repositories.</p>

<h3 id="buildWindowsNinja">Using Ninja alongside Visual Studio</h3>

<p>We recommend that developers who want the fastest incremental builds use the
<a href="https://ninja-build.org/">Ninja build system</a>. You can use the
generated Visual Studio project files to edit Clang source code and generate a
second build directory next to it for running the tests with these steps:</p>

<ol>
  <li>Check out clang and LLVM as described above</li>
  <li>Open a developer command prompt with the appropriate environment.
    <ul>
      <li>If you open the start menu and search for "Command Prompt", you should
        see shortcuts created by Visual Studio to do this. To use native x64
        tools, choose the one titled "x64 Native Tools Command Prompt for VS
        2017".</li>
      <li> Alternatively, launch a regular <tt>cmd</tt> prompt and run the
        appropriate vcvarsall.bat incantation. To get the 2017 x64 tools, this
        would be:<br/>
        <tt>"C:\Program Files (x86)\Microsoft Visual
          Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64</tt>
      </li>
    </ul>
  </li>
  <li><tt>mkdir build_ninja</tt> (or <tt>build</tt>, or use your own
    organization)</li>
  <li><tt>cd build_ninja</tt></li>
  <li><tt>set CC=cl</tt> (necessary to force CMake to choose MSVC over mingw GCC
    if you have it installed)</li>
  <li><tt>set CXX=cl</tt></li>
  <li><tt>cmake -GNinja ..\llvm</tt></li>
  <li><tt>ninja clang</tt> This will build just clang.</li>
  <li><tt>ninja check-clang</tt> This will run the clang tests.</li>
</ol>

<h2 id="driver">Clang Compiler Driver (Drop-in Substitute for GCC)</h2>

<p>The <tt>clang</tt> tool is the compiler driver and front-end, which is
designed to be a drop-in replacement for the <tt>gcc</tt> command.  Here are
some examples of how to use the high-level driver:
</p>

<pre class="code">
$ <b>cat t.c</b>
#include &lt;stdio.h&gt;
int main(int argc, char **argv) { printf("hello world\n"); }
$ <b>clang t.c</b>
$ <b>./a.out</b>
hello world
</pre>

<p>The 'clang' driver is designed to work as closely to GCC as possible to
  maximize portability.  The only major difference between the two is that
  Clang defaults to gnu99 mode while GCC defaults to gnu89 mode.  If you see
  weird link-time errors relating to inline functions, try passing -std=gnu89
  to clang.</p>

<h2>Examples of using Clang</h2>

<!-- Thanks to
 http://shiflett.org/blog/2006/oct/formatting-and-highlighting-php-code-listings
Site suggested using pre in CSS, but doesn't work in IE, so went for the <pre>
tag. -->

<pre class="code">
$ <b>cat ~/t.c</b>
typedef float V __attribute__((vector_size(16)));
V foo(V a, V b) { return a+b*a; }
</pre>


<h3>Preprocessing:</h3>

<pre class="code">
$ <b>clang ~/t.c -E</b>
# 1 "/Users/sabre/t.c" 1

typedef float V __attribute__((vector_size(16)));

V foo(V a, V b) { return a+b*a; }
</pre>


<h3>Type checking:</h3>

<pre class="code">
$ <b>clang -fsyntax-only ~/t.c</b>
</pre>


<h3>GCC options:</h3>

<pre class="code">
$ <b>clang -fsyntax-only ~/t.c -pedantic</b>
/Users/sabre/t.c:2:17: <span style="color:magenta">warning:</span> extension used
<span style="color:darkgreen">typedef float V __attribute__((vector_size(16)));</span>
<span style="color:blue">                ^</span>
1 diagnostic generated.
</pre>


<h3>Pretty printing from the AST:</h3>

<p>Note, the <tt>-cc1</tt> argument indicates the compiler front-end, and
not the driver, should be run. The compiler front-end has several additional
Clang specific features which are not exposed through the GCC compatible driver
interface.</p>

<pre class="code">
$ <b>clang -cc1 ~/t.c -ast-print</b>
typedef float V __attribute__(( vector_size(16) ));
V foo(V a, V b) {
   return a + b * a;
}
</pre>


<h3>Code generation with LLVM:</h3>

<pre class="code">
$ <b>clang ~/t.c -S -emit-llvm -o -</b>
define &lt;4 x float&gt; @foo(&lt;4 x float&gt; %a, &lt;4 x float&gt; %b) {
entry:
         %mul = mul &lt;4 x float&gt; %b, %a
         %add = add &lt;4 x float&gt; %mul, %a
         ret &lt;4 x float&gt; %add
}
$ <b>clang -fomit-frame-pointer -O3 -S -o - t.c</b> <i># On x86_64</i>
...
_foo:
Leh_func_begin1:
	mulps	%xmm0, %xmm1
	addps	%xmm1, %xmm0
	ret
Leh_func_end1:
</pre>

</div>
</body>
</html>
