---
layout: doc
title: "Set up your environment - Linux"
---

These instructions explain how Linux users set up their Cobalt development
environment, fetch a copy of the Cobalt code repository, and build a Cobalt
binary. Note that the binary has a graphical client and must be run locally
on the machine that you are using to view the client. For example, you cannot
SSH into another machine and run the binary on that machine.

1.  Choose where you want to put the `depot_tools` directory, which is used
    by the Cobalt code. An easy option is to put them in `~/depot_tools`.
    Clone the tools by running the following command:

    ```
    $ cd ~/
    $ git clone https://cobalt.googlesource.com/depot_tools
    ```

1.  Add your `depot_tools` directory to the end of your `PATH` variable.
    We recommend adding something like this to your `.bashrc` or `.profile`
    file:

    ```
    $ PATH=${PATH}:/path/to/depot_tools
    ```

1.  Run the following command to install packages needed to build and run
    Cobalt on Linux:

    ```
    $ sudo apt-get install bison build-essential coreutils git gperf \
           libasound2-dev libavformat-dev libavresample-dev \
           libdirectfb-dev libdirectfb-extra libpulse-dev \
           libgl1-mesa-dev libgles2-mesa-dev libx11-dev \
           libxcomposite-dev libxcomposite1 libxrender-dev libxrender1 \
           libxpm-dev m4 ruby tar xserver-xephyr xz-utils yasm
    ```

1.  Install the latest version of the standard C++ header files (`libstdc++`).
    For example:

    ```
    sudo apt-get install libstdc++-4.8-dev
    ```

1.  Clone the Cobalt code repository. The following `git` command creates a
    `cobalt` directory that contains the repository:

    ```
    $ git clone https://cobalt.googlesource.com/cobalt
    ```

1.  Modify your path to include the version of Clang that is downloaded
    in the next step of the instructions. The next step will return an
    error if this version of Clang is not in your path before it runs.

    ```
    $PATH="/path/to/cobalt/src/third_party/llvm-build/Release+Asserts/bin:${PATH}"
    ```

1.  Build the code by navigating to the `src` directory in your new
    `cobalt` directory and running the following command. You must
    specify a platform when running this command. On goobuntu, the
    canonical platform is `linux-x64x11`.

    You can also use the `-C` command-line flag to specify a `build_type`.
    Valid build types are `debug`, `devel`, `qa`, and `gold`. If you
    specify a build type, the command finishes sooner. Otherwise, all types
    are built.

    ```
    $ cobalt/build/gyp_cobalt [-C <build_type>] <platform>
    ```

    <aside class="note"><b>Important:</b> You need to rerun gyp_cobalt every
    time a change is made to a `.gyp` file.</aside>

1.  Compile the code from the `src/` directory:

    ```
    $ ninja -C out/<platform>_<build_type> <target_name>
    ```

    The previous command contains three variables:

    1.  `<platform>` is the [platform
        configuration](/starboard/porting.html#1-enumerate-and-name-your-platform-configurations)
        that identifies the platform. As described in the Starboard porting
        guide, it contains a `family name` (like `linux`) and a
        `binary variant` (like `x64x11`), separated by a hyphen.
    1.  `<build_type>` is the build you are compiling. Possible values are
        `debug`, `devel`, `qa`, and `gold`. These values are also described in
        the Starboard porting guide under the [required file modifications](
        /starboard/porting.html#4-make-required-file-modifications) for the
        `gyp_configuration.gypi` file.
    1.  `<target_name>` is the name assigned to the compiled code and it is
        used to run the code compiled in this step. The most common names are
        `cobalt`, `nplb`, and `all`:
        *   `cobalt` builds the Cobalt app.
        *   `nplb` builds Starboard's platform verification test suite to
            ensure that your platform's code passes all tests for running
            Cobalt.
        *   `all` builds all targets.

    For example:

    ```
    ninja -C out/linux-x64x11_debug cobalt
    ```

    This command compiles the Cobalt `debug` configuration for the
    `linux-x64x11` platform and creates a target named `cobalt` that
    you can then use to run the compiled code.

1.  Run the compiled code to launch the Cobalt client:

    ```
    # Note that 'cobalt' was the <target_name> from the previous step.
    $ out/linux-x64x11_debug/cobalt [--url=<url>]
    ```

    The flags in the following table are frequently used, and the full set
    of flags that this command supports are in <code><a
    href="https://cobalt.googlesource.com/cobalt/+/master/src/cobalt/browser/switches.cc">cobalt/browser/switches.cc</a></code>.

    <table class="details responsive">
      <tr>
        <th colspan="2">Flags</th>
      </tr>
      <tr>
        <td><code>allow_http</code></td>
        <td>Indicates that you want to use `http` instead of `https`.</td>
      </tr>
      <tr>
        <td><code>ignore_certificate_errors</code></td>
        <td>Indicates that you want to connect to an <code>https</code> host
            that doesn't have a certificate that can be validated by our set
            of root CAs.</td>
      </tr>
      <tr>
        <td><code>url</code></td>
        <td>Defines the startup URL that Cobalt will use. If no value is set,
            then Cobalt uses a default URL. This option lets you point at a
            different app than the YouTube app.</td>
      </tr>
    </table>

<!--
<aside class="note">
<b>Note:</b> If you plan to upload reviews to the Cobalt repository, you
also need to <a href="/development/setup-gitcookies.html">follow these
instructions</a> to set up a <code>.gitcookies</code> file.
</aside>
-->
