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

Commit 789093a9 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Direct Bazel builds from m."

parents 348f20be c63677b3
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ import (
	"path/filepath"
	"regexp"
	"sort"
	"strings"
)

// BazelTargetModuleProperties contain properties and metadata used for
@@ -33,6 +34,10 @@ type BazelTargetModuleProperties struct {

const BazelTargetModuleNamePrefix = "__bp2build__"

func StripNamePrefix(moduleName string) string {
	return strings.TrimPrefix(moduleName, BazelTargetModuleNamePrefix)
}

var productVariableSubstitutionPattern = regexp.MustCompile("%(d|s)")

// Label is used to represent a Bazel compatible Label. Also stores the original
+1 −0
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ bootstrap_go_package {
        "build_conversion.go",
        "bzl_conversion.go",
        "configurability.go",
        "compatibility.go",
        "constants.go",
        "conversion.go",
        "metrics.go",
+2 −2
Original line number Diff line number Diff line
@@ -29,12 +29,12 @@ func Codegen(ctx *CodegenContext) CodegenMetrics {
	bp2buildDir := android.PathForOutput(ctx, "bp2build")
	android.RemoveAllOutputDir(bp2buildDir)

	buildToTargets, metrics := GenerateBazelTargets(ctx, true)
	buildToTargets, metrics, compatLayer := GenerateBazelTargets(ctx, true)
	bp2buildFiles := CreateBazelFiles(nil, buildToTargets, ctx.mode)
	writeFiles(ctx, bp2buildDir, bp2buildFiles)

	soongInjectionDir := android.PathForOutput(ctx, bazel.SoongInjectionDirName)
	writeFiles(ctx, soongInjectionDir, CreateSoongInjectionFiles())
	writeFiles(ctx, soongInjectionDir, CreateSoongInjectionFiles(compatLayer))

	return metrics
}
+20 −2
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ type BazelAttributes struct {

type BazelTarget struct {
	name            string
	packageName     string
	content         string
	ruleClass       string
	bzlLoadLocation string
@@ -44,6 +45,16 @@ func (t BazelTarget) IsLoadedFromStarlark() bool {
	return t.bzlLoadLocation != ""
}

// Label is the fully qualified Bazel label constructed from the BazelTarget's
// package name and target name.
func (t BazelTarget) Label() string {
	if t.packageName == "." {
		return "//:" + t.name
	} else {
		return "//" + t.packageName + ":" + t.name
	}
}

// BazelTargets is a typedef for a slice of BazelTarget objects.
type BazelTargets []BazelTarget

@@ -213,7 +224,7 @@ func propsToAttributes(props map[string]string) string {
	return attributes
}

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

@@ -222,6 +233,10 @@ func GenerateBazelTargets(ctx *CodegenContext, generateFilegroups bool) (map[str
		RuleClassCount: make(map[string]int),
	}

	compatLayer := CodegenCompatLayer{
		NameToLabelMap: make(map[string]string),
	}

	dirs := make(map[string]bool)

	bpCtx := ctx.Context()
@@ -236,6 +251,7 @@ func GenerateBazelTargets(ctx *CodegenContext, generateFilegroups bool) (map[str
			if b, ok := m.(android.Bazelable); ok && b.HasHandcraftedLabel() {
				metrics.handCraftedTargetCount += 1
				metrics.TotalModuleCount += 1
				compatLayer.AddNameToLabelEntry(m.Name(), b.HandcraftedLabel())
				pathToBuildFile := getBazelPackagePath(b)
				// We are using the entire contents of handcrafted build file, so if multiple targets within
				// a package have handcrafted targets, we only want to include the contents one time.
@@ -253,6 +269,7 @@ func GenerateBazelTargets(ctx *CodegenContext, generateFilegroups bool) (map[str
			} else if btm, ok := m.(android.BazelTargetModule); ok {
				t = generateBazelTarget(bpCtx, m, btm)
				metrics.RuleClassCount[t.ruleClass] += 1
				compatLayer.AddNameToLabelEntry(m.Name(), t.Label())
			} else {
				metrics.TotalModuleCount += 1
				return
@@ -283,7 +300,7 @@ func GenerateBazelTargets(ctx *CodegenContext, generateFilegroups bool) (map[str
		}
	}

	return buildFileToTargets, metrics
	return buildFileToTargets, metrics, compatLayer
}

func getBazelPackagePath(b android.Bazelable) string {
@@ -324,6 +341,7 @@ func generateBazelTarget(ctx bpToBuildContext, m blueprint.Module, btm android.B
	targetName := targetNameForBp2Build(ctx, m)
	return BazelTarget{
		name:            targetName,
		packageName:     ctx.ModuleDir(m),
		ruleClass:       ruleClass,
		bzlLoadLocation: bzlLoadLocation,
		content: fmt.Sprintf(
+37 −31
Original line number Diff line number Diff line
@@ -1414,25 +1414,31 @@ filegroup {
			},
		},
		{
			description:                        "filegroup bazel_module.label and bp2build",
			description:                        "filegroup bazel_module.label and bp2build in subdir",
			moduleTypeUnderTest:                "filegroup",
			moduleTypeUnderTestFactory:         android.FileGroupFactory,
			moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
			bp: `filegroup {
			dir:                                "other",
			bp:                                 ``,
			fs: map[string]string{
				"other/Android.bp": `filegroup {
				name: "fg_foo",
				bazel_module: {
      label: "//other:fg_foo",
					bp2build_available: true,
				},
			}
			filegroup {
				name: "fg_bar",
				bazel_module: {
					label: "//other:fg_bar"
				},
			}`,
				"other/BUILD.bazel": `// definition for fg_bar`,
			},
			expectedBazelTargets: []string{
				`filegroup(
    name = "fg_foo",
)`,
				`// BUILD file`,
			},
			fs: map[string]string{
				"other/BUILD.bazel": `// BUILD file`,
)`, `// definition for fg_bar`,
			},
		},
		{
Loading