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.