Create a AOSP Bazel overlay workspace with Soong
The Bazel overlay is a directory at out/soong/bazel_overlay that replicates the layout of the AOSP Soong module tree, but as a Bazel workspace. Each Soong module variant is represented as a BUILD target created with the `soong_module` rule. To create this overlay, run `m bazel_overlay`. A `soong_module` target can depend on other `soong_module` targets. These dependencies replicate each module's `directDeps` in the Blueprint graph, just before `PrepareBuildActions`. This enables users to use bazel query as a way to introspect the Soong module graph. For example, - Direct reverse dependencies of //bionic/libc:generated_android_ids in //bionic/libc/...: $ bazel query 'rdeps(//bionic/libc/..., //bionic/libc:generated_android_ids, 1)' //bionic/libc:libc_bionic_ndk--android_recovery_arm_armv7-a-neon_static //bionic/libc:libc_bionic_ndk--android_ramdisk_arm_armv7-a-neon_static //bionic/libc:libc_bionic_ndk--android_arm_armv7-a-neon_static_com.android.runtime //bionic/libc:libc_bionic_ndk--android_arm_armv7-a-neon_static //bionic/libc:generated_android_ids - Why does com.android.runtime depend on lzma? $ bazel query 'somepath(//bionic/apex:com.android.runtime--android_common_com.android.runtime_image, //external/lzma/...)' //bionic/apex:com.android.runtime--android_common_com.android.runtime_image //bionic/libc/malloc_debug:libc_malloc_debug--android_arm_armv7-a-neon_shared_com.android.runtime //system/core/libunwindstack:libunwindstack--android_arm_armv7-a-neon_shared_com.android.runtime //external/lzma/C:liblzma--android_arm_armv7-a-neon_shared_com.android.runtime - What does the dep graph of //bionic/libc:crtbegin_so look like? $ bazel query 'deps(//bionic/libc:crtbegin_so--android_arm_armv7-a-neon)' --output=graph > graph.in && dot -Tpng < graph.in > graph.png https://photos.app.goo.gl/DfsdoFRNsRjGwTmy8 Test: croot && m bazel_overlay && cd out/soong/bazel_overlay && bazel query //... && bazel query 'rdeps(//bionic/libc/..., //bionic/libc:generated_android_ids, 1)' Signed-off-by: Jingwen Chen <jingwen@google.com> Change-Id: I3bf40309bfb2d963bb8a688706385a57ee304c37#
This commit is contained in:
@@ -26,11 +26,13 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
docFile string
|
||||
docFile string
|
||||
bazelOverlayDir string
|
||||
)
|
||||
|
||||
func init() {
|
||||
flag.StringVar(&docFile, "soong_docs", "", "build documentation file to output")
|
||||
flag.StringVar(&bazelOverlayDir, "bazel_overlay_dir", "", "path to the bazel overlay directory")
|
||||
}
|
||||
|
||||
func newNameResolver(config android.Config) *android.NameResolver {
|
||||
@@ -65,7 +67,7 @@ func main() {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if docFile != "" {
|
||||
if !shouldPrepareBuildActions() {
|
||||
configuration.SetStopBefore(bootstrap.StopBeforePrepareBuildActions)
|
||||
}
|
||||
|
||||
@@ -85,6 +87,13 @@ func main() {
|
||||
|
||||
bootstrap.Main(ctx.Context, configuration, extraNinjaDeps...)
|
||||
|
||||
if bazelOverlayDir != "" {
|
||||
if err := createBazelOverlay(ctx, bazelOverlayDir); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "%s", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
if docFile != "" {
|
||||
if err := writeDocs(ctx, docFile); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "%s", err)
|
||||
@@ -94,7 +103,7 @@ func main() {
|
||||
|
||||
// TODO(ccross): make this a command line argument. Requires plumbing through blueprint
|
||||
// to affect the command line of the primary builder.
|
||||
if docFile == "" {
|
||||
if shouldPrepareBuildActions() {
|
||||
metricsFile := filepath.Join(bootstrap.BuildDir, "soong_build_metrics.pb")
|
||||
err = android.WriteMetrics(configuration, metricsFile)
|
||||
if err != nil {
|
||||
@@ -103,3 +112,9 @@ func main() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func shouldPrepareBuildActions() bool {
|
||||
// If we're writing soong_docs or bazel_overlay, don't write build.ninja or
|
||||
// collect metrics.
|
||||
return docFile == "" && bazelOverlayDir == ""
|
||||
}
|
||||
|
Reference in New Issue
Block a user