From 9d67a7a7b5d5c96f8c7d6921a443d98c8df434fa Mon Sep 17 00:00:00 2001 From: wangguokun Date: Tue, 19 Mar 2024 02:53:31 +0000 Subject: [PATCH] lib/pybind11_abseil: port lib-pybind11_abseil to tenonos Signed-off-by: wangguokun --- Config.uk | 4 + Makefile.uk | 84 +++++++++++++++++++ README.md | 29 +++++++ .../pybind11_abseil/ok_status_singleton.py | 1 + importfix/pybind11_abseil/status.py | 1 + patches/.keep | 0 6 files changed, 119 insertions(+) create mode 100644 Config.uk create mode 100644 Makefile.uk create mode 100644 README.md create mode 100644 importfix/pybind11_abseil/ok_status_singleton.py create mode 100644 importfix/pybind11_abseil/status.py create mode 100644 patches/.keep diff --git a/Config.uk b/Config.uk new file mode 100644 index 0000000..f969325 --- /dev/null +++ b/Config.uk @@ -0,0 +1,4 @@ +menuconfig LIBPYBIND11_ABSEIL + bool "pybind11_abseil: Pybind11 bindings for the Abseil C++ Common Libraries Abseil" + select LIBABSL + default n diff --git a/Makefile.uk b/Makefile.uk new file mode 100644 index 0000000..c6acc3d --- /dev/null +++ b/Makefile.uk @@ -0,0 +1,84 @@ +# SPDX-License-Identifier: Apache-2.0 +# Copyright 2024 The TenonOS Authors +# +# 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. + +################################################################################ +# Library registration +################################################################################ +$(eval $(call addlib_s,libpybind11_abseil,$(CONFIG_LIBPYBIND11_ABSEIL))) + +################################################################################ +# Sources +################################################################################ +LIBPYBIND11_ABSEIL_VERSION=202402.0 +LIBPYBIND11_ABSEIL_URL=https://github.com/pybind/pybind11_abseil/archive/refs/tags/v$(LIBPYBIND11_ABSEIL_VERSION).tar.gz +LIBPYBIND11_ABSEIL_DIRNAME=pybind11_abseil-$(LIBPYBIND11_ABSEIL_VERSION) + +ifeq ($(CONFIG_LIBPYBIND11_ABSEIL), y) +$(eval $(call fetch,libpybind11_abseil,$(LIBPYBIND11_ABSEIL_URL))) +endif + +################################################################################ +# Helpers +################################################################################ +LIBPYBIND11_ABSEIL_SRC = $(LIBPYBIND11_ABSEIL_ORIGIN)/$(LIBPYBIND11_ABSEIL_DIRNAME) + +################################################################################ +# Library includes +################################################################################ +CINCLUDES-$(CONFIG_LIBPYBIND11_ABSEIL) += -I$(LIBPYBIND11_ABSEIL_SRC) +CXXINCLUDES-$(CONFIG_LIBPYBIND11_ABSEIL) += -I$(LIBPYBIND11_ABSEIL_SRC) + +################################################################################ +# Global flags +################################################################################ +GCC_INSTALLDIR_FLAGS := -idirafter $(shell LC_ALL=C $(CC) -v 2>&1 | \ + $(SED) -e '/^COLLECT_LTO_WRAPPER=\(.*\)\/lto-wrapper/!d' -e 's//\1/')/include + +ifdef CONFIG_ARCH_ARM_64 +LIBPYBIND11_ABSEIL_CFLAGS-$(CONFIG_ARCH_ARM_64) += $(GCC_INSTALLDIR_FLAGS) +LIBPYBIND11_ABSEIL_CXXFLAGS-$(CONFIG_ARCH_ARM_64) += $(GCC_INSTALLDIR_FLAGS) +endif + +################################################################################ +# Library sources +################################################################################ +LIBPYBIND11_ABSEIL_SRCS-y += $(LIBPYBIND11_ABSEIL_SRC)/pybind11_abseil/import_status_module.cc +LIBPYBIND11_ABSEIL_SRCS-y += $(LIBPYBIND11_ABSEIL_SRC)/pybind11_abseil/ok_status_singleton_lib.cc +LIBPYBIND11_ABSEIL_SRCS-y += $(LIBPYBIND11_ABSEIL_SRC)/pybind11_abseil/ok_status_singleton_py_extension_stub.cc +LIBPYBIND11_ABSEIL_SRCS-y += $(LIBPYBIND11_ABSEIL_SRC)/pybind11_abseil/utils_pybind11_absl.cc +LIBPYBIND11_ABSEIL_SRCS-y += $(LIBPYBIND11_ABSEIL_SRC)/pybind11_abseil/cpp_capsule_tools/void_ptr_from_capsule.cc +LIBPYBIND11_ABSEIL_SRCS-y += $(LIBPYBIND11_ABSEIL_SRC)/pybind11_abseil/register_status_bindings.cc +LIBPYBIND11_ABSEIL_SRCS-y += $(LIBPYBIND11_ABSEIL_SRC)/pybind11_abseil/ok_status_singleton_pyinit_google3.cc +LIBPYBIND11_ABSEIL_SRCS-y += $(LIBPYBIND11_ABSEIL_SRC)/pybind11_abseil/status_py_extension_stub.cc +LIBPYBIND11_ABSEIL_SRCS-y += $(LIBPYBIND11_ABSEIL_SRC)/pybind11_abseil/status_pyinit_google3.cc +LIBPYBIND11_ABSEIL_SRCS-y += $(LIBPYBIND11_ABSEIL_SRC)/pybind11_abseil/compat/status_from_core_py_exc.cc +LIBPYBIND11_ABSEIL_SRCS-y += $(LIBPYBIND11_ABSEIL_SRC)/pybind11_abseil/compat/py_base_utilities.cc +LIBPYBIND11_ABSEIL_SRCS-y += $(LIBPYBIND11_ABSEIL_SRC)/pybind11_abseil/compat/status_from_py_exc.cc + +################################################################################ +# Root filesystem +################################################################################ + +ifeq ($(CONFIG_LIBPYBIND11_ABSEIL),y) +# Install pybind11_abseil lib into main python rootfs & cleanup non-python files +$(PYTHON_ROOTFS)/.pybind11_abseil_done: $(PYTHON_ROOTFS)/.keep + mkdir $(PYTHON_ROOTFS)/lib/python$(LIBPYTHON3_VERSION)/site-packages/pybind11_abseil; \ + find "$(LIBPYBIND11_ABSEIL_BASE)/importfix/pybind11_abseil" -mindepth 1 -maxdepth 1 | xargs $(CP) -rp -t $(PYTHON_ROOTFS)/lib/python$(LIBPYTHON3_VERSION)/site-packages/pybind11_abseil; \ + touch $@ + +# Add pybind11_abseil rootfs to main python +python-rootfs: $(PYTHON_ROOTFS)/.pybind11_abseil_done + +endif diff --git a/README.md b/README.md new file mode 100644 index 0000000..0d3f35c --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +# lib-pybind11_abseil + +## 微库提供的功能与说明 + +提供一系列的适配接口,将abseil-cpp库与Pybind11生成的Python绑定相连接。通过这些接口,开发者能够轻松地将Abseil库提供的各种类和函数导入到Python环境中,使得Python脚本能够直接与C++中定义的数据结构进行交互。 + +pybind11_abseil支持的详细特性可见其官方文档: https://github.com/pybind/pybind11_abseil + +本仓库将pybind11_abseil作为微库移植到TenonOS,目录结构如下: + +```powershell +. +├── Config.uk ------ 维护微库配置 +├── Makefile.uk ------ 用于微库构建 +├── importfix ------ 存放C/C++模块对应的Python wrapper +└── patches ------ 维护对pybind11_abseil源码的修改 +``` + +### 关于 importfix + +文件对应 modules_config.c 中的_PyImport_Inittab,所列 entry 取决于 pip 下载对应的包所包含的 so 文件 + +文件内容参考 lib-python_numpy + +## 编译构建与配置说明 + +依赖微库: + +* `lib-absl` diff --git a/importfix/pybind11_abseil/ok_status_singleton.py b/importfix/pybind11_abseil/ok_status_singleton.py new file mode 100644 index 0000000..84696a7 --- /dev/null +++ b/importfix/pybind11_abseil/ok_status_singleton.py @@ -0,0 +1 @@ +from pybind11_abseil_ok_status_singleton import * diff --git a/importfix/pybind11_abseil/status.py b/importfix/pybind11_abseil/status.py new file mode 100644 index 0000000..a56ee61 --- /dev/null +++ b/importfix/pybind11_abseil/status.py @@ -0,0 +1 @@ +from pybind11_abseil_status import * diff --git a/patches/.keep b/patches/.keep new file mode 100644 index 0000000..e69de29 -- Gitee