Project: /youtube/cobalt/_project.yaml Book: /youtube/cobalt/_book.yaml
These instructions explain how Linux users set up their Cobalt development environment, clone 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.
These instructions were tested on a clean ubuntu:20.04 Docker image. (7/11/23) Required libraries can differ depending on your Linux distribution and version.
Run the following command to install packages needed to build and run Cobalt on Linux:
$ sudo apt update && sudo apt install -qqy --no-install-recommends \ bison clang libasound2-dev libgles2-mesa-dev libglib2.0-dev \ libxcomposite-dev libxi-dev libxrender-dev nasm ninja-build \ python3.8-venv
Install ccache to support build acceleration. Build acceleration is
enabled by default and must be disabled if ccache is not installed.
$ sudo apt install -qqy --no-install-recommends ccache
We recommend adjusting the cache size as needed to increase cache hits:
$ ccache --max-size=20G
Install Node.js via nvm
:
$ export NVM_DIR=~/.nvm $ export NODE_VERSION=12.17.0 $ curl --silent -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash $ . $NVM_DIR/nvm.sh \ && nvm install --lts \ && nvm alias default lts/* \ && nvm use default
Install GN, which we use for our build system code. There are a few ways to get the binary, follow the instructions for whichever way you prefer here.
Clone the Cobalt code repository. The following git
command creates a cobalt
directory that contains the repository:
$ git clone https://github.com/youtube/cobalt.git
Set PYTHONPATH
environment variable to include the full path to the top-level cobalt
directory from the previous step. Add the following to the end of your ~/.bash_profile (replacing fullpathto
with the actual path where you cloned the repo):
export PYTHONPATH="/fullpathto/cobalt:${PYTHONPATH}"
You should also run the above command in your terminal so it's available immediately, rather than when you next login.
Enter your new cobalt
directory:
$ cd cobalt
Create a Python 3 virtual environment for working on Cobalt (feel free to use virtualenvwrapper
instead):
$ python3 -m venv ~/.virtualenvs/cobalt_dev $ source ~/.virtualenvs/cobalt_dev/bin/activate $ pip install -r requirements.txt
Install the pre-commit hooks:
$ pre-commit install -t post-checkout -t pre-commit -t pre-push --allow-missing-config $ git checkout -b <my-branch-name> origin/master
Download clang++:
$ ./starboard/tools/download_clang.sh
Build the code running the following command in the top-level cobalt
directory. You must specify a platform when running this command. On Ubuntu Linux, 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.
$ python cobalt/build/gn.py [-c <build_type>] -p <platform>
Compile the code from the cobalt/
directory:
$ ninja -C out/<platform>_<build_type> <target_name>
The previous command contains three variables:
<platform>
is the platform configuration 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.<build_type>
is the build you are compiling. Possible values are debug
, devel
, qa
, and gold
.<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.
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 cobalt/browser/switches.cc.
debug
, devel
, and qa
configs of Cobalt expose a feature enabling developers to trace Cobalt‘s callstacks per-thread. This is not only a great way to debug application performance, but also a great way to debug issues and better understand Cobalt’s execution flow in general.
Simply build and run one of these configs and observe the terminal output.