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

Commit 5df3b11f authored by Jooyung Han's avatar Jooyung Han Committed by Bernie Innocenti
Browse files

Revert "apex_vndk uses vendor variants only"

This reverts commit 559ad01d.

Reason for revert: broken builds

Change-Id: Ia8a09a2bdbdc8e76f2d4b9eb54e36ccc544e9397
Bug: b/148181875
parent 559ad01d
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -473,7 +473,6 @@ bootstrap_go_package {
    ],
    testSrcs: [
        "apex/apex_test.go",
        "apex/vndk_test.go",
    ],
    pluginFor: ["soong_build"],
}
+2 −2
Original line number Diff line number Diff line
@@ -333,7 +333,7 @@ func RegisterPostDepsMutators(ctx android.RegisterMutatorsContext) {
// Mark the direct and transitive dependencies of apex bundles so that they
// can be built for the apex bundles.
func apexDepsMutator(mctx android.BottomUpMutatorContext) {
	if a, ok := mctx.Module().(*apexBundle); ok && !a.vndkApex {
	if a, ok := mctx.Module().(*apexBundle); ok {
		apexBundleName := mctx.ModuleName()
		mctx.WalkDeps(func(child, parent android.Module) bool {
			depName := mctx.OtherModuleName(child)
@@ -361,7 +361,7 @@ func apexDepsMutator(mctx android.BottomUpMutatorContext) {
func apexMutator(mctx android.BottomUpMutatorContext) {
	if am, ok := mctx.Module().(android.ApexModule); ok && am.CanHaveApexVariants() {
		am.CreateApexVariations(mctx)
	} else if a, ok := mctx.Module().(*apexBundle); ok && !a.vndkApex {
	} else if _, ok := mctx.Module().(*apexBundle); ok {
		// apex bundle itself is mutated so that it and its modules have same
		// apex variant.
		apexBundleName := mctx.ModuleName()
+19 −24
Original line number Diff line number Diff line
@@ -291,9 +291,6 @@ func testApexContext(t *testing.T, bp string, handlers ...testCustomizer) (*andr
	ctx.RegisterModuleType("prebuilt_apex", PrebuiltFactory)
	ctx.RegisterModuleType("override_apex", overrideApexFactory)

	ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
	ctx.PostDepsMutators(android.RegisterOverridePostDepsMutators)

	cc.RegisterRequiredBuildComponentsForTest(ctx)
	ctx.RegisterModuleType("cc_test", cc.TestFactory)
	ctx.RegisterModuleType("vndk_prebuilt_shared", cc.VndkPrebuiltSharedFactory)
@@ -306,7 +303,9 @@ func testApexContext(t *testing.T, bp string, handlers ...testCustomizer) (*andr
	java.RegisterAppBuildComponents(ctx)
	ctx.RegisterModuleType("java_sdk_library", java.SdkLibraryFactory)

	ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
	ctx.PreDepsMutators(RegisterPreDepsMutators)
	ctx.PostDepsMutators(android.RegisterOverridePostDepsMutators)
	ctx.PostDepsMutators(RegisterPostDepsMutators)

	ctx.Register(config)
@@ -600,7 +599,7 @@ func TestDefaults(t *testing.T) {
			apex_available: [ "myapex" ],
		}
	`)
	ensureExactContents(t, ctx, "myapex", "android_common_myapex_image", []string{
	ensureExactContents(t, ctx, "myapex", []string{
		"etc/myetc",
		"javalib/myjar.jar",
		"lib64/mylib.so",
@@ -765,7 +764,7 @@ func TestApexWithStubs(t *testing.T) {
	// Ensure that genstub is invoked with --apex
	ensureContains(t, "--apex", ctx.ModuleForTests("mylib2", "android_arm64_armv8-a_static_3").Rule("genStubSrc").Args["flags"])

	ensureExactContents(t, ctx, "myapex", "android_common_myapex_image", []string{
	ensureExactContents(t, ctx, "myapex", []string{
		"lib64/mylib.so",
		"lib64/mylib3.so",
		"lib64/mylib4.so",
@@ -1604,13 +1603,12 @@ func TestHeaderLibsDependency(t *testing.T) {

type fileInApex struct {
	path   string // path in apex
	src    string // src path
	isLink bool
}

func getFiles(t *testing.T, ctx *android.TestContext, moduleName, variant string) []fileInApex {
func getFiles(t *testing.T, ctx *android.TestContext, moduleName string) []fileInApex {
	t.Helper()
	apexRule := ctx.ModuleForTests(moduleName, variant).Rule("apexRule")
	apexRule := ctx.ModuleForTests(moduleName, "android_common_"+moduleName+"_image").Rule("apexRule")
	copyCmds := apexRule.Args["copy_commands"]
	imageApexDir := "/image.apex/"
	var ret []fileInApex
@@ -1620,7 +1618,7 @@ func getFiles(t *testing.T, ctx *android.TestContext, moduleName, variant string
			continue
		}
		terms := strings.Split(cmd, " ")
		var dst, src string
		var dst string
		var isLink bool
		switch terms[0] {
		case "mkdir":
@@ -1629,7 +1627,6 @@ func getFiles(t *testing.T, ctx *android.TestContext, moduleName, variant string
				t.Fatal("copyCmds contains invalid cp command", cmd)
			}
			dst = terms[len(terms)-1]
			src = terms[len(terms)-2]
			isLink = false
		case "ln":
			if len(terms) != 3 && len(terms) != 4 {
@@ -1637,7 +1634,6 @@ func getFiles(t *testing.T, ctx *android.TestContext, moduleName, variant string
				t.Fatal("copyCmds contains invalid ln command", cmd)
			}
			dst = terms[len(terms)-1]
			src = terms[len(terms)-2]
			isLink = true
		default:
			t.Fatalf("copyCmds should contain mkdir/cp commands only: %q", cmd)
@@ -1648,18 +1644,17 @@ func getFiles(t *testing.T, ctx *android.TestContext, moduleName, variant string
				t.Fatal("copyCmds should copy a file to image.apex/", cmd)
			}
			dstFile := dst[index+len(imageApexDir):]
			ret = append(ret, fileInApex{path: dstFile, src: src, isLink: isLink})
			ret = append(ret, fileInApex{path: dstFile, isLink: isLink})
		}
	}
	return ret
}

func ensureExactContents(t *testing.T, ctx *android.TestContext, moduleName, variant string, files []string) {
	t.Helper()
func ensureExactContents(t *testing.T, ctx *android.TestContext, moduleName string, files []string) {
	var failed bool
	var surplus []string
	filesMatched := make(map[string]bool)
	for _, file := range getFiles(t, ctx, moduleName, variant) {
	for _, file := range getFiles(t, ctx, moduleName) {
		for _, expected := range files {
			if matched, _ := path.Match(expected, file.path); matched {
				filesMatched[expected] = true
@@ -1730,7 +1725,7 @@ func TestVndkApexCurrent(t *testing.T) {
		}
	`+vndkLibrariesTxtFiles("current"))

	ensureExactContents(t, ctx, "myapex", "android_common_image", []string{
	ensureExactContents(t, ctx, "myapex", []string{
		"lib/libvndk.so",
		"lib/libvndksp.so",
		"lib64/libvndk.so",
@@ -1790,7 +1785,7 @@ func TestVndkApexWithPrebuilt(t *testing.T) {
			"libvndk.arm.so": nil,
		}))

	ensureExactContents(t, ctx, "myapex", "android_common_image", []string{
	ensureExactContents(t, ctx, "myapex", []string{
		"lib/libvndk.so",
		"lib/libvndk.arm.so",
		"lib64/libvndk.so",
@@ -1881,7 +1876,7 @@ func TestVndkApexVersion(t *testing.T) {
			"libvndk27_x86_64.so": nil,
		}))

	ensureExactContents(t, ctx, "myapex_v27", "android_common_image", []string{
	ensureExactContents(t, ctx, "myapex_v27", []string{
		"lib/libvndk27_arm.so",
		"lib64/libvndk27_arm64.so",
		"etc/*",
@@ -1954,7 +1949,7 @@ func TestVndkApexNameRule(t *testing.T) {
		}`+vndkLibrariesTxtFiles("28", "current"))

	assertApexName := func(expected, moduleName string) {
		bundle := ctx.ModuleForTests(moduleName, "android_common_image").Module().(*apexBundle)
		bundle := ctx.ModuleForTests(moduleName, "android_common_"+moduleName+"_image").Module().(*apexBundle)
		actual := proptools.String(bundle.properties.Apex_name)
		if !reflect.DeepEqual(actual, expected) {
			t.Errorf("Got '%v', expected '%v'", actual, expected)
@@ -2002,7 +1997,7 @@ func TestVndkApexSkipsNativeBridgeSupportedModules(t *testing.T) {
			},
		}))

	ensureExactContents(t, ctx, "myapex", "android_common_image", []string{
	ensureExactContents(t, ctx, "myapex", []string{
		"lib/libvndk.so",
		"lib64/libvndk.so",
		"etc/*",
@@ -2098,7 +2093,7 @@ func TestVndkApexWithBinder32(t *testing.T) {
		}),
	)

	ensureExactContents(t, ctx, "myapex_v27", "android_common_image", []string{
	ensureExactContents(t, ctx, "myapex_v27", []string{
		"lib/libvndk27binder32.so",
		"etc/*",
	})
@@ -3442,7 +3437,7 @@ func TestJavaSDKLibrary(t *testing.T) {
	}))

	// java_sdk_library installs both impl jar and permission XML
	ensureExactContents(t, ctx, "myapex", "android_common_myapex_image", []string{
	ensureExactContents(t, ctx, "myapex", []string{
		"javalib/foo.jar",
		"etc/permissions/foo.xml",
	})
@@ -3600,13 +3595,13 @@ func TestSymlinksFromApexToSystem(t *testing.T) {
	}

	ctx, _ := testApex(t, bp, withUnbundledBuild)
	files := getFiles(t, ctx, "myapex", "android_common_myapex_image")
	files := getFiles(t, ctx, "myapex")
	ensureRealfileExists(t, files, "javalib/myjar.jar")
	ensureRealfileExists(t, files, "lib64/mylib.so")
	ensureRealfileExists(t, files, "lib64/myotherlib.so")

	ctx, _ = testApex(t, bp)
	files = getFiles(t, ctx, "myapex", "android_common_myapex_image")
	files = getFiles(t, ctx, "myapex")
	ensureRealfileExists(t, files, "javalib/myjar.jar")
	ensureRealfileExists(t, files, "lib64/mylib.so")
	ensureSymlinkExists(t, files, "lib64/myotherlib.so") // this is symlink

apex/vndk_test.go

deleted100644 → 0
+0 −86
Original line number Diff line number Diff line
package apex

import (
	"testing"

	"github.com/google/blueprint/proptools"

	"android/soong/android"
)

func TestVndkApexUsesVendorVariant(t *testing.T) {
	bp := `
		apex_vndk {
			name: "myapex",
			key: "mykey",
		}
		apex_key {
			name: "mykey",
		}
		cc_library {
			name: "libfoo",
			vendor_available: true,
			vndk: {
				enabled: true,
			},
			system_shared_libs: [],
			stl: "none",
			notice: "custom_notice",
		}
		` + vndkLibrariesTxtFiles("current")

	ensureFileSrc := func(t *testing.T, files []fileInApex, path, src string) {
		t.Helper()
		for _, f := range files {
			if f.path == path {
				ensureContains(t, f.src, src)
				return
			}
		}
		t.Fail()
	}

	t.Run("VNDK lib doesn't have an apex variant", func(t *testing.T) {
		ctx, _ := testApex(t, bp)

		// libfoo doesn't have apex variants
		for _, variant := range ctx.ModuleVariantsForTests("libfoo") {
			ensureNotContains(t, variant, "_myapex")
		}

		// VNDK APEX doesn't create apex variant
		files := getFiles(t, ctx, "myapex", "android_common_image")
		ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.VER_arm_armv7-a-neon_shared/libfoo.so")
	})

	t.Run("VNDK APEX gathers only vendor variants even if product variants are available", func(t *testing.T) {
		ctx, _ := testApex(t, bp, func(fs map[string][]byte, config android.Config) {
			// Now product variant is available
			config.TestProductVariables.ProductVndkVersion = proptools.StringPtr("current")
		})

		files := getFiles(t, ctx, "myapex", "android_common_image")
		ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.VER_arm_armv7-a-neon_shared/libfoo.so")
	})

	t.Run("VNDK APEX supports coverage variants", func(t *testing.T) {
		ctx, _ := testApex(t, bp+`
			cc_library {
				name: "libprofile-extras",
				vendor_available: true,
				native_coverage: false,
				system_shared_libs: [],
				stl: "none",
				notice: "custom_notice",
			}
		`, func(fs map[string][]byte, config android.Config) {
			config.TestProductVariables.NativeCoverage = proptools.BoolPtr(true)
		})

		files := getFiles(t, ctx, "myapex", "android_common_image")
		ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.VER_arm_armv7-a-neon_shared/libfoo.so")

		files = getFiles(t, ctx, "myapex", "android_common_cov_image")
		ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.VER_arm_armv7-a-neon_shared_cov/libfoo.so")
	})
}
+2 −2
Original line number Diff line number Diff line
@@ -351,7 +351,7 @@ func IsForVndkApex(mctx android.BottomUpMutatorContext, m *Module) bool {
	if lib, ok := m.linker.(libraryInterface); ok {
		useCoreVariant := m.VndkVersion() == mctx.DeviceConfig().PlatformVndkVersion() &&
			mctx.DeviceConfig().VndkUseCoreVariant() && !m.MustUseVendorVariant()
		return lib.shared() && m.inVendor() && m.IsVndk() && !m.isVndkExt() && !useCoreVariant
		return lib.shared() && m.UseVndk() && m.IsVndk() && !m.isVndkExt() && !useCoreVariant
	}
	return false
}
@@ -670,7 +670,7 @@ func (c *vndkSnapshotSingleton) GenerateBuildActions(ctx android.SingletonContex
		if m.Target().NativeBridge == android.NativeBridgeEnabled {
			return nil, "", false
		}
		if !m.UseVndk() || !m.installable() || !m.inVendor() {
		if !m.UseVndk() || !m.IsForPlatform() || !m.installable() || !m.inVendor() {
			return nil, "", false
		}
		l, ok := m.linker.(vndkSnapshotLibraryInterface)