diff options
| author | ruki <[email protected]> | 2021-12-23 22:37:09 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-12-23 22:37:09 +0800 |
| commit | 65e93fa30d57ad5823cbfbb7b70df621a5cce4fa (patch) | |
| tree | 535318924618aa71d38d28e4fa78fa40bcb46583 | |
| parent | 0a65e25c02c36764ba09e5051565d41a137bd0b5 (diff) | |
add python soabi
| -rw-r--r-- | tests/projects/pybind/example_with_soabi/src/example.cpp | 38 | ||||
| -rw-r--r-- | tests/projects/pybind/example_with_soabi/xmake.lua | 8 | ||||
| -rw-r--r-- | xmake/rules/python/xmake.lua | 9 |
3 files changed, 55 insertions, 0 deletions
diff --git a/tests/projects/pybind/example_with_soabi/src/example.cpp b/tests/projects/pybind/example_with_soabi/src/example.cpp new file mode 100644 index 000000000..cb1bad194 --- /dev/null +++ b/tests/projects/pybind/example_with_soabi/src/example.cpp @@ -0,0 +1,38 @@ +#include <pybind11/pybind11.h> + +#define STRINGIFY(x) #x +#define MACRO_STRINGIFY(x) STRINGIFY(x) + +int add(int i, int j) { + return i + j; +} + +namespace py = pybind11; + +PYBIND11_MODULE(example, m) { + m.doc() = R"pbdoc( + Pybind11 example plugin + ----------------------- + .. currentmodule:: example + .. autosummary:: + :toctree: _generate + add + subtract + )pbdoc"; + + m.def("add", &add, R"pbdoc( + Add two numbers + Some other explanation about the add function. + )pbdoc"); + + m.def("subtract", [](int i, int j) { return i - j; }, R"pbdoc( + Subtract two numbers + Some other explanation about the subtract function. + )pbdoc"); + +#ifdef VERSION_INFO + m.attr("__version__") = MACRO_STRINGIFY(VERSION_INFO); +#else + m.attr("__version__") = "dev"; +#endif +} diff --git a/tests/projects/pybind/example_with_soabi/xmake.lua b/tests/projects/pybind/example_with_soabi/xmake.lua new file mode 100644 index 000000000..12d8ad334 --- /dev/null +++ b/tests/projects/pybind/example_with_soabi/xmake.lua @@ -0,0 +1,8 @@ +add_rules("mode.release", "mode.debug") +add_requires("pybind11") + +target("example") + add_rules("python.library", {soabi = true}) + add_files("src/*.cpp") + add_packages("pybind11") + set_languages("c++11") diff --git a/xmake/rules/python/xmake.lua b/xmake/rules/python/xmake.lua index 7af9b434b..823495485 100644 --- a/xmake/rules/python/xmake.lua +++ b/xmake/rules/python/xmake.lua @@ -25,6 +25,15 @@ rule("python.library") target:set("prefixname", "_") local soabi = target:extraconf("rules", "python.library", "soabi") if soabi then + import("lib.detect.find_tool") + local python = assert(find_tool("python3"), "python not found!") + local result = try { function() return os.iorunv(python.program, {"-c", "import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX'))"}) end} + if result then + result = result:trim() + if result ~= "None" then + target:set("extension", result) + end + end else if target:is_plat("windows") then target:set("extension", ".pyd") |
