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

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

Merge "Remove no_apex in favor or apex_available"

parents b6699a14 7916bfc3
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ import (
	"sync"

	"github.com/google/blueprint"
	"github.com/google/blueprint/proptools"
)

// ApexModule is the interface that a module type is expected to implement if
@@ -76,18 +75,11 @@ type ApexModule interface {
	// CreateApexVariations.
	setApexName(apexName string)

	// Return the no_apex property
	NoApex() bool

	// Tests if this module is available for the specified APEX or ":platform"
	AvailableFor(what string) bool
}

type ApexProperties struct {
	// Whether this module should not be part of any APEX. Default is false.
	// TODO(b/128708192): remove this as this is equal to apex_available: [":platform"]
	No_apex *bool

	// Availability of this module in APEXes. Only the listed APEXes can include this module.
	// "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
	// "//apex_available:platform" refers to non-APEX partitions like "system.img".
@@ -143,10 +135,6 @@ func (m *ApexModuleBase) IsInstallableToApex() bool {
	return false
}

func (m *ApexModuleBase) NoApex() bool {
	return proptools.Bool(m.ApexProperties.No_apex)
}

const (
	availableToPlatform = "//apex_available:platform"
	availableToAnyApex  = "//apex_available:anyapex"
+0 −23
Original line number Diff line number Diff line
@@ -149,15 +149,6 @@ var (
	androidAppTag  = dependencyTag{name: "androidApp"}
)

var (
	whitelistNoApex = map[string][]string{
		"apex_test_build_features":       []string{"libbinder"},
		"com.android.media.swcodec":      []string{"libbinder"},
		"test_com.android.media.swcodec": []string{"libbinder"},
		"com.android.vndk":               []string{"libbinder"},
	}
)

func init() {
	pctx.Import("android/soong/android")
	pctx.Import("android/soong/java")
@@ -1168,10 +1159,6 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
					}
				} else if am.CanHaveApexVariants() && am.IsInstallableToApex() {
					ctx.ModuleErrorf("unexpected tag %q for indirect dependency %q", depTag, depName)
				} else if depTag == android.DefaultsDepTag {
					return false
				} else if am.NoApex() && !android.InList(depName, whitelistNoApex[ctx.ModuleName()]) {
					ctx.ModuleErrorf("tries to include no_apex module %s", depName)
				}
			}
		}
