diff options
Diffstat (limited to 'system/setup.py')
-rw-r--r-- | system/setup.py | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/system/setup.py b/system/setup.py new file mode 100644 index 0000000000..cdb76f8a3a --- /dev/null +++ b/system/setup.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +# +# Copyright 2020 - The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from distutils import log +import os +from setuptools import find_packages +from setuptools import setup +from setuptools.command.install import install +import stat +import subprocess +import sys + +reuse_libraries = False +force_install = False + +install_requires = [ + 'grpcio', + 'psutil', + 'protobuf>=3.14.0', + 'mobly', +] + +host_executables = [ + 'root-canal', + 'bluetooth_stack_with_facade', # c++ + 'bluetooth_with_facades', # rust + 'bt_topshim_facade', # topshim +] + + +def set_permissions_for_host_executables(outputs): + for file in outputs: + if os.path.basename(file) in host_executables: + current_mode = os.stat(file).st_mode + new_mode = current_mode | stat.S_IEXEC + os.chmod(file, new_mode) + log.log(log.INFO, "Changed file mode of %s from %s to %s" % (file, oct(current_mode), oct(new_mode))) + + +class InstallLocalPackagesForInstallation(install): + + def run(self): + global reuse_libraries, force_install + install_args = [sys.executable, '-m', 'pip', 'install'] + subprocess.check_call(install_args + ['--upgrade', 'pip']) + + for package in install_requires: + self.announce('Installing %s...' % package, log.INFO) + cmd = install_args + ['-v', '--no-cache-dir', package] + if force_install and not reuse_libraries: + cmd.append("--force-reinstall") + subprocess.check_call(cmd) + self.announce('Dependencies installed.') + + install.run(self) + set_permissions_for_host_executables(self.get_outputs()) + + +def main(): + global reuse_libraries, force_install + if sys.argv[-1] == "--reuse-libraries": + reuse_libraries = True + sys.argv = sys.argv[:-1] + if "--force" in sys.argv: + force_install = True + # Relative path from calling directory to this file + our_dir = os.path.dirname(__file__) + # Must cd into this dir for package resolution to work + # This won't affect the calling shell + os.chdir(our_dir) + setup( + name='bluetooth_cert_tests', + version='1.0', + author='Android Open Source Project', + license='Apache2.0', + description="""Bluetooth Cert Tests Package""", + # Include root package so that bluetooth_packets_python3.so can be + # included as well + packages=[''] + find_packages(exclude=['llvm_binutils', 'llvm_binutils.*']), + install_requires=install_requires, + package_data={ + '': host_executables + ['*.so', 'lib64/*.so', 'target/*', 'llvm_binutils/bin/*', 'llvm_binutils/lib64/*'], + }, + cmdclass={ + 'install': InstallLocalPackagesForInstallation, + }) + + +if __name__ == '__main__': + main() |