Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9dfbff12 authored by Jack He's avatar Jack He
Browse files

Python: Add setuptools support for bluetooth_packets_python3

* Add cert/bluetooth_packets_python3_setup.py just in case a test
  runner wants to compile the source against their own non-Python3.8
  interpreter

Bug: 143374372
Test: make and import bluetooth_packets_pyton3
Change-Id: I01330fcf0c9e98ae178507ac775d817d1ef82133
parent 237dec52
Loading
Loading
Loading
Loading
+75 −0
Original line number Diff line number Diff line
#!/usr/bin/env python3
#
#   Copyright 2019 - 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.


# Usage:
# 1. Run envsetup and lunch first in an Android checkout
# 2. Make target bluetooth_packets_python3 that will generate C++ sources for the
#    Extension
# 3. Build only:
#       python3 bluetooth_packets_python3_setup.py build_ext
#   Then Find the .so file in build/lib.linux-x86_64-3.X
# 4. Install:
#       python3 bluetooth_packets_python3_setup.py install --user


import os
import glob
from setuptools import setup, Extension

ANDROID_BUILD_TOP = os.getenv("ANDROID_BUILD_TOP")
PYBIND11_INCLUDE_DIR = os.path.join(ANDROID_BUILD_TOP,
                                    "external/python/pybind11/include")
GD_DIR = os.path.join(ANDROID_BUILD_TOP, "packages/modules/Bluetooth/system/gd")
BT_PACKETS_GEN_DIR = os.path.join(ANDROID_BUILD_TOP,
                                  "out/soong/.intermediates/packages/modules/Bluetooth/system/gd/BluetoothGeneratedPackets_h/gen")
BT_PACKETS_PY3_GEN_DIR = os.path.join(ANDROID_BUILD_TOP,
                                      "out/soong/.intermediates/packages/modules/Bluetooth/system/gd/BluetoothGeneratedPackets_python3_cc/gen")

BT_PACKETS_BASE_SRCS = [
    os.path.join(GD_DIR, "l2cap/fcs.cc"),
    os.path.join(GD_DIR, "packet/bit_inserter.cc"),
    os.path.join(GD_DIR, "packet/byte_inserter.cc"),
    os.path.join(GD_DIR, "packet/byte_observer.cc"),
    os.path.join(GD_DIR, "packet/iterator.cc"),
    os.path.join(GD_DIR, "packet/fragmenting_inserter.cc"),
    os.path.join(GD_DIR, "packet/packet_view.cc"),
    os.path.join(GD_DIR, "packet/raw_builder.cc"),
    os.path.join(GD_DIR, "packet/view.cc"),
]

BT_PACKETS_PY3_SRCs = \
  [os.path.join(GD_DIR, "packet/python3_module.cc")] \
  + glob.glob(os.path.join(BT_PACKETS_PY3_GEN_DIR, "hci", "*.cc")) \
  + glob.glob(os.path.join(BT_PACKETS_PY3_GEN_DIR, "l2cap", "*.cc")) \
  + glob.glob(os.path.join(BT_PACKETS_PY3_GEN_DIR, "security", "*.cc"))

bluetooth_packets_python3_module = Extension('bluetooth_packets_python3',
                                             sources=BT_PACKETS_BASE_SRCS + BT_PACKETS_PY3_SRCs,
                                             include_dirs=[GD_DIR,
                                                           BT_PACKETS_GEN_DIR,
                                                           BT_PACKETS_PY3_GEN_DIR,
                                                           PYBIND11_INCLUDE_DIR],
                                             extra_compile_args=['-std=c++17']
                                             )

setup(name='bluetooth_packets_python3',
      version='1.0',
      author="Android Open Source Project",
      description="""Bluetooth Packet Library""",
      ext_modules=[bluetooth_packets_python3_module],
      py_modules=["bluetooth_packets_python3"],
      )