blob: aa70e1701a7a50ca24ea8d245417d75bde8906a8 [file] [log] [blame] [view]
Mojo
====
Mojo is an effort to extract a common platform out of Chrome's renderer and plugin processes that can support multiple types of sandboxed content, such as HTML, Pepper, or NaCl.
## Set up your environment
The instructions below only need to be done once. Note that a simple "git clone" command is not sufficient to build the source code because this repo uses the gclient command from depot_tools to manage most third party dependencies.
1. Download depot_tools and make sure it is in your path:<br>http://www.chromium.org/developers/how-tos/install-depot-tools<br>
2. Create a directory somewhere for your checkout, cd into it, and run the following commands:
```
$ fetch mojo # use --target_os=android if you want an Android build.
$ cd src
$ ./build/install-build-deps.sh
$ gn gen out/Debug
```
The "fetch mojo" command does the following:
- creates a directory called 'src' under your checkout directory
- clones the repository using git clone
- clones dependencies with gclient sync
Finally, "install-build-deps.sh" installs any packages needed to build.
If the fetch command fails, you will need to delete the src directory and start over.
## Build Mojo
Build Mojo by running:
```
$ ninja -C out/Debug -j 10 root
```
The "root" parameter specifies the target to build, it's not a special keyword. You can find the "root" target in src/BUILD.gn.
(If you are a Googler, see the section at the end of this document for faster builds.)
You can also use the mojob.py script for building. This script automatically calls ninja and sets -j to an appropriate value based on whether Goma is present. You cannot specify a target name with this script.
```
mojo/tools/mojob.py build
```
Run a demo:
```
mojo/tools/mojo_demo.sh --browser
```
Run the tests:
```
mojo/tools/mojob.py test
```
## Update your repo
You can update your repo like this:
```
$ gclient sync
$ git pull --rebase
```
You do not need to rerun "gn gen out/Debug". Ninja will do so automatically as needed.
## Contribute
With git you should make all your changes in a local branch. Once your change is committed, you can delete this branch.
Create a local branch named "mywork" and make changes to it.
```
cd src
git new-branch mywork
vi ...
```
Commit your change locally (this doesn't commit your change to the SVN or Git server)
```
git commit -a
```
If you added new files, you should tell git so by running `git add <files>` before committing.
Upload your change for review
```
git cl upload
```
Respond to review comments
See <a href="http://www.chromium.org/developers/contributing-code">Contributing code</a> for more detailed git instructions, including how to update your CL when you get review comments. There's a short tutorial that might be helpful to try before your first change: <a href="http://dev.chromium.org/developers/cpp-in-chromium-101-codelab">C++ in Chromium 101</a>.
To land a change after receiving LGTM:
```
$ git cl land
```
Don't break the build! Waterfall is here: http://build.chromium.org/p/client.mojo/waterfall
## Googlers
If you're a Googler, you can use Goma, a distributed compiler service for open-source projects such as Chrome and Android. The instructions below assume that Goma is installed in the default location (~/goma).
To enable Goma, update your "args.gn" file. Open the file in your editor with this command:
```
$ gn args out/Debug
```
Add this line to the end of the file:
```
use_goma = true
```
After you close the editor, the "gn args" command will automatically run "gn gen out/Debug" again.
Now you can dramatically increase the number of parallel tasks:
```
$ ninja -C out/Debug -j 1000 root
```