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/.
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
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" ]
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" ]
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
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
NEXT-x64 sub-buildThe 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
To use GN commands, you must always specify the following:
--root-pattern=//:build_onlyargs.gn in the sub-build output directory specifies build_only_labels = ["//sdk:fuchsia_collection_for_subbuilds"].$(fx get-build-dir)/idk_subbuild.fuchsia_collection_for_subbuilds-apiNEXT-x64/.NEXT-x64 sub-buildYou 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