aboutsummaryrefslogtreecommitdiffstats
path: root/apex
diff options
context:
space:
mode:
Diffstat (limited to 'apex')
-rw-r--r--apex/apex.go35
1 files changed, 32 insertions, 3 deletions
diff --git a/apex/apex.go b/apex/apex.go
index 9ab51875..f72eef3a 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -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"
)
@@ -289,6 +291,8 @@ const (
nativeSharedLib
nativeExecutable
shBinary
+ pyBinary
+ goBinary
javaSharedLib
)
@@ -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"
@@ -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()
@@ -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)
@@ -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 {