Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2a4fc3ec authored by Rupert Shuttleworth's avatar Rupert Shuttleworth
Browse files

Generate BUILD files for every directory that has an Android.bp file.

Test: Added an integration test
Test: bazel build --package_path=out/soong/workspace //bionic/...

Change-Id: Ie34bd23ab3c5428e6c9c9919e5fb6fcb4e709adc
parent b21166e2
Loading
Loading
Loading
Loading
+51 −2
Original line number Diff line number Diff line
@@ -126,6 +126,42 @@ const (
)

var (
	// Do not write BUILD files for these directories
	// NOTE: this is not recursive
	bp2buildDoNotWriteBuildFileList = []string{
		// Don't generate these BUILD files - because external BUILD files already exist
		"external/boringssl",
		"external/brotli",
		"external/dagger2",
		"external/flatbuffers",
		"external/gflags",
		"external/google-fruit",
		"external/grpc-grpc",
		"external/grpc-grpc/test/core/util",
		"external/grpc-grpc/test/cpp/common",
		"external/grpc-grpc/third_party/address_sorting",
		"external/nanopb-c",
		"external/nos/host/generic",
		"external/nos/host/generic/libnos",
		"external/nos/host/generic/libnos/generator",
		"external/nos/host/generic/libnos_datagram",
		"external/nos/host/generic/libnos_transport",
		"external/nos/host/generic/nugget/proto",
		"external/perfetto",
		"external/protobuf",
		"external/rust/cxx",
		"external/rust/cxx/demo",
		"external/ruy",
		"external/tensorflow",
		"external/tensorflow/tensorflow/lite",
		"external/tensorflow/tensorflow/lite/java",
		"external/tensorflow/tensorflow/lite/kernels",
		"external/tflite-support",
		"external/tinyalsa_new",
		"external/wycheproof",
		"external/libyuv",
	}

	// Configure modules in these directories to enable bp2build_available: true or false by default.
	bp2buildDefaultConfig = Bp2BuildConfig{
		"bionic":                Bp2BuildDefaultTrueRecursively,
@@ -190,11 +226,16 @@ var (
	}

	// Used for quicker lookups
	bp2buildDoNotWriteBuildFile = map[string]bool{}
	bp2buildModuleDoNotConvert  = map[string]bool{}
	mixedBuildsDisabled         = map[string]bool{}
)

func init() {
	for _, moduleName := range bp2buildDoNotWriteBuildFileList {
		bp2buildDoNotWriteBuildFile[moduleName] = true
	}

	for _, moduleName := range bp2buildModuleDoNotConvertList {
		bp2buildModuleDoNotConvert[moduleName] = true
	}
@@ -204,6 +245,14 @@ func init() {
	}
}

func ShouldWriteBuildFileForDir(dir string) bool {
	if _, ok := bp2buildDoNotWriteBuildFile[dir]; ok {
		return false
	} else {
		return true
	}
}

// MixedBuildsEnabled checks that a module is ready to be replaced by a
// converted or handcrafted Bazel target.
func (b *BazelModuleBase) MixedBuildsEnabled(ctx BazelConversionPathContext) bool {
+1 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ func Codegen(ctx *CodegenContext) CodegenMetrics {
	outputDir := android.PathForOutput(ctx, "bp2build")
	android.RemoveAllOutputDir(outputDir)

	buildToTargets, metrics := GenerateBazelTargets(ctx)
	buildToTargets, metrics := GenerateBazelTargets(ctx, true)

	filesToWrite := CreateBazelFiles(nil, buildToTargets, ctx.mode)

+16 −1
Original line number Diff line number Diff line
@@ -176,7 +176,7 @@ func propsToAttributes(props map[string]string) string {
	return attributes
}

func GenerateBazelTargets(ctx *CodegenContext) (map[string]BazelTargets, CodegenMetrics) {
func GenerateBazelTargets(ctx *CodegenContext, generateFilegroups bool) (map[string]BazelTargets, CodegenMetrics) {
	buildFileToTargets := make(map[string]BazelTargets)
	buildFileToAppend := make(map[string]bool)

@@ -185,9 +185,13 @@ func GenerateBazelTargets(ctx *CodegenContext) (map[string]BazelTargets, Codegen
		RuleClassCount: make(map[string]int),
	}

	dirs := make(map[string]bool)

	bpCtx := ctx.Context()
	bpCtx.VisitAllModules(func(m blueprint.Module) {
		dir := bpCtx.ModuleDir(m)
		dirs[dir] = true

		var t BazelTarget

		switch ctx.Mode() {
@@ -230,6 +234,17 @@ func GenerateBazelTargets(ctx *CodegenContext) (map[string]BazelTargets, Codegen

		buildFileToTargets[dir] = append(buildFileToTargets[dir], t)
	})
	if generateFilegroups {
		// Add a filegroup target that exposes all sources in the subtree of this package
		// NOTE: This also means we generate a BUILD file for every Android.bp file (as long as it has at least one module)
		for dir, _ := range dirs {
			buildFileToTargets[dir] = append(buildFileToTargets[dir], BazelTarget{
				name:      "bp2build_all_srcs",
				content:   `filegroup(name = "bp2build_all_srcs", srcs = glob(["**/*"]))`,
				ruleClass: "filegroup",
			})
		}
	}

	return buildFileToTargets, metrics
}
+5 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@ package bp2build

import (
	"android/soong/android"
	"fmt"
	"reflect"
	"sort"
	"strings"
@@ -48,6 +49,10 @@ func CreateBazelFiles(
func createBuildFiles(buildToTargets map[string]BazelTargets, mode CodegenMode) []BazelFile {
	files := make([]BazelFile, 0, len(buildToTargets))
	for _, dir := range android.SortedStringKeys(buildToTargets) {
		if !android.ShouldWriteBuildFileForDir(dir) {
			fmt.Printf("[bp2build] Not writing generated BUILD file for dir: '%s'\n", dir)
			continue
		}
		targets := buildToTargets[dir]
		sort.Slice(targets, func(i, j int) bool {
			// this will cover all bp2build generated targets
+2 −1
Original line number Diff line number Diff line
@@ -183,6 +183,7 @@ func customBp2BuildMutatorFromStarlark(ctx android.TopDownMutatorContext) {

// Helper method for tests to easily access the targets in a dir.
func generateBazelTargetsForDir(codegenCtx *CodegenContext, dir string) BazelTargets {
	buildFileToTargets, _ := GenerateBazelTargets(codegenCtx)
	// TODO: Set generateFilegroups to true and/or remove the generateFilegroups argument completely
	buildFileToTargets, _ := GenerateBazelTargets(codegenCtx, false)
	return buildFileToTargets[dir]
}
Loading