From 71165bdec129a2f52b9fc20e5a18338dfc413f11 Mon Sep 17 00:00:00 2001 From: Aki Date: Sat, 16 Oct 2021 00:45:25 +0200 Subject: Created stub python module for hwd communication library --- .gitignore | 3 +++ CMakeLists.txt | 15 +++++++++++++++ setup.py | 40 ++++++++++++++++++++++++++++++++++++++++ src/hwdmodule.cpp | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 90 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 setup.py create mode 100644 src/hwdmodule.cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..02bbf52 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +build/ +dist/ +*.egg-info diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..a7c821f --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 3.18) +project(hwd_python CXX) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_EXTENSIONS No) +find_package(Hwd REQUIRED) +find_package(Python COMPONENTS Development.Module) +Python_add_library(${PROJECT_NAME} MODULE + src/hwdmodule.cpp + ) +target_link_libraries(${PROJECT_NAME} + PRIVATE Hwd::library + ) +set_target_properties(${PROJECT_NAME} + PROPERTIES OUTPUT_NAME hwd + ) diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..b6e3626 --- /dev/null +++ b/setup.py @@ -0,0 +1,40 @@ +import os +import pathlib + +from setuptools import setup +from setuptools import Extension +from setuptools.command.build_ext import build_ext + + +class CMakeExtension(Extension): + def __init__(self, name): + super().__init__(name, sources=[]) + + +class CMakeBuild(build_ext): + def run(self): + for ext in self.extensions: + self.build_cmake(ext) + super().run() + + def build_cmake(self, ext): + cwd = pathlib.Path().absolute() + build_temp = pathlib.Path(self.build_temp) + extdir = pathlib.Path(self.get_ext_fullpath(ext.name)) + for dir in (build_temp, extdir): + dir.mkdir(parents=True, exist_ok=True) + cmake_args = [ + f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir.parent.absolute()}", + ] + os.chdir(str(build_temp)) + self.spawn(["cmake", str(cwd)] + cmake_args) + if not self.dry_run: + self.spawn(["cmake", "--build", "."]) + os.chdir(str(cwd)) + + +setup( + name="hwd", + ext_modules=[CMakeExtension("hwd")], + cmdclass={"build_ext": CMakeBuild}, +) diff --git a/src/hwdmodule.cpp b/src/hwdmodule.cpp new file mode 100644 index 0000000..d0565df --- /dev/null +++ b/src/hwdmodule.cpp @@ -0,0 +1,32 @@ +#define PY_SSIZE_T_CLEAN +#include + +#include + + +static PyObject * hwd_stop_server(PyObject * self, PyObject * args) +{ + hwd::stop_server(); + Py_RETURN_NONE; +} + + +static PyMethodDef HwdMethods[] = { + {"stop_server", hwd_stop_server, METH_VARARGS, "Shutdown daemon instance"}, + {NULL, NULL, 0, NULL} +}; + + +static struct PyModuleDef hwdmodule = { + PyModuleDef_HEAD_INIT, + "hwd", + NULL, + -1, + HwdMethods +}; + + +PyMODINIT_FUNC PyInit_hwd(void) +{ + return PyModule_Create(&hwdmodule); +} -- cgit v1.1