Loading apex/apex.go +30 −0 Original line number Diff line number Diff line Loading @@ -1696,6 +1696,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { a.checkUpdatable(ctx) a.checkMinSdkVersion(ctx) a.checkStaticLinkingToStubLibraries(ctx) a.checkStaticExecutables(ctx) if len(a.properties.Tests) > 0 && !a.testApex { ctx.PropertyErrorf("tests", "property allowed only in apex_test module type") return Loading Loading @@ -2487,6 +2488,35 @@ func (a *apexBundle) checkApexAvailability(ctx android.ModuleContext) { }) } // checkStaticExecutable ensures that executables in an APEX are not static. func (a *apexBundle) checkStaticExecutables(ctx android.ModuleContext) { ctx.VisitDirectDepsBlueprint(func(module blueprint.Module) { if ctx.OtherModuleDependencyTag(module) != executableTag { return } if cc, ok := module.(*cc.Module); ok && cc.StaticExecutable() { apex := a.ApexVariationName() exec := ctx.OtherModuleName(module) if isStaticExecutableAllowed(apex, exec) { return } ctx.ModuleErrorf("executable %s is static", ctx.OtherModuleName(module)) } }) } // A small list of exceptions where static executables are allowed in APEXes. func isStaticExecutableAllowed(apex string, exec string) bool { m := map[string][]string{ "com.android.runtime": []string{ "linker", "linkerconfig", }, } execNames, ok := m[apex] return ok && android.InList(exec, execNames) } // Collect information for opening IDE project files in java/jdeps.go. func (a *apexBundle) IDEInfo(dpInfo *android.IdeInfo) { dpInfo.Deps = append(dpInfo.Deps, a.properties.Java_libs...) Loading apex/apex_test.go +27 −3 Original line number Diff line number Diff line Loading @@ -374,7 +374,6 @@ func TestBasicApex(t *testing.T) { symlinks: ["foo_link_"], symlink_preferred_arch: true, system_shared_libs: [], static_executable: true, stl: "none", apex_available: [ "myapex", "com.android.gki.*" ], } Loading Loading @@ -2494,7 +2493,6 @@ func TestFilesInSubDir(t *testing.T) { srcs: ["mylib.cpp"], relative_install_path: "foo/bar", system_shared_libs: [], static_executable: true, stl: "none", apex_available: [ "myapex" ], } Loading Loading @@ -2554,7 +2552,6 @@ func TestFilesInSubDirWhenNativeBridgeEnabled(t *testing.T) { name: "mybin", relative_install_path: "foo/bar", system_shared_libs: [], static_executable: true, stl: "none", apex_available: [ "myapex" ], native_bridge_supported: true, Loading Loading @@ -8188,6 +8185,33 @@ func TestApexJavaCoverage(t *testing.T) { } } func TestProhibitStaticExecutable(t *testing.T) { testApexError(t, `executable mybin is static`, ` apex { name: "myapex", key: "myapex.key", binaries: ["mybin"], min_sdk_version: "29", } apex_key { name: "myapex.key", public_key: "testkey.avbpubkey", private_key: "testkey.pem", } cc_binary { name: "mybin", srcs: ["mylib.cpp"], relative_install_path: "foo/bar", static_executable: true, system_shared_libs: [], stl: "none", apex_available: [ "myapex" ], } `) } func TestMain(m *testing.M) { os.Exit(m.Run()) } Loading
apex/apex.go +30 −0 Original line number Diff line number Diff line Loading @@ -1696,6 +1696,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { a.checkUpdatable(ctx) a.checkMinSdkVersion(ctx) a.checkStaticLinkingToStubLibraries(ctx) a.checkStaticExecutables(ctx) if len(a.properties.Tests) > 0 && !a.testApex { ctx.PropertyErrorf("tests", "property allowed only in apex_test module type") return Loading Loading @@ -2487,6 +2488,35 @@ func (a *apexBundle) checkApexAvailability(ctx android.ModuleContext) { }) } // checkStaticExecutable ensures that executables in an APEX are not static. func (a *apexBundle) checkStaticExecutables(ctx android.ModuleContext) { ctx.VisitDirectDepsBlueprint(func(module blueprint.Module) { if ctx.OtherModuleDependencyTag(module) != executableTag { return } if cc, ok := module.(*cc.Module); ok && cc.StaticExecutable() { apex := a.ApexVariationName() exec := ctx.OtherModuleName(module) if isStaticExecutableAllowed(apex, exec) { return } ctx.ModuleErrorf("executable %s is static", ctx.OtherModuleName(module)) } }) } // A small list of exceptions where static executables are allowed in APEXes. func isStaticExecutableAllowed(apex string, exec string) bool { m := map[string][]string{ "com.android.runtime": []string{ "linker", "linkerconfig", }, } execNames, ok := m[apex] return ok && android.InList(exec, execNames) } // Collect information for opening IDE project files in java/jdeps.go. func (a *apexBundle) IDEInfo(dpInfo *android.IdeInfo) { dpInfo.Deps = append(dpInfo.Deps, a.properties.Java_libs...) Loading
apex/apex_test.go +27 −3 Original line number Diff line number Diff line Loading @@ -374,7 +374,6 @@ func TestBasicApex(t *testing.T) { symlinks: ["foo_link_"], symlink_preferred_arch: true, system_shared_libs: [], static_executable: true, stl: "none", apex_available: [ "myapex", "com.android.gki.*" ], } Loading Loading @@ -2494,7 +2493,6 @@ func TestFilesInSubDir(t *testing.T) { srcs: ["mylib.cpp"], relative_install_path: "foo/bar", system_shared_libs: [], static_executable: true, stl: "none", apex_available: [ "myapex" ], } Loading Loading @@ -2554,7 +2552,6 @@ func TestFilesInSubDirWhenNativeBridgeEnabled(t *testing.T) { name: "mybin", relative_install_path: "foo/bar", system_shared_libs: [], static_executable: true, stl: "none", apex_available: [ "myapex" ], native_bridge_supported: true, Loading Loading @@ -8188,6 +8185,33 @@ func TestApexJavaCoverage(t *testing.T) { } } func TestProhibitStaticExecutable(t *testing.T) { testApexError(t, `executable mybin is static`, ` apex { name: "myapex", key: "myapex.key", binaries: ["mybin"], min_sdk_version: "29", } apex_key { name: "myapex.key", public_key: "testkey.avbpubkey", private_key: "testkey.pem", } cc_binary { name: "mybin", srcs: ["mylib.cpp"], relative_install_path: "foo/bar", static_executable: true, system_shared_libs: [], stl: "none", apex_available: [ "myapex" ], } `) } func TestMain(m *testing.M) { os.Exit(m.Run()) }