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

Commit 30449871 authored by Alix Espino's avatar Alix Espino Committed by Gerrit Code Review
Browse files

Merge "bp2build for java_library with .kt srcs or common_srcs"

parents bd122393 8062f4de
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -650,6 +650,10 @@ var (
		"libcodec2_soft_avcenc",
		"libcodec2_soft_aacdec",
		"libcodec2_soft_common",

		// kotlin srcs in java libs
		"CtsPkgInstallerConstants",
		"kotlinx_atomicfu",
	}

	Bp2buildModuleTypeAlwaysConvertList = []string{
+43 −0
Original line number Diff line number Diff line
@@ -649,3 +649,46 @@ android_library {
				}),
		}})
}

func TestJavaLibraryKotlinSrcs(t *testing.T) {
	runJavaLibraryTestCase(t, Bp2buildTestCase{
		Description: "java_library with kotlin  srcs",
		Blueprint: `java_library {
    name: "java-lib-1",
    srcs: ["a.java", "b.java", "c.kt"],
    bazel_module: { bp2build_available: true },
}
`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
				"srcs": `[
        "a.java",
        "b.java",
        "c.kt",
    ]`,
			}),
		},
	})
}

func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
	runJavaLibraryTestCase(t, Bp2buildTestCase{
		Description: "java_library with kotlin  common_srcs",
		Blueprint: `java_library {
    name: "java-lib-1",
    srcs: ["a.java", "b.java"],
    common_srcs: ["c.kt"],
    bazel_module: { bp2build_available: true },
}
`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("kt_jvm_library", "java-lib-1", AttrNameToString{
				"srcs": `[
        "a.java",
        "b.java",
    ]`,
				"common_srcs": `["c.kt"]`,
			}),
		},
	})
}
+2 −1
Original line number Diff line number Diff line
@@ -1046,7 +1046,8 @@ func (a *AARImport) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
}

func (a *AndroidLibrary) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
	commonAttrs, depLabels := a.convertLibraryAttrsBp2Build(ctx)
	commonAttrs, bp2buildInfo := a.convertLibraryAttrsBp2Build(ctx)
	depLabels := bp2buildInfo.DepLabels

	deps := depLabels.Deps
	if !commonAttrs.Srcs.IsEmpty() {
+2 −1
Original line number Diff line number Diff line
@@ -1492,7 +1492,8 @@ type bazelAndroidAppAttributes struct {

// ConvertWithBp2build is used to convert android_app to Bazel.
func (a *AndroidApp) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
	commonAttrs, depLabels := a.convertLibraryAttrsBp2Build(ctx)
	commonAttrs, bp2BuildInfo := a.convertLibraryAttrsBp2Build(ctx)
	depLabels := bp2BuildInfo.DepLabels

	deps := depLabels.Deps
	deps.Append(depLabels.StaticDeps)
+46 −14
Original line number Diff line number Diff line
@@ -2335,11 +2335,21 @@ type javaAidlLibraryAttributes struct {
	Deps bazel.LabelListAttribute
}

// convertLibraryAttrsBp2Build converts a few shared attributes from java_* modules
// and also separates dependencies into dynamic dependencies and static dependencies.
// Each corresponding Bazel target type, can have a different method for handling
// dynamic vs. static dependencies, and so these are returned to the calling function.
func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) (*javaCommonAttributes, *javaDependencyLabels) {
// bp2BuildJavaInfo has information needed for the conversion of  java*_modules
// that is needed bor Bp2Build conversion but that requires different handling
// depending on the module type.
type bp2BuildJavaInfo struct {
	// separates dependencies into dynamic dependencies and static dependencies.
	DepLabels     *javaDependencyLabels
	hasKotlinSrcs bool
}

// convertLibraryAttrsBp2Build returns a javaCommonAttributes struct with
// converted attributes shared across java_* modules and a bp2BuildJavaInfo struct
// which has other non-attribute information needed for bp2build conversion
// that needs different handling depending on the module types, and thus needs
// to be returned to the calling function.
func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) (*javaCommonAttributes, *bp2BuildJavaInfo) {
	var srcs bazel.LabelListAttribute
	var deps bazel.LabelList
	var staticDeps bazel.LabelList
@@ -2358,14 +2368,18 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext)
	protoSrcPartition := "proto"
	logtagSrcPartition := "logtag"
	aidlSrcPartition := "aidl"
	kotlinPartition := "kotlin"
	srcPartitions := bazel.PartitionLabelListAttribute(ctx, &srcs, bazel.LabelPartitions{
		javaSrcPartition:   bazel.LabelPartition{Extensions: []string{".java"}, Keep_remainder: true},
		logtagSrcPartition: bazel.LabelPartition{Extensions: []string{".logtags", ".logtag"}},
		protoSrcPartition:  android.ProtoSrcLabelPartition,
		aidlSrcPartition:   android.AidlSrcLabelPartition,
		kotlinPartition:    bazel.LabelPartition{Extensions: []string{".kt"}},
	})

	javaSrcs := srcPartitions[javaSrcPartition]
	kotlinSrcs := srcPartitions[kotlinPartition]
	javaSrcs.Append(kotlinSrcs)

	if !srcPartitions[logtagSrcPartition].IsEmpty() {
		logtagsLibName := m.Name() + "_logtags"
@@ -2475,7 +2489,12 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext)
	depLabels.Deps = bazel.MakeLabelListAttribute(deps)
	depLabels.StaticDeps = bazel.MakeLabelListAttribute(staticDeps)

	return commonAttrs, depLabels
	bp2BuildInfo := &bp2BuildJavaInfo{
		DepLabels:     depLabels,
		hasKotlinSrcs: !kotlinSrcs.IsEmpty(),
	}

	return commonAttrs, bp2BuildInfo
}

