<!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>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 on <a href="https://github.com/llvm/llvm-project/issues">the LLVM bug tracker</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>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="https://www.python.org/downloads/">
      https://www.python.org/downloads/</a></li>
    <li>Standard build process uses CMake. Get it at:
      <a href="https://cmake.org/download/">
      https://cmake.org/download/</a></li>
  </ul>

  <li>Check out the LLVM project:
  <ul>
    <li>Change directory to where you want the llvm directory placed.</li>
    <li><tt>git clone https://github.com/llvm/llvm-project.git</tt></li>
    <li>The above command is very slow. It can be made faster by creating a shallow clone. Shallow clone saves storage and speeds up the checkout time. This is done by using the command:
      <ul>
        <li><tt>git clone --depth=1 https://github.com/llvm/llvm-project.git (using this only the latest version of llvm can be built)</tt></li>
        <li>For normal users looking to just compile, this command works fine. But if someone later becomes a contributor, since they can't push code from a shallow clone, it needs to be converted into a full clone:
          <ul>
            <li><tt>cd llvm-project</tt></li>
            <li><tt>git fetch --unshallow</tt></li>
          </ul>
        </li>
      </ul>
    </li>
  </ul>
  </li>
  <li>Build LLVM and Clang:
  <ul>
    <li><tt>cd llvm-project</tt></li>
    <li><tt>mkdir build</tt> (in-tree build is not supported)</li>
    <li><tt>cd build</tt></li>
    <li>This builds both LLVM and Clang in release mode. Alternatively, if
        you need a debug build, switch Release to Debug. See
        <a href="https://llvm.org/docs/CMake.html#frequently-used-cmake-variables">frequently used cmake variables</a>
        for more options.
    </li>
    <li><tt>cmake -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" ../llvm</tt></li>
    <li><tt>make</tt></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>On Linux, you may need GCC runtime libraries (e.g. <tt>crtbeginS.o,
    libstdc++.so</tt>) and libstdc++ headers. In general, Clang will detect
    well-known GCC installation paths matching the target triple (configured at
    build time (see <tt>clang --version</tt>); overriden by
    <tt>--target=</tt>) and use the largest version. If your configuration fits
    none of the standard scenarios, you can set <tt>--gcc-install-dir=</tt> to
    the GCC installation directory (something like
    <tt>/usr/lib/gcc/$triple/$major</tt>). If your GCC installation is under
    <tt>/usr/lib/gcc</tt> but uses a different triple, you can set
    <tt>--gcc-triple=$triple</tt>.
  </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 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>Git</b>.  Source code control program.  Get it from:
        <a href="https://git-scm.com/download">
        https://git-scm.com/download</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 2019 16.7 or later</b>. This tutorial assumes Visual Studio 2022.</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 and Clang:
  <ul>
    <li><tt>git clone https://github.com/llvm/llvm-project.git</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're using git on Windows, 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 llvm-project</tt></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 2022:
      <tt>cmake -DLLVM_ENABLE_PROJECTS=clang -G "Visual Studio 17 2022" -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>

<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
        2022".</li>
      <li> Alternatively, launch a regular <tt>cmd</tt> prompt and run the
        appropriate vcvarsall.bat incantation. To get the 2022 x64 tools, this
        would be:<br/>
        <tt>"C:\Program Files\Microsoft Visual
          Studio\2022\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 -DLLVM_ENABLE_PROJECTS=clang ..\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>
