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

Commit ee7d0fd0 authored by Colin Cross's avatar Colin Cross Committed by Gerrit Code Review
Browse files

Merge "Split vndk_libraries_txt into multiple module types"

parents 77dcb9d7 e4e44bc6
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -250,7 +250,7 @@ func testApexContext(_ *testing.T, bp string, handlers ...testCustomizer) (*andr

	ctx.RegisterModuleType("cc_test", cc.TestFactory)
	ctx.RegisterModuleType("vndk_prebuilt_shared", cc.VndkPrebuiltSharedFactory)
	ctx.RegisterModuleType("vndk_libraries_txt", cc.VndkLibrariesTxtFactory)
	cc.RegisterVndkLibraryTxtTypes(ctx)
	prebuilt_etc.RegisterPrebuiltEtcBuildComponents(ctx)
	ctx.RegisterModuleType("platform_compat_config", java.PlatformCompatConfigFactory)
	ctx.RegisterModuleType("sh_binary", sh.ShBinaryFactory)
@@ -3219,7 +3219,7 @@ func vndkLibrariesTxtFiles(vers ...string) (result string) {
		if v == "current" {
			for _, txt := range []string{"llndk", "vndkcore", "vndksp", "vndkprivate", "vndkproduct"} {
				result += `
					vndk_libraries_txt {
					` + txt + `_libraries_txt {
						name: "` + txt + `.libraries.txt",
					}
				`
+12 −9
Original line number Diff line number Diff line
@@ -418,23 +418,24 @@ func TestVndk(t *testing.T) {
			},
		}

		vndk_libraries_txt {
		llndk_libraries_txt {
			name: "llndk.libraries.txt",
		}
		vndk_libraries_txt {
		vndkcore_libraries_txt {
			name: "vndkcore.libraries.txt",
		}
		vndk_libraries_txt {
		vndksp_libraries_txt {
			name: "vndksp.libraries.txt",
		}
		vndk_libraries_txt {
		vndkprivate_libraries_txt {
			name: "vndkprivate.libraries.txt",
		}
		vndk_libraries_txt {
		vndkproduct_libraries_txt {
			name: "vndkproduct.libraries.txt",
		}
		vndk_libraries_txt {
		vndkcorevariant_libraries_txt {
			name: "vndkcorevariant.libraries.txt",
			insert_vndk_version: false,
		}
	`

@@ -546,7 +547,7 @@ func TestVndkWithHostSupported(t *testing.T) {
			}
		}

		vndk_libraries_txt {
		vndkcore_libraries_txt {
			name: "vndkcore.libraries.txt",
		}
	`)
@@ -556,8 +557,9 @@ func TestVndkWithHostSupported(t *testing.T) {

func TestVndkLibrariesTxtAndroidMk(t *testing.T) {
	bp := `
		vndk_libraries_txt {
		llndk_libraries_txt {
			name: "llndk.libraries.txt",
			insert_vndk_version: true,
		}`
	config := TestConfig(buildDir, android.Android, nil, bp, nil)
	config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
@@ -603,8 +605,9 @@ func TestVndkUsingCoreVariant(t *testing.T) {
			nocrt: true,
		}

		vndk_libraries_txt {
		vndkcorevariant_libraries_txt {
			name: "vndkcorevariant.libraries.txt",
			insert_vndk_version: false,
		}
	`

+1 −1
Original line number Diff line number Diff line
@@ -568,10 +568,10 @@ func CreateTestContext(config android.Config) *android.TestContext {
	ctx.RegisterModuleType("vendor_public_library", vendorPublicLibraryFactory)
	ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
	ctx.RegisterModuleType("vndk_prebuilt_shared", VndkPrebuiltSharedFactory)
	ctx.RegisterModuleType("vndk_libraries_txt", VndkLibrariesTxtFactory)
	ctx.RegisterModuleType("vendor_snapshot_shared", VendorSnapshotSharedFactory)
	ctx.RegisterModuleType("vendor_snapshot_static", VendorSnapshotStaticFactory)
	ctx.RegisterModuleType("vendor_snapshot_binary", VendorSnapshotBinaryFactory)
	RegisterVndkLibraryTxtTypes(ctx)
	ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
	android.RegisterPrebuiltMutators(ctx)
	RegisterRequiredBuildComponentsForTest(ctx)
+40 −26
Original line number Diff line number Diff line
@@ -449,15 +449,32 @@ func VndkMutator(mctx android.BottomUpMutatorContext) {
}

func init() {
	android.RegisterModuleType("vndk_libraries_txt", VndkLibrariesTxtFactory)
	RegisterVndkLibraryTxtTypes(android.InitRegistrationContext)
	android.RegisterSingletonType("vndk-snapshot", VndkSnapshotSingleton)
}

func RegisterVndkLibraryTxtTypes(ctx android.RegistrationContext) {
	ctx.RegisterModuleType("llndk_libraries_txt", VndkLibrariesTxtFactory(libclangRTRemover(llndkLibraries)))
	ctx.RegisterModuleType("vndksp_libraries_txt", VndkLibrariesTxtFactory(vndkSpLibraries))
	ctx.RegisterModuleType("vndkcore_libraries_txt", VndkLibrariesTxtFactory(vndkCoreLibraries))
	ctx.RegisterModuleType("vndkprivate_libraries_txt", VndkLibrariesTxtFactory(vndkPrivateLibraries))
	ctx.RegisterModuleType("vndkproduct_libraries_txt", VndkLibrariesTxtFactory(vndkProductLibraries))
	ctx.RegisterModuleType("vndkcorevariant_libraries_txt", VndkLibrariesTxtFactory(vndkUsingCoreVariantLibraries))
}

type vndkLibrariesTxt struct {
	android.ModuleBase

	lister     func(android.Config) map[string]string
	properties VndkLibrariesTxtProperties

	outputFile android.OutputPath
}

type VndkLibrariesTxtProperties struct {
	Insert_vndk_version *bool
}

var _ etc.PrebuiltEtcModule = &vndkLibrariesTxt{}
var _ android.OutputFileProducer = &vndkLibrariesTxt{}

@@ -471,11 +488,16 @@ var _ android.OutputFileProducer = &vndkLibrariesTxt{}
// A module behaves like a prebuilt_etc but its content is generated by soong.
// By being a soong module, these files can be referenced by other soong modules.
// For example, apex_vndk can depend on these files as prebuilt.
func VndkLibrariesTxtFactory() android.Module {
	m := &vndkLibrariesTxt{}
func VndkLibrariesTxtFactory(lister func(android.Config) map[string]string) android.ModuleFactory {
	return func() android.Module {
		m := &vndkLibrariesTxt{
			lister: lister,
		}
		m.AddProperties(&m.properties)
		android.InitAndroidModule(m)
		return m
	}
}

func insertVndkVersion(filename string, vndkVersion string) string {
	if index := strings.LastIndex(filename, "."); index != -1 {
@@ -484,33 +506,25 @@ func insertVndkVersion(filename string, vndkVersion string) string {
	return filename
}

func (txt *vndkLibrariesTxt) GenerateAndroidBuildActions(ctx android.ModuleContext) {
	var list []string
	switch txt.Name() {
	case llndkLibrariesTxt:
		for _, filename := range android.SortedStringMapValues(llndkLibraries(ctx.Config())) {
			if strings.HasPrefix(filename, "libclang_rt.hwasan-") {
func libclangRTRemover(lister func(android.Config) map[string]string) func(android.Config) map[string]string {
	return func(config android.Config) map[string]string {
		libs := lister(config)
		filteredLibs := make(map[string]string, len(libs))
		for lib, v := range libs {
			if strings.HasPrefix(lib, "libclang_rt.hwasan-") {
				continue
			}
			list = append(list, filename)
		}
	case vndkCoreLibrariesTxt:
		list = android.SortedStringMapValues(vndkCoreLibraries(ctx.Config()))
	case vndkSpLibrariesTxt:
		list = android.SortedStringMapValues(vndkSpLibraries(ctx.Config()))
	case vndkPrivateLibrariesTxt:
		list = android.SortedStringMapValues(vndkPrivateLibraries(ctx.Config()))
	case vndkProductLibrariesTxt:
		list = android.SortedStringMapValues(vndkProductLibraries(ctx.Config()))
	case vndkUsingCoreVariantLibrariesTxt:
		list = android.SortedStringMapValues(vndkUsingCoreVariantLibraries(ctx.Config()))
	default:
		ctx.ModuleErrorf("name(%s) is unknown.", txt.Name())
		return
			filteredLibs[lib] = v
		}
		return filteredLibs
	}
}

func (txt *vndkLibrariesTxt) GenerateAndroidBuildActions(ctx android.ModuleContext) {
	list := android.SortedStringMapValues(txt.lister(ctx.Config()))

	var filename string
	if txt.Name() != vndkUsingCoreVariantLibrariesTxt {
	if BoolDefault(txt.properties.Insert_vndk_version, true) {
		filename = insertVndkVersion(txt.Name(), ctx.DeviceConfig().PlatformVndkVersion())
	} else {
		filename = txt.Name()