The Bazel SDK frontend produces a Bazel workspace.
generate.py: the script that generates the SDK;templates: Mako templates used to produce various SDK files;base: SDK contents that are copied verbatim;tests: various SDK tests, copied over to the test workspace.$root/
    tools/                                 # host tools
    dart/                                  # Dart packages
        lorem/
            BUILD
            lib/
    pkg/                                   # C++ package contents
        foo/
            BUILD                          # generated Bazel build file for this package
            include/                       # headers
            arch                           # target-independent prebuilts
                x64/
                    lib/
                        libfoo.so          # ABI only, to link against
                    dist/
                        libfoo.so          # to include in Fuchsia packages
                    debug/
                        libfoo.so          # unstripped version
                arm64/
                    lib/
                    dist/
                    debug/
            BUILD
        bar/
            include/
            src/                           # sources for a C++ library
            BUILD
    arch/
        x64/
            sysroot/                       # x64 sysroot (libc, libzircon, and friends)
        arm64/
            sysroot/                       # arm64 sysroot
In order to generate a Bazel workspace, point the generate.py script to an SDK archive, e.g.:
$ scripts/sdk/bazel/generate.py \
    --archive my_sdk_archive.tar.gz \
    --output my_workspace/
The generate.py script optionally creates a workspace for testing the generated SDK:
$ scripts/sdk/bazel/generate.py \
    --archive my_sdk_archive.tar.gz \
    --output my_workspace/ \
    --tests my_test_workspace/
Tests are then run with:
$ my_test_workspace/run.py
It is recommended to use the version of Bazel available in the Fuchsia source tree at //prebuilt/sdk/bazel to run the tests:
$ my_test_workspace/run.py --bazel $FUCHSIA_DIR/prebuilt/sdk/bazel/bazel
To exclude a target from the suite, mark it as ignored with:
my_rule(
    name = "foobar",
    ...
    tags = [
        "ignored",
    ],
)
To force-build ignored targets, use the --ignored flag.
The test runner also builds targets in the SDK itself. To bypass this step, use the --no-sdk flag.
The produced Bazel SDK can be consumed by adding those lines to a Bazel WORKSPACE:
http_archive(
  name = "fuchsia_sdk",
  path = "<FUCHSIA_SDK_URL>",
)
load("@fuchsia_sdk//build_defs:fuchsia_setup.bzl", "fuchsia_setup")
fuchsia_setup(with_toolchain = True)
This adds the Fuchsia SDK to the workspace and sets up the necessary toolchains for cross compilation.
To reference the toolchains, add this to the .bazelrc file:
build:fuchsia --crosstool_top=@fuchsia_crosstool//:toolchain build:fuchsia --cpu=x86_64 build:fuchsia --host_crosstool_top=@bazel_tools//tools/cpp:toolchain
Targets can then be built for Fuchsia with:
$ bazel build --config=fuchsia //...
To build Dart & Flutter packages using the Bazel SDK, add those lines to the Bazel WORKSPACE:
http_archive(
  name = "fuchsia_sdk",
  path = "<FUCHSIA_SDK_URL>",
)
load("@fuchsia_sdk//build_defs:fuchsia_setup.bzl", "fuchsia_setup")
fuchsia_setup(with_toolchain = False)
http_archive(
  name = "io_bazel_rules_dart",
  url = "https://github.com/dart-lang/rules_dart/archive/master.zip",
  strip_prefix = "rules_dart-master",
)
load("@io_bazel_rules_dart//dart/build_rules:repositories.bzl", "dart_repositories")
dart_repositories()
load("@fuchsia_sdk//build_defs:setup_dart.bzl", "setup_dart")
setup_dart()
load("@fuchsia_sdk//build_defs:setup_flutter.bzl", "setup_flutter")
setup_flutter()