type javaLibraryAttributes struct {
@@ -2483,10 +2502,12 @@ type javaLibraryAttributes struct {
	Deps        bazel.LabelListAttribute
	Exports     bazel.LabelListAttribute
	Neverlink   bazel.BoolAttribute
	Common_srcs bazel.LabelListAttribute
}

func javaLibraryBp2Build(ctx android.TopDownMutatorContext, m *Library) {
	commonAttrs, depLabels := m.convertLibraryAttrsBp2Build(ctx)
	commonAttrs, bp2BuildInfo := m.convertLibraryAttrsBp2Build(ctx)
	depLabels := bp2BuildInfo.DepLabels

	deps := depLabels.Deps
	if !commonAttrs.Srcs.IsEmpty() {
@@ -2501,16 +2522,26 @@ func javaLibraryBp2Build(ctx android.TopDownMutatorContext, m *Library) {
		ctx.ModuleErrorf("Module has direct dependencies but no sources. Bazel will not allow this.")
	}

	var props bazel.BazelTargetModuleProperties
	attrs := &javaLibraryAttributes{
		javaCommonAttributes: commonAttrs,
		Deps:                 deps,
		Exports:              depLabels.StaticDeps,
	}

	props := bazel.BazelTargetModuleProperties{
	if !bp2BuildInfo.hasKotlinSrcs && len(m.properties.Common_srcs) == 0 {
		props = bazel.BazelTargetModuleProperties{
			Rule_class:        "java_library",
			Bzl_load_location: "//build/bazel/rules/java:library.bzl",
		}
	} else {
		attrs.Common_srcs = bazel.MakeLabelListAttribute(android.BazelLabelForModuleSrc(ctx, m.properties.Common_srcs))

		props = bazel.BazelTargetModuleProperties{
			Rule_class:        "kt_jvm_library",
			Bzl_load_location: "@rules_kotlin//kotlin:jvm_library.bzl",
		}
	}

	name := m.Name()
	ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: name}, attrs)
@@ -2526,7 +2557,8 @@ type javaBinaryHostAttributes struct {

// JavaBinaryHostBp2Build is for java_binary_host bp2build.
func javaBinaryHostBp2Build(ctx android.TopDownMutatorContext, m *Binary) {
	commonAttrs, depLabels := m.convertLibraryAttrsBp2Build(ctx)
	commonAttrs, bp2BuildInfo := m.convertLibraryAttrsBp2Build(ctx)
	depLabels := bp2BuildInfo.DepLabels

	deps := depLabels.Deps
	deps.Append(depLabels.StaticDeps)
Loading