@@ -1203,16 +1190,6 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
		return filesInfo[i].builtFile.String() < filesInfo[j].builtFile.String()
	})

	// check no_apex modules
	whitelist := whitelistNoApex[ctx.ModuleName()]
	for i := range filesInfo {
		if am, ok := filesInfo[i].module.(android.ApexModule); ok {
			if am.NoApex() && !android.InList(filesInfo[i].moduleName, whitelist) {
				ctx.ModuleErrorf("tries to include no_apex module %s", filesInfo[i].moduleName)
			}
		}
	}

	// check apex_available requirements
	for _, fi := range filesInfo {
		if am, ok := fi.module.(android.ApexModule); ok {
+0 −197
Original line number Diff line number Diff line
@@ -102,9 +102,6 @@ func testApexContext(t *testing.T, bp string, handlers ...testCustomizer) (*andr
	ctx.RegisterModuleType("apex_defaults", android.ModuleFactoryAdaptor(defaultsFactory))
	ctx.RegisterModuleType("prebuilt_apex", android.ModuleFactoryAdaptor(PrebuiltFactory))

	ctx.RegisterModuleType("cc_defaults", android.ModuleFactoryAdaptor(func() android.Module {
		return cc.DefaultsFactory()
	}))
	ctx.RegisterModuleType("cc_library", android.ModuleFactoryAdaptor(cc.LibraryFactory))
	ctx.RegisterModuleType("cc_library_shared", android.ModuleFactoryAdaptor(cc.LibrarySharedFactory))
	ctx.RegisterModuleType("cc_library_headers", android.ModuleFactoryAdaptor(cc.LibraryHeaderFactory))
@@ -2183,200 +2180,6 @@ func TestApexUsesFailsIfUseVenderMismatch(t *testing.T) {
	`)
}

func TestApexUsesFailsIfUseNoApex(t *testing.T) {
	// 'no_apex' prevents a module to be included in an apex
	testApexError(t, `tries to include no_apex module mylib2`, `
		apex {
			name: "commonapex",
			key: "myapex.key",
			native_shared_libs: ["mylib"],
		}

		apex_key {
			name: "myapex.key",
			public_key: "testkey.avbpubkey",
			private_key: "testkey.pem",
		}

		cc_library {
			name: "mylib",
			srcs: ["mylib.cpp"],
			shared_libs: ["mylib2"],
			system_shared_libs: [],
			stl: "none",
		}

		cc_library {
			name: "mylib2",
			srcs: ["mylib.cpp"],
			system_shared_libs: [],
			stl: "none",
			no_apex: true,
		}
	`)

	// respect 'no_apex' even with static link
	testApexError(t, `tries to include no_apex module mylib2`, `
		apex {
			name: "commonapex",
			key: "myapex.key",
			native_shared_libs: ["mylib"],
		}

		apex_key {
			name: "myapex.key",
			public_key: "testkey.avbpubkey",
			private_key: "testkey.pem",
		}

		cc_library {
			name: "mylib",
			srcs: ["mylib.cpp"],
			static_libs: ["mylib2"],
			system_shared_libs: [],
			stl: "none",
		}

		cc_library {
			name: "mylib2",
			srcs: ["mylib.cpp"],
			system_shared_libs: [],
			stl: "none",
			no_apex: true,
		}
	`)

	// 'no_apex' can be applied via defaults
	testApexError(t, `tries to include no_apex module mylib2`, `
		apex {
			name: "commonapex",
			key: "myapex.key",
			native_shared_libs: ["mylib"],
		}

		apex_key {
			name: "myapex.key",
			public_key: "testkey.avbpubkey",
			private_key: "testkey.pem",
		}

		cc_library {
			name: "mylib",
			srcs: ["mylib.cpp"],
			static_libs: ["mylib2"],
			system_shared_libs: [],
			stl: "none",
		}

		cc_defaults {
			name: "mylib2_defaults",
			system_shared_libs: [],
			stl: "none",
			no_apex: true,
		}

		cc_library {
			name: "mylib2",
			srcs: ["mylib.cpp"],
			defaults: ["mylib2_defaults"],
		}
	`)
}

func TestNoApexWorksWithWhitelist(t *testing.T) {

	testApex(t, `
		apex {
			name: "myapex",
			key: "myapex.key",
			native_shared_libs: ["mylib"],
		}

		apex_key {
			name: "myapex.key",
			public_key: "testkey.avbpubkey",
			private_key: "testkey.pem",
		}

		cc_library {
			name: "mylib",
			srcs: ["mylib.cpp"],
			shared_libs: ["mylib2"],
			system_shared_libs: [],
			stl: "none",
		}

		cc_defaults {
			name: "mylib2_defaults",
			system_shared_libs: [],
			stl: "none",
			no_apex: true,
		}

		cc_library {
			name: "mylib2",
			srcs: ["mylib.cpp"],
			defaults: ["mylib2_defaults"],
		}
	`, func(fs map[string][]byte, config android.Config) {
		whitelistNoApex = map[string][]string{
			"myapex": []string{"mylib2"},
		}
	})
}

func TestNoApexCanBeDependedOnViaStubs(t *testing.T) {
	ctx, _ := testApex(t, `
		apex {
			name: "myapex",
			key: "myapex.key",
			native_shared_libs: ["mylib"],
		}

		apex_key {
			name: "myapex.key",
			public_key: "testkey.avbpubkey",
			private_key: "testkey.pem",
		}

		cc_library {
			name: "mylib",
			srcs: ["mylib.cpp"],
			shared_libs: ["mylib2"],
			system_shared_libs: [],
			stl: "none",
		}

		cc_library {
			name: "mylib2",
			srcs: ["mylib.cpp"],
			shared_libs: ["mylib3"],
			system_shared_libs: [],
			stl: "none",
			stubs: {
				versions: ["1", "2", "3"],
			},
		}

		// this won't be included in "myapex", so 'no_apex' is still valid in this case.
		cc_library {
			name: "mylib3",
			srcs: ["mylib.cpp"],
			system_shared_libs: [],
			stl: "none",
			no_apex: true,
		}
	`)

	module := ctx.ModuleForTests("myapex", "android_common_myapex")
	apexRule := module.Rule("apexRule")
	copyCmds := apexRule.Args["copy_commands"]

	ensureContains(t, copyCmds, "image.apex/lib64/mylib.so")
	ensureNotContains(t, copyCmds, "image.apex/lib64/mylib2.so")
	ensureNotContains(t, copyCmds, "image.apex/lib64/mylib3.so")
}

func TestErrorsIfDepsAreNotEnabled(t *testing.T) {
	testApexError(t, `module "myapex" .* depends on disabled module "libfoo"`, `
		apex {
+4 −2
Original line number Diff line number Diff line
@@ -552,8 +552,10 @@ func (c *Module) Init() android.Module {
		}
	})
	android.InitAndroidArchModule(c, c.hod, c.multilib)
	android.InitApexModule(c)

	android.InitDefaultableModule(c)

	android.InitApexModule(c)
	android.InitSdkAwareModule(c)

	return c
@@ -2229,8 +2231,8 @@ func DefaultsFactory(props ...interface{}) android.Module {
		&android.ProtoProperties{},
	)

	android.InitApexModule(module)
	android.InitDefaultsModule(module)
	android.InitApexModule(module)

	return module
}