blob: 9a6d30e8a151490bc7da7d3db8830935555aa87b [file] [log] [blame] [view] [edit]
# Using a Fuchsia SDK produced by a local Fuchsia platform tree
By default, the Bazel SDK fetches a Fuchsia IDK from a remote repository called
CIPD, with a version specified in a manifest, for example
https://fuchsia.googlesource.com/sdk-integration/+/refs/heads/main/bazel_rules_fuchsia/fuchsia/manifests/core_sdk.ensure
There are situations where a Fuchsia Platform developer needs to make changes
in the platform and verify if they work on a SDK-based repository before
actually submitting the change.
For this use case, we support a mode of development where the Bazel SDK directly
fetches the Fuchsia SDK artifacts from a Fuchsia Platform tree. This document
explains how.
## In the Fuchsia Platform tree
### Set the Fuchsia product configuration
If you don't have it yet, set the Fuchsia Platform tree with the appropriate
product/bundle and kernel args. There is nothing special required for this
workflow, so just use what you would use anyway for validating your changes.
For example:
```
fx set workstation_eng.qemu-x64 --release
```
### Make changes to the Fuchsia code and build the SDK
Once you make your changes in Fuchsia, build the SDK:
```
fx build sdk
```
Or, if you use the experimental SDK: (`has_experimental` flag is true in your
`fuchsia_sdk_repository` rule in `WORKSPACE.bazel`)
```
fx build sdk sdk:driver
```
## In the SDK-based OOT repository
Set the `LOCAL_FUCHSIA_PLATFORM_BUILD` variable and refresh the Bazel SDK:
```
export LOCAL_FUCHSIA_PLATFORM_BUILD=$HOME/fuchsia/$FUCHSIA_OUT_DIR
tools/bazel sync --configure
```
Then you are ready to build your local code.
For example,
```
export LOCAL_FUCHSIA_PLATFORM_BUILD=$HOME/fuchsia/out/core.x64
# in OOT repository
tools/bazel sync --configure
tools/bazel build --config=fuchsia_x64 src:samples_repository
# in Fuchsia platform source:
# change something
fx build sdk sdk:driver
# in OOT repository
tools/bazel sync --configure
tools/bazel build --config=fuchsia_x64 src:samples_repository
```
Note that a few things will look different, with possible side effects:
- the SDK version (ffx sdk version) will be an empty string
- the product bundles (ie emulator images) will require an explict gs://
URL, since SDK version is used by default and it is empty for a local
SDK.
- anything else that depends on the SDK version may not work as
expected.