blob: f39d5718de49142a6fc80a7feb8165cd21bdbea7 [file] [log] [blame] [view]
# Configure and build Fuchsia {#configure-and-build-fuchsia}
This guide provide instructions on how to configure and build Fuchsia
on a host machine.
The steps are:
1. [Prerequisites](#prerequisites).
1. [Set your build configuration](#set-your-build-configuration).
1. [Speed up the build (Optional)](#speed-up-the-build).
1. [Build Fuchsia](#build-fuchsia).
## 1. Prerequisites {#prerequisites}
Before you start, check out the following requirements:
* [Source code setup](#source-code-setup)
* [Hardware requirements](#hardware-requirements)
### Source code setup {#source-code-setup}
Complete the
[Download the Fuchsia source code](/docs/get-started/get_fuchsia_source.md)
guide to download the Fuchsia source code and set up the Fuchsia development
environment on your machine.
### Hardware requirements {#hardware-requirements}
You can build Fuchsia on a host machine with one of the following
architectures:
- x86-64 Linux (Debian-based distributions only)
- x86-64 macOS
- ARM64 macOS
Note: Windows is not supported.
## 2. Set your build configuration {#set-your-build-configuration}
Fuchsia's build configuration informs the build system which product to
build and which architecture to build for.
To set your Fuchsia build configuration, run the following
[`fx set`][fx-set-reference] command:
```posix-terminal
fx set {{ '<var>' }}PRODUCT{{ '</var>' }}.{{ '<var>' }}BOARD{{ '</var>' }}
```
Replace the following:
* `PRODUCT`: The Fuchsia product that you want to build; for example, `core` and
`workbench_eng`.
* `BOARD`: The architecture of the product; for example, `x64`.
The example command below sets a build configuration to `core.x64`:
```posix-terminal
fx set core.x64
```
In this example:
* `core` is a product with the minimum feature set of Fuchsia, including
common network capabilities.
* `x64` is a board that runs on a wide range of x64 devices, including the
Fuchsia emulator (FEMU), which is based on the open source emulator
[QEMU][qemu]{:.external}.
On the other hand, the example below sets the build configuration to
`workbench_eng.x64`, which is commonly used to
[install Fuchsia's workbench product on a device][build-workbench]:
```posix-terminal
fx set workbench_eng.x64
```
The list of possible boards and products is dynamic. Both lists can be gleaned
starting from the root of the fuchsia repository. For boards see
[boards](https://fuchsia.googlesource.com/fuchsia/+/refs/heads/main/boards/)
for products, see
[products](https://fuchsia.googlesource.com/fuchsia/+/refs/heads/main/products/)
For more information on the build configuration,
see [Configure a build](/docs/development/build/fx.md#configure-a-build).
## 3. Speed up the build (Optional) {#speed-up-the-build}
Note: This step is not required to build Fuchsia, but it's recommended
since it can save you a lot of time when you build Fuchsia.
To speed up the Fuchsia build, you can use one of the following services:
* [Enable Goma](#enable-goma)
* [Install ccache](#install-ccache)
### Enable Goma {#enable-goma}
[Goma](https://chromium.googlesource.com/infra/goma/server/){:.external} is a
distributed compiler service for open source projects such as Chrome, Android
and Fuchsia.
If you have access to Goma, enable a Goma client on your machine:
```posix-terminal
fx goma
```
### Install ccache {#install-ccache}
If you do not have access to Goma, but want to accelerate the Fuchsia build
locally, use <code>[ccache](https://ccache.dev/){:.external}</code> to cache
artifacts from previous builds.
* {Linux}
To use `ccache` on Linux, install the following package:
```posix-terminal
sudo apt install ccache
```
* {macOS}
For macOS, see
[Using CCache on Mac](https://chromium.googlesource.com/chromium/src.git/+/HEAD/docs/ccache_mac.md){:.external}
for installation instructions.
`ccache` is enabled automatically if your `CCACHE_DIR` environment variable
refers to an existing directory.
To override this default behavior, specify the following flags to `fx set`:
* Force the use of `ccache` even when other accelerators are available:
<pre class="prettyprint">
<code class="devsite-terminal">fx set <var>PRODUCT</var>.<var>BOARD</var> --ccache</code>
</pre>
* Disable the use of `ccache`:
<pre class="prettyprint">
<code class="devsite-terminal">fx set <var>PRODUCT</var>.<var>BOARD</var> --no-ccache</code>
</pre>
## 4. Build Fuchsia {#build-fuchsia}
The [`fx build`][fx-build-reference] command executes the build to transform
source code into packages and other build artifacts.
To build Fuchsia, run the following command:
Note: Building Fuchsia can take up to 90 minutes.
```posix-terminal
fx build
```
When you modify source code, run the `fx build` command again to perform an
incremental build, or run the `fx -i build` command to start a watcher, which
automatically builds whenever you update the source code.
For more information on building Fuchsia,
see [Execute a build](/docs/development/build/fx.md#execute-a-build).
## Next steps
To launch the Fuchsia emulator (FEMU) on your machine, see
[Start the Fuchsia emulator](/docs/get-started/set_up_femu.md).
However, if you want to run Fuchsia on a hardware device, see
[Install Fuchsia on a device](/docs/development/hardware/README.md) instead.
<!-- Reference links -->
[build-workbench]: /docs/development/build/build_workbench.md
[fx-set-reference]: https://fuchsia.dev/reference/tools/fx/cmd/set
[fx-build-reference]: https://fuchsia.dev/reference/tools/fx/cmd/build
[qemu]: https://www.qemu.org/