| # Checking out and building on Fuchsia |
| |
| ***Note that the Fuchsia port is in the early stages, and things are likely to |
| frequently be broken. Try #cr-fuchsia on Freenode if something seems awry.*** |
| |
| There are instructions for other platforms linked from the |
| [get the code](get_the_code.md) page. |
| |
| ## System requirements |
| |
| * A 64-bit Intel machine with at least 8GB of RAM. More than 16GB is highly |
| recommended. |
| * At least 100GB of free disk space. |
| * You must have Git and Python installed already. |
| |
| Most development is done on Ubuntu. |
| |
| ## Install `depot_tools` |
| |
| Clone the `depot_tools` repository: |
| |
| ```shell |
| $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git |
| ``` |
| |
| Add `depot_tools` to the end of your PATH (you will probably want to put this |
| in your `~/.bashrc` or `~/.zshrc`). Assuming you cloned `depot_tools` to |
| `/path/to/depot_tools`: |
| |
| ```shell |
| $ export PATH="$PATH:/path/to/depot_tools" |
| ``` |
| |
| ## Get the code |
| |
| Create a `chromium` directory for the checkout and change to it (you can call |
| this whatever you like and put it wherever you like, as long as the full path |
| has no spaces): |
| |
| ```shell |
| $ mkdir ~/chromium && cd ~/chromium |
| ``` |
| |
| Run the `fetch` tool from depot_tools to check out the code and its |
| dependencies. |
| |
| ```shell |
| $ fetch --nohooks chromium |
| ``` |
| |
| If you don't want the full repo history, you can save a lot of time by |
| adding the `--no-history` flag to `fetch`. |
| |
| Expect the command to take 30 minutes on even a fast connection, and many |
| hours on slower ones. |
| |
| If you've already installed the build dependencies on the machine (from another |
| checkout, for example), you can omit the `--nohooks` flag and `fetch` |
| will automatically execute `gclient runhooks` at the end. |
| |
| When `fetch` completes, it will have created a hidden `.gclient` file and a |
| directory called `src` in the working directory. The remaining instructions |
| assume you have switched to the `src` directory: |
| |
| ```shell |
| $ cd src |
| ``` |
| |
| ### Configure for building on Fuchsia |
| |
| Edit `.gclient` to include (this is a list, so it could also include `android`, |
| etc. if necessary.) |
| |
| ``` |
| target_os = ['fuchsia'] |
| ``` |
| |
| You will then need to re-run `gclient runhooks`. This makes sure the Fuchsia SDK |
| is available in third\_party and keeps it up to date. |
| |
| |
| ## Setting up the build |
| |
| Chromium uses [Ninja](https://ninja-build.org) as its main build tool along |
| with a tool called [GN](../tools/gn/docs/quick_start.md) to generate `.ninja` |
| files. You can create any number of *build directories* with different |
| configurations. To create a build directory, run: |
| |
| ```shell |
| $ gn gen out/fuch --args="is_debug=false dcheck_always_on=true is_component_build=false target_os=\"fuchsia\"" |
| ``` |
| |
| `use_goma=true` is fine to use also if you're a Googler. |
| |
| ## Build |
| |
| Currently, not all targets build on Fuchsia. You can build base\_unittests, for |
| example: |
| |
| ```shell |
| $ ninja -C out/fuch base_unittests |
| ``` |
| |
| ## Run |
| |
| Once it is built, you can run by: |
| |
| ```shell |
| $ out/fuch/bin/run_base_unittests |
| ``` |
| |
| This packages the built binary and test data into a disk image, and runs a QEMU |
| instance from the Fuchsia SDK, outputting to the console. |
| |
| Common gtest arguments such as `--gtest_filter=...` are supported by the run |
| script. |
| |
| The run script also symbolizes backtraces. |
| |
| A useful alias (for "Build And Run Filtered") is: |
| ```shell |
| alias barf='ninja -C out/fuch base_unittests -j1000 && out/fuch/bin/run_base_unittests --test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.base_unittests.filter' |
| ``` |
| to build and run only the tests that are not excluded/known-failing on the bot. |