Loading Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -375,6 +375,7 @@ bootstrap_go_package { "soong-android", "soong-cc", "soong-java", "soong-python", ], srcs: [ "apex/apex.go", Loading android/module.go +5 −0 Original line number Diff line number Diff line Loading @@ -154,6 +154,7 @@ type ModuleContext interface { // Deprecated: use WalkDeps instead to support multiple dependency tags on the same module VisitDepsDepthFirstIf(pred func(Module) bool, visit func(Module)) WalkDeps(visit func(Module, Module) bool) WalkDepsBlueprint(visit func(blueprint.Module, blueprint.Module) bool) Variable(pctx PackageContext, name, value string) Rule(pctx PackageContext, name string, params blueprint.RuleParams, argNames ...string) blueprint.Rule Loading Loading @@ -1067,6 +1068,10 @@ func (a *androidModuleContext) VisitDepsDepthFirstIf(pred func(Module) bool, vis }) } func (a *androidModuleContext) WalkDepsBlueprint(visit func(blueprint.Module, blueprint.Module) bool) { a.ModuleContext.WalkDeps(visit) } func (a *androidModuleContext) WalkDeps(visit func(Module, Module) bool) { a.ModuleContext.WalkDeps(func(child, parent blueprint.Module) bool { childAndroidModule := a.validateAndroidModule(child) Loading apex/apex.go +32 −3 Original line number Diff line number Diff line Loading @@ -25,8 +25,10 @@ import ( "android/soong/android" "android/soong/cc" "android/soong/java" "android/soong/python" "github.com/google/blueprint" "github.com/google/blueprint/bootstrap" "github.com/google/blueprint/proptools" ) Loading Loading @@ -289,6 +291,8 @@ const ( nativeSharedLib nativeExecutable shBinary pyBinary goBinary javaSharedLib ) Loading Loading @@ -348,7 +352,7 @@ func (class apexFileClass) NameInMake() string { return "ETC" case nativeSharedLib: return "SHARED_LIBRARIES" case nativeExecutable, shBinary: case nativeExecutable, shBinary, pyBinary, goBinary: return "EXECUTABLES" case javaSharedLib: return "JAVA_LIBRARIES" Loading Loading @@ -624,6 +628,22 @@ func getCopyManifestForExecutable(cc *cc.Module) (fileToCopy android.Path, dirIn return } func getCopyManifestForPyBinary(py *python.Module) (fileToCopy android.Path, dirInApex string) { dirInApex = "bin" fileToCopy = py.HostToolPath().Path() return } func getCopyManifestForGoBinary(ctx android.ModuleContext, gb bootstrap.GoBinaryTool) (fileToCopy android.Path, dirInApex string) { dirInApex = "bin" s, err := filepath.Rel(android.PathForOutput(ctx).String(), gb.InstallPath()) if err != nil { ctx.ModuleErrorf("Unable to use compiled binary at %s", gb.InstallPath()) return } fileToCopy = android.PathForOutput(ctx, s) return } func getCopyManifestForShBinary(sh *android.ShBinary) (fileToCopy android.Path, dirInApex string) { dirInApex = filepath.Join("bin", sh.SubDir()) fileToCopy = sh.OutputFile() Loading Loading @@ -658,7 +678,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { handleSpecialLibs := !android.Bool(a.properties.Ignore_system_library_special_case) ctx.WalkDeps(func(child, parent android.Module) bool { ctx.WalkDepsBlueprint(func(child, parent blueprint.Module) bool { if _, ok := parent.(*apexBundle); ok { // direct dependencies depTag := ctx.OtherModuleDependencyTag(child) Loading @@ -685,8 +705,17 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { } else if sh, ok := child.(*android.ShBinary); ok { fileToCopy, dirInApex := getCopyManifestForShBinary(sh) filesInfo = append(filesInfo, apexFile{fileToCopy, depName, dirInApex, shBinary, sh, nil}) } else if py, ok := child.(*python.Module); ok && py.HostToolPath().Valid() { fileToCopy, dirInApex := getCopyManifestForPyBinary(py) filesInfo = append(filesInfo, apexFile{fileToCopy, depName, dirInApex, pyBinary, py, nil}) } else if gb, ok := child.(bootstrap.GoBinaryTool); ok && a.Host() { fileToCopy, dirInApex := getCopyManifestForGoBinary(ctx, gb) // NB: Since go binaries are static we don't need the module for anything here, which is // good since the go tool is a blueprint.Module not an android.Module like we would // normally use. filesInfo = append(filesInfo, apexFile{fileToCopy, depName, dirInApex, goBinary, nil, nil}) } else { ctx.PropertyErrorf("binaries", "%q is neithher cc_binary nor sh_binary", depName) ctx.PropertyErrorf("binaries", "%q is neither cc_binary, (embedded) py_binary, (host) blueprint_go_binary, (host) bootstrap_go_binary, nor sh_binary", depName) } case javaLibTag: if java, ok := child.(*java.Library); ok { Loading Loading
Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -375,6 +375,7 @@ bootstrap_go_package { "soong-android", "soong-cc", "soong-java", "soong-python", ], srcs: [ "apex/apex.go", Loading
android/module.go +5 −0 Original line number Diff line number Diff line Loading @@ -154,6 +154,7 @@ type ModuleContext interface { // Deprecated: use WalkDeps instead to support multiple dependency tags on the same module VisitDepsDepthFirstIf(pred func(Module) bool, visit func(Module)) WalkDeps(visit func(Module, Module) bool) WalkDepsBlueprint(visit func(blueprint.Module, blueprint.Module) bool) Variable(pctx PackageContext, name, value string) Rule(pctx PackageContext, name string, params blueprint.RuleParams, argNames ...string) blueprint.Rule Loading Loading @@ -1067,6 +1068,10 @@ func (a *androidModuleContext) VisitDepsDepthFirstIf(pred func(Module) bool, vis }) } func (a *androidModuleContext) WalkDepsBlueprint(visit func(blueprint.Module, blueprint.Module) bool) { a.ModuleContext.WalkDeps(visit) } func (a *androidModuleContext) WalkDeps(visit func(Module, Module) bool) { a.ModuleContext.WalkDeps(func(child, parent blueprint.Module) bool { childAndroidModule := a.validateAndroidModule(child) Loading
apex/apex.go +32 −3 Original line number Diff line number Diff line Loading @@ -25,8 +25,10 @@ import ( "android/soong/android" "android/soong/cc" "android/soong/java" "android/soong/python" "github.com/google/blueprint" "github.com/google/blueprint/bootstrap" "github.com/google/blueprint/proptools" ) Loading Loading @@ -289,6 +291,8 @@ const ( nativeSharedLib nativeExecutable shBinary pyBinary goBinary javaSharedLib ) Loading Loading @@ -348,7 +352,7 @@ func (class apexFileClass) NameInMake() string { return "ETC" case nativeSharedLib: return "SHARED_LIBRARIES" case nativeExecutable, shBinary: case nativeExecutable, shBinary, pyBinary, goBinary: return "EXECUTABLES" case javaSharedLib: return "JAVA_LIBRARIES" Loading Loading @@ -624,6 +628,22 @@ func getCopyManifestForExecutable(cc *cc.Module) (fileToCopy android.Path, dirIn return } func getCopyManifestForPyBinary(py *python.Module) (fileToCopy android.Path, dirInApex string) { dirInApex = "bin" fileToCopy = py.HostToolPath().Path() return } func getCopyManifestForGoBinary(ctx android.ModuleContext, gb bootstrap.GoBinaryTool) (fileToCopy android.Path, dirInApex string) { dirInApex = "bin" s, err := filepath.Rel(android.PathForOutput(ctx).String(), gb.InstallPath()) if err != nil { ctx.ModuleErrorf("Unable to use compiled binary at %s", gb.InstallPath()) return } fileToCopy = android.PathForOutput(ctx, s) return } func getCopyManifestForShBinary(sh *android.ShBinary) (fileToCopy android.Path, dirInApex string) { dirInApex = filepath.Join("bin", sh.SubDir()) fileToCopy = sh.OutputFile() Loading Loading @@ -658,7 +678,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { handleSpecialLibs := !android.Bool(a.properties.Ignore_system_library_special_case) ctx.WalkDeps(func(child, parent android.Module) bool { ctx.WalkDepsBlueprint(func(child, parent blueprint.Module) bool { if _, ok := parent.(*apexBundle); ok { // direct dependencies depTag := ctx.OtherModuleDependencyTag(child) Loading @@ -685,8 +705,17 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { } else if sh, ok := child.(*android.ShBinary); ok { fileToCopy, dirInApex := getCopyManifestForShBinary(sh) filesInfo = append(filesInfo, apexFile{fileToCopy, depName, dirInApex, shBinary, sh, nil}) } else if py, ok := child.(*python.Module); ok && py.HostToolPath().Valid() { fileToCopy, dirInApex := getCopyManifestForPyBinary(py) filesInfo = append(filesInfo, apexFile{fileToCopy, depName, dirInApex, pyBinary, py, nil}) } else if gb, ok := child.(bootstrap.GoBinaryTool); ok && a.Host() { fileToCopy, dirInApex := getCopyManifestForGoBinary(ctx, gb) // NB: Since go binaries are static we don't need the module for anything here, which is // good since the go tool is a blueprint.Module not an android.Module like we would // normally use. filesInfo = append(filesInfo, apexFile{fileToCopy, depName, dirInApex, goBinary, nil, nil}) } else { ctx.PropertyErrorf("binaries", "%q is neithher cc_binary nor sh_binary", depName) ctx.PropertyErrorf("binaries", "%q is neither cc_binary, (embedded) py_binary, (host) blueprint_go_binary, (host) bootstrap_go_binary, nor sh_binary", depName) } case javaLibTag: if java, ok := child.(*java.Library); ok { Loading