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

Commit 4949557d authored by Rupert Shuttleworth's avatar Rupert Shuttleworth Committed by Gerrit Code Review
Browse files

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

parents 6ac29555 2a4fc3ec
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