diff options
author | Nan Zhang <nanzhang@google.com> | 2017-11-15 17:59:56 -0800 |
---|---|---|
committer | Nan Zhang <nanzhang@google.com> | 2017-11-30 13:55:49 -0800 |
commit | 3bba05962dc4329c6e3d28544775db591574ba7b (patch) | |
tree | 8ebc182125ea5934c824a583c07b123ffa1010f7 | |
parent | e261615792dbe84250fea54c26ca7972293d23c6 (diff) | |
download | build_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
-rw-r--r-- | python/androidmk.go | 6 | ||||
-rw-r--r-- | python/binary.go | 8 | ||||
-rw-r--r-- | python/installer.go | 31 | ||||
-rw-r--r-- | python/library.go | 7 | ||||
-rw-r--r-- | python/python.go | 4 | ||||
-rw-r--r-- | python/test.go | 17 |
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() +} |