| layout | doc |
|---|---|
| title | Set up your environment - Linux |
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 fresh ubuntu:20.04 Docker image. (1/12/22) 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 \ pkgconf ninja-build bison yasm binutils clang libgles2-mesa-dev \ mesa-common-dev libpulse-dev libavresample-dev libasound2-dev \ libxrender-dev libxcomposite-dev libxml2-dev curl git \ python3.8-venv libxi-dev -
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 ccache to support build acceleration. ccache is automatically used when available, otherwise defaults to unaccelerated building:
$ sudo apt install -qqy --no-install-recommends ccacheWe recommend adjusting the cache size as needed to increase cache hits:
$ ccache --max-size=20G -
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
gitcommand creates acobaltdirectory that contains the repository:$ git clone https://cobalt.googlesource.com/cobalt -
Set
PYTHONPATHenvironment variable to include the full path to the top-levelcobaltdirectory from the previous step. Add the following to the end of your ~/.bash_profile (replacingfullpathtowith 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
cobaltdirectory:Note: Pre-commit is only available on branches later than 22.lts.1+, including trunk. The below commands will fail on 22.lts.1+ and earlier branches. For earlier branches, run `cd src` and move on to the next section.$ cd cobalt -
Create a Python 3 virtual environment for working on Cobalt (feel free to use
virtualenvwrapperinstead):$ 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
cobaltdirectory. You must specify a platform when running this command. On Ubuntu Linux, the canonical platform islinux-x64x11.You can also use the
-ccommand-line flag to specify abuild_type. Valid build types aredebug,devel,qa, andgold. 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 afamily name(likelinux) and abinary variant(likex64x11), separated by a hyphen.<build_type>is the build you are compiling. Possible values aredebug,devel,qa, andgold.<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 arecobalt,nplb, andall:cobaltbuilds the Cobalt app.nplbbuilds Starboard's platform verification test suite to ensure that your platform's code passes all tests for running Cobalt.allbuilds all targets.
For example:
ninja -C out/linux-x64x11_debug cobaltThis command compiles the Cobalt
debugconfiguration for thelinux-x64x11platform and creates a target namedcobaltthat 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.Flags allow_httpIndicates that you want to use `http` instead of `https`. ignore_certificate_errorsIndicates that you want to connect to an httpshost that doesn't have a certificate that can be validated by our set of root CAs.urlDefines 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.
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.