Loading android/apex.go +0 −12 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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". Loading Loading @@ -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" Loading apex/apex.go +0 −23 Original line number Diff line number Diff line Loading @@ -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") Loading Loading @@ -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) } } } Loading Loading @@ -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 { Loading apex/apex_test.go +0 −197 Original line number Diff line number Diff line Loading @@ -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)) Loading Loading @@ -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 { Loading cc/cc.go +4 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -2229,8 +2231,8 @@ func DefaultsFactory(props ...interface{}) android.Module { &android.ProtoProperties{}, ) android.InitApexModule(module) android.InitDefaultsModule(module) android.InitApexModule(module) return module } Loading Loading
android/apex.go +0 −12 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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". Loading Loading @@ -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" Loading
apex/apex.go +0 −23 Original line number Diff line number Diff line Loading @@ -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") Loading Loading @@ -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) } } } Loading Loading @@ -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 { Loading
apex/apex_test.go +0 −197 Original line number Diff line number Diff line Loading @@ -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)) Loading Loading @@ -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 { Loading
cc/cc.go +4 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -2229,8 +2231,8 @@ func DefaultsFactory(props ...interface{}) android.Module { &android.ProtoProperties{}, ) android.InitApexModule(module) android.InitDefaultsModule(module) android.InitApexModule(module) return module } Loading