aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
authorNan Zhang <nanzhang@google.com>2017-11-15 17:59:56 -0800
committerNan Zhang <nanzhang@google.com>2017-11-30 13:55:49 -0800
commit3bba05962dc4329c6e3d28544775db591574ba7b (patch)
tree8ebc182125ea5934c824a583c07b123ffa1010f7 /python
parente261615792dbe84250fea54c26ca7972293d23c6 (diff)
downloadbuild_soong-3bba05962dc4329c6e3d28544775db591574ba7b.tar.gz
build_soong-3bba05962dc4329c6e3d28544775db591574ba7b.tar.bz2
build_soong-3bba05962dc4329c6e3d28544775db591574ba7b.zip
Change Python in Soong to support device side build.
Add python_test to generate executables for both host and device side. And change python_library_host to python_library. installation for python device test will be under target/product/generic_arm[64]/data/nativetest[64]. Bug: b/69114465 Test: m clean && m -j Device Test: adb root; adb push nan_devicetest /data; adb shell; ./nan_devicetest print(sys.path) ['/data/nan_devicetest/runfiles', '/data/nan_devicetest', '/data/nan_devicetest/internal', '/data/nan_devicetest/internal/stdlib'] Change-Id: If8317070a3aa1b6dab2e84b8df2d037f495d7247
Diffstat (limited to 'python')
-rw-r--r--python/androidmk.go6
-rw-r--r--python/binary.go8
-rw-r--r--python/installer.go31
-rw-r--r--python/library.go7
-rw-r--r--python/python.go4
-rw-r--r--python/test.go17
6 files changed, 57 insertions, 16 deletions
diff --git a/python/androidmk.go b/python/androidmk.go
index 4c944508..5fa01abb 100644
--- a/python/androidmk.go
+++ b/python/androidmk.go
@@ -39,7 +39,7 @@ func (p *Module) subAndroidMk(data *android.AndroidMkData, obj interface{}) {
}
func (p *Module) AndroidMk() android.AndroidMkData {
- ret := android.AndroidMkData{}
+ ret := android.AndroidMkData{OutputFile: p.installSource}
p.subAndroidMk(&ret, p.installer)
@@ -55,7 +55,7 @@ func (p *binaryDecorator) AndroidMk(base *Module, ret *android.AndroidMkData) {
strings.Join(p.binaryProperties.Test_suites, " "))
}
})
- base.subAndroidMk(ret, p.baseInstaller)
+ base.subAndroidMk(ret, p.pythonInstaller)
}
func (p *testDecorator) AndroidMk(base *Module, ret *android.AndroidMkData) {
@@ -67,7 +67,7 @@ func (p *testDecorator) AndroidMk(base *Module, ret *android.AndroidMkData) {
strings.Join(p.binaryDecorator.binaryProperties.Test_suites, " "))
}
})
- base.subAndroidMk(ret, p.binaryDecorator.baseInstaller)
+ base.subAndroidMk(ret, p.binaryDecorator.pythonInstaller)
}
func (installer *pythonInstaller) AndroidMk(base *Module, ret *android.AndroidMkData) {
diff --git a/python/binary.go b/python/binary.go
index 14c49527..457c7fa0 100644
--- a/python/binary.go
+++ b/python/binary.go
@@ -49,24 +49,20 @@ type BinaryProperties struct {
type binaryDecorator struct {
binaryProperties BinaryProperties
- baseInstaller *pythonInstaller
+ *pythonInstaller
}
type IntermPathProvider interface {
IntermPathForModuleOut() android.OptionalPath
}
-func (binary *binaryDecorator) install(ctx android.ModuleContext, file android.Path) {
- binary.baseInstaller.install(ctx, file)
-}
-
var (
stubTemplateHost = "build/soong/python/scripts/stub_template_host.txt"
)
func NewBinary(hod android.HostOrDeviceSupported) (*Module, *binaryDecorator) {
module := newModule(hod, android.MultilibFirst)
- decorator := &binaryDecorator{baseInstaller: NewPythonInstaller("bin")}
+ decorator := &binaryDecorator{pythonInstaller: NewPythonInstaller("bin", "")}
module.bootstrapper = decorator
module.installer = decorator
diff --git a/python/installer.go b/python/installer.go
index 04698c55..ab3d9b4a 100644
--- a/python/installer.go
+++ b/python/installer.go
@@ -15,26 +15,47 @@
package python
import (
+ "path/filepath"
+
"android/soong/android"
)
// This file handles installing python executables into their final location
+type installLocation int
+
+const (
+ InstallInData installLocation = iota
+)
+
type pythonInstaller struct {
- dir string
+ dir string
+ dir64 string
+ relative string
path android.OutputPath
}
-func NewPythonInstaller(dir string) *pythonInstaller {
+func NewPythonInstaller(dir, dir64 string) *pythonInstaller {
return &pythonInstaller{
- dir: dir,
+ dir: dir,
+ dir64: dir64,
}
}
var _ installer = (*pythonInstaller)(nil)
+func (installer *pythonInstaller) installDir(ctx android.ModuleContext) android.OutputPath {
+ dir := installer.dir
+ if ctx.Arch().ArchType.Multilib == "lib64" && installer.dir64 != "" {
+ dir = installer.dir64
+ }
+ if !ctx.Host() && !ctx.Arch().Native {
+ dir = filepath.Join(dir, ctx.Arch().ArchType.String())
+ }
+ return android.PathForModuleInstall(ctx, dir, installer.relative)
+}
+
func (installer *pythonInstaller) install(ctx android.ModuleContext, file android.Path) {
- installer.path = ctx.InstallFile(android.PathForModuleInstall(ctx, installer.dir),
- file.Base(), file)
+ installer.path = ctx.InstallFile(installer.installDir(ctx), file.Base(), file)
}
diff --git a/python/library.go b/python/library.go
index 58ee55fb..65c1352e 100644
--- a/python/library.go
+++ b/python/library.go
@@ -22,6 +22,7 @@ import (
func init() {
android.RegisterModuleType("python_library_host", PythonLibraryHostFactory)
+ android.RegisterModuleType("python_library", PythonLibraryFactory)
}
func PythonLibraryHostFactory() android.Module {
@@ -29,3 +30,9 @@ func PythonLibraryHostFactory() android.Module {
return module.Init()
}
+
+func PythonLibraryFactory() android.Module {
+ module := newModule(android.HostAndDeviceSupported, android.MultilibBoth)
+
+ return module.Init()
+}
diff --git a/python/python.go b/python/python.go
index 9d6d6a79..05efbeae 100644
--- a/python/python.go
+++ b/python/python.go
@@ -558,5 +558,9 @@ func fillInMap(ctx android.ModuleContext, m map[string]string,
return true
}
+func (p *Module) InstallInData() bool {
+ return true
+}
+
var Bool = proptools.Bool
var String = proptools.String
diff --git a/python/test.go b/python/test.go
index de2b13e1..825e63cc 100644
--- a/python/test.go
+++ b/python/test.go
@@ -22,6 +22,7 @@ import (
func init() {
android.RegisterModuleType("python_test_host", PythonTestHostFactory)
+ android.RegisterModuleType("python_test", PythonTestFactory)
}
type testDecorator struct {
@@ -29,13 +30,18 @@ type testDecorator struct {
}
func (test *testDecorator) install(ctx android.ModuleContext, file android.Path) {
- test.binaryDecorator.baseInstaller.install(ctx, file)
+ test.binaryDecorator.pythonInstaller.dir = "nativetest"
+ test.binaryDecorator.pythonInstaller.dir64 = "nativetest64"
+
+ test.binaryDecorator.pythonInstaller.relative = ctx.ModuleName()
+
+ test.binaryDecorator.pythonInstaller.install(ctx, file)
}
func NewTest(hod android.HostOrDeviceSupported) *Module {
module, binary := NewBinary(hod)
- binary.baseInstaller = NewPythonInstaller("nativetest")
+ binary.pythonInstaller = NewPythonInstaller("nativetest", "nativetest64")
test := &testDecorator{binaryDecorator: binary}
@@ -50,3 +56,10 @@ func PythonTestHostFactory() android.Module {
return module.Init()
}
+
+func PythonTestFactory() android.Module {
+ module := NewTest(android.HostAndDeviceSupported)
+ module.multilib = android.MultilibBoth
+
+ return module.Init()
+}