Working with IDK Sub-builds

Sub-build output directory

The output directory for a sub-build is a subdirectory under the main build output directory. For example, out/default/idk_subbuild.fuchsia_collection_for_subbuilds-apiNEXT-x64/.

Building all sub-builds

All sub-builds are built as part of the IDK build:

fx build //sdk:final_fuchsia_idk

The following is faster because it avoids the archive generation step:

fx build //sdk:final_fuchsia_idk.validation

Building a subset of sub-builds

Sub-builds for a subset of target CPU architectures

The build time for this can be cut by about two thirds by adding the following to your fx args (when the target CPU architectures is x64):

idk_buildable_cpus = [ "x64" ]

Sub-builds for a subset of API levels

Similarly, you may wish to build a set of API levels for coverage without having to build every API level. In such cases, you can add something like the following to your fx args:

idk_buildable_api_levels = [ 16, 22, "NEXT" ]

Building a specific sub-build

Setup

Before working with sub-builds directly, you must have generated the sub-build directories by generating build files via the main build. The quickest way to do this is to build the sub-build once as follows:

fx build //sdk:fuchsia_collection_subbuilds-api${level}-${arch}

For example:

fx build //sdk:fuchsia_collection_subbuilds-apiNEXT-x64

Building

You can directly build a sub-build with the following command. This can be useful when debugging a build failure at a specific API level.

fx build -- -C $(fx get-build-dir)/idk_subbuild.fuchsia_collection_for_subbuilds-api${level}-${arch}

You can also build specific Ninja targets as in the following example for fdio:

fx build -- -C $(fx get-build-dir)/idk_subbuild.fuchsia_collection_for_subbuilds-api${level}-${arch} sdk/lib/fdio

Building specific Ninja targets in another toolchain requires identifying the correct path, as in the following example for the FIDL library fuchsia.images2:

fx build -- -C $(fx get-build-dir)/idk_subbuild.fuchsia_collection_for_subbuilds-api${level}-${arch} fidling/phony/sdk/fidl/fuchsia.images2/fuchsia.images2

Example: Building the NEXT-x64 sub-build

The following are specific examples of the above commands for the x64 at NEXT sub-build.

Build the entire NEXT sub-build as follows:

fx build -- -C $(fx get-build-dir)/idk_subbuild.fuchsia_collection_for_subbuilds-apiNEXT-x64

Build specific Ninja targets, such as fdio:

fx build -- -C $(fx get-build-dir)/idk_subbuild.fuchsia_collection_for_subbuilds-apiNEXT-x64 sdk/lib/fdio

Building specific Ninja targets in another toolchain, such the FIDL library fuchsia.images2:

fx build -- -C $(fx get-build-dir)/idk_subbuild.fuchsia_collection_for_subbuilds-apiNEXT-x64 fidling/phony/sdk/fidl/fuchsia.images2/fuchsia.images2

Using GN

To use GN commands, you must always specify the following:

  • --root-pattern=//:build_only
    • Explanation: The args.gn in the sub-build output directory specifies build_only_labels = ["//sdk:fuchsia_collection_for_subbuilds"].
  • The sub-build output directory in which to perform the GN commands.
    • For example, $(fx get-build-dir)/idk_subbuild.fuchsia_collection_for_subbuilds-apiNEXT-x64/.

Example: Using GN on the NEXT-x64 sub-build

You can regenerate GN targets:

fx gn --root-pattern=//:build_only gen $(fx get-build-dir)/idk_subbuild.fuchsia_collection_for_subbuilds-apiNEXT-x64/

You can also perform GN analysis on the sub-build, such as to find all paths from the sub-build root (//sdk:fuchsia_collection_for_subbuilds) to fdio:

fx gn --root-pattern=//:build_only path --with-data --all $(fx get-build-dir)/idk_subbuild.fuchsia_collection_for_subbuilds-apiNEXT-x64/ //sdk:fuchsia_collection_for_subbuilds //sdk/lib/fdio

Or to find reverse dependencies:

fx gn --root-pattern=//:build_only refs $(fx get-build-dir)/idk_subbuild.fuchsia_collection_for_subbuilds-apiNEXT-x64 $(fx get-build-dir)/idk_subbuild.fuchsia_collection_for_subbuilds-apiNEXT-x64/gen/sdk/lib/fdio/fdio.verify_public_headers.stamp

To clean just the sub-build, run:

fx gn clean $(fx get-build-dir)/idk_subbuild.fuchsia_collection_for_subbuilds-apiNEXT-x64