Skip to content

Commit 33645aa

Browse files
committed
add wedpr-python-gateway-sdk
1 parent 1692e6b commit 33645aa

File tree

9 files changed

+267
-78
lines changed

9 files changed

+267
-78
lines changed

cpp/cmake/TargetSettings.cmake

+2-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ set(WEDPR_TRANSPORT_SDK_TARGET wedpr-transport-sdk)
138138

139139
# ==== the swig wrapper =====
140140
set(WEDPR_PYTHON_TRANSPORT "wedpr_python_transport")
141-
set(WEDPR_PYTHON_TRANSPORT_DIR ${PROJECT_BINARY_DIR}/python/${WEDPR_PYTHON_TRANSPORT})
141+
set(WEDPR_PYTHON_TRANSPORT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/python/generated/${WEDPR_PYTHON_TRANSPORT})
142+
set(WEDPR_PYTHON_TRANSPORT_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/wedpr-transport/sdk-wrapper/python/bindings/libs)
142143

143144
set(WEDPR_JAVA_TRANSPORT "wedpr_java_transport_jni")
144145
set(WEDPR_JAVA_TRANSPORT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/java/generated/${WEDPR_JAVA_TRANSPORT})

cpp/cmake/python.cmake

+7-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,13 @@ if(UNIX AND NOT APPLE)
1919
endif()
2020

2121
# Find Python 3
22-
find_package(Python3 REQUIRED COMPONENTS Interpreter Development.Module)
22+
find_package(Python REQUIRED COMPONENTS Interpreter Development)
23+
message("Python_FOUND:${Python_FOUND}")
24+
message("Python_VERSION:${Python_VERSION}")
25+
message("Python_Development_FOUND:${Python_Development_FOUND}")
26+
message("Python_LIBRARIES:${Python_LIBRARIES}")
27+
message("Python_INCLUDE_DIRS:${Python_INCLUDE_DIRS}")
28+
2329
list(APPEND CMAKE_SWIG_FLAGS "-py3" "-DPY3")
2430

2531
function(search_python_module)
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,49 @@
1-
file(GLOB_RECURSE SRCS *.i)
2-
set_source_files_properties(${SRCS} PROPERTIES CPLUSPLUS ON)
1+
option(AUTO_GENERATE "Auto generate the targes" OFF)
2+
if(AUTO_GENERATE)
3+
file(GLOB_RECURSE SRCS *.i)
4+
set_source_files_properties(${SRCS} PROPERTIES CPLUSPLUS ON)
35

4-
swig_add_library(
5-
${WEDPR_PYTHON_TRANSPORT}
6-
TYPE MODULE
7-
LANGUAGE python
8-
OUTPUT_DIR ${WEDPR_PYTHON_TRANSPORT_DIR}
9-
SOURCES ${SRCS}
10-
)
11-
12-
message("#### Python3_INCLUDE_DIRS: ${Python3_INCLUDE_DIRS}")
13-
target_include_directories(
14-
${WEDPR_PYTHON_TRANSPORT}
15-
PRIVATE
16-
../include
17-
${Python3_INCLUDE_DIRS}
18-
)
19-
set_property(TARGET ${WEDPR_PYTHON_TRANSPORT} PROPERTY SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON)
6+
file(MAKE_DIRECTORY ${WEDPR_PYTHON_TRANSPORT_DIR})
7+
file(MAKE_DIRECTORY ${WEDPR_PYTHON_TRANSPORT_LIB_DIR})
8+
9+
swig_add_library(
10+
${WEDPR_PYTHON_TRANSPORT}
11+
TYPE MODULE
12+
LANGUAGE python
13+
OUTPUT_DIR ${WEDPR_PYTHON_TRANSPORT_DIR}
14+
SOURCES ${SRCS}
15+
)
16+
set_property(TARGET ${WEDPR_PYTHON_TRANSPORT} PROPERTY SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON)
17+
else()
18+
file(GLOB_RECURSE SRCS src/*.cxx)
19+
add_library(${WEDPR_PYTHON_TRANSPORT} SHARED ${SRCS})
20+
endif()
21+
22+
target_include_directories(${WEDPR_PYTHON_TRANSPORT} PRIVATE ${Python_INCLUDE_DIRS})
2023

2124
# note: macOS is APPLE and also UNIX !
2225
if(APPLE)
2326
set_property(TARGET ${WEDPR_PYTHON_TRANSPORT} APPEND PROPERTY
2427
LINK_FLAGS "-flat_namespace -undefined suppress"
2528
)
26-
set_target_properties(${WEDPR_PYTHON_TRANSPORT} PROPERTIES
27-
SUFFIX ".so"
28-
INSTALL_RPATH "@loader_path;@loader_path/../../${WEDPR_PYTHON_TRANSPORT}/.libs"
29+
set_target_properties(${WEDPR_PYTHON_TRANSPORT} PROPERTIES
30+
INSTALL_RPATH "@loader_path;@loader_path/../../${WEDPR_PYTHON_TRANSPORT}/.libs"
2931
)
3032
elseif(UNIX)
3133
set_target_properties(${WEDPR_PYTHON_TRANSPORT} PROPERTIES
3234
INSTALL_RPATH "$ORIGIN:$ORIGIN/../../${WEDPR_PYTHON_TRANSPORT}/.libs"
3335
)
3436
endif()
35-
target_link_libraries(${WEDPR_PYTHON_TRANSPORT} PRIVATE ${WEDPR_TRANSPORT_SDK_TARGET})
36-
37-
SET(LIBRARY_OUTPUT_PATH ${WEDPR_PYTHON_TRANSPORT_DIR}/)
38-
3937
# Variable PYTHON_LIBRARIES can contains keyword `optimized`
4038
# which won't be interpreted inside a generator expression.
4139
# i.e. we can't use: $<$<PLATFORM_ID:Windows>:${PYTHON_LIBRARIES}>
4240
# see: https://cmake.org/cmake/help/git-stage/command/target_link_libraries.html#command:target_link_libraries
4341
if(MSVC)
4442
target_link_libraries(${WEDPR_PYTHON_TRANSPORT} PRIVATE ${Python3_LIBRARIES})
43+
else()
44+
target_link_libraries(${WEDPR_PYTHON_TRANSPORT} PRIVATE ${WEDPR_TRANSPORT_SDK_TARGET} ${Python_LIBRARIES})
4545
endif()
46-
47-
# Configure setup.py and copy to output directory
48-
file(GENERATE OUTPUT ${WEDPR_PYTHON_TRANSPORT_DIR}/__init__.py CONTENT "__version__ = \"${PYTHON_TOOLKIT_VERSION}\"\n")
49-
set(SETUP_PY_IN ${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in)
50-
set(SETUP_PY_OUT ${WEDPR_PYTHON_TRANSPORT_DIR}/setup.py)
51-
configure_file(${SETUP_PY_IN} ${SETUP_PY_OUT})
46+
SET(LIBRARY_OUTPUT_PATH ${WEDPR_PYTHON_TRANSPORT_LIB_DIR})
5247

5348
message(STATUS "CMAKE_INSTALL_INCLUDEDIR => ${CMAKE_INSTALL_INCLUDEDIR}")
5449
message(STATUS "CMAKE_CURRENT_SOURCE_DIR => ${CMAKE_CURRENT_SOURCE_DIR}")

cpp/wedpr-transport/sdk-wrapper/python/bindings/transport/__init__.py

Whitespace-only changes.

cpp/wedpr-transport/sdk-wrapper/python/bindings/utils/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# -*- coding: utf-8 -*-
2+
3+
import platform
4+
import os
5+
from enum import Enum
6+
import sys
7+
import ctypes
8+
9+
10+
class OSType(Enum):
11+
MACOS_X64 = 1
12+
MACOS_ARM64 = 2
13+
WINDOWS = 3
14+
LINUX_X64 = 4
15+
LINUX_ARM64 = 5
16+
17+
18+
class ArchType(Enum):
19+
ARM64 = 1
20+
X86_64 = 2
21+
22+
23+
class LibLoader:
24+
# the library information
25+
TRANSPORT_LIB_PATH = "libs"
26+
TRANSPORT_LIB_NAME = "wedpr_python_transport"
27+
LIB_PREFIX = "lib"
28+
MACOS_LIB_POSTFIX = "dylib"
29+
WINDOWS_LIB_POSTFIX = "dll"
30+
LINUX_LIB_PORSTFIX = "so"
31+
# the OS name
32+
MACOS_OS = "darwin"
33+
WINDOWS_OS = "windows"
34+
LINUX_OS = "linux"
35+
36+
AARCH64 = "aarch64"
37+
ARM64 = "arm64"
38+
X86_64 = "x86_64"
39+
40+
@staticmethod
41+
def get_arch_type():
42+
arch_type = platform.machine().lower()
43+
if LibLoader.AARCH64 in arch_type or LibLoader.ARM64 in arch_type:
44+
return ArchType.ARM64
45+
if LibLoader.X86_64 in arch_type:
46+
return ArchType.X86_64
47+
raise Exception(f"Unsupported arch type: {arch_type}")
48+
49+
@staticmethod
50+
def get_os_type():
51+
os_type = platform.system().lower()
52+
arch_type = LibLoader.get_arch_type()
53+
if LibLoader.MACOS_OS in os_type:
54+
if arch_type == ArchType.ARM64:
55+
return OSType.MACOS_ARM64
56+
else:
57+
return OSType.MACOS_X64
58+
if LibLoader.LINUX_OS in os_type:
59+
if arch_type == ArchType.ARM64:
60+
return OSType.LINUX_ARM64
61+
else:
62+
return OSType.LINUX_X64
63+
if LibLoader.WINDOWS_OS in os_type:
64+
return OSType.WINDOWS
65+
raise Exception(f"Unsupported os {os_type}, arch: {arch_type}")
66+
67+
@staticmethod
68+
def get_lib_name():
69+
os_type = LibLoader.get_os_type()
70+
if os_type == OSType.WINDOWS:
71+
return "{}{}.{}".format(LibLoader.LIB_PREFIX, LibLoader.TRANSPORT_LIB_NAME, LibLoader.WINDOWS_LIB_POSTFIX)
72+
if os_type == OSType.MACOS_ARM64:
73+
return "{}{}-arm64.{}".format(LibLoader.LIB_PREFIX, LibLoader.TRANSPORT_LIB_NAME, LibLoader.MACOS_LIB_POSTFIX)
74+
if os_type == OSType.MACOS_X64:
75+
return "{}{}.{}".format(LibLoader.LIB_PREFIX, LibLoader.TRANSPORT_LIB_NAME, LibLoader.MACOS_LIB_POSTFIX)
76+
if os_type == OSType.LINUX_ARM64:
77+
return "{}{}.{}-arm64".format(LibLoader.LIB_PREFIX, LibLoader.TRANSPORT_LIB_NAME, LibLoader.LINUX_LIB_PORSTFIX)
78+
if os_type == OSType.LINUX_X64:
79+
return "{}{}.{}".format(LibLoader.LIB_PREFIX, LibLoader.TRANSPORT_LIB_NAME, LibLoader.LINUX_LIB_PORSTFIX)
80+
raise Exception(
81+
f"get_lib_name failed for not support the os_type: {os_type}")
82+
83+
@staticmethod
84+
def load_lib():
85+
lib_path = os.path.join(
86+
LibLoader.TRANSPORT_LIB_PATH, LibLoader.get_lib_name())
87+
print(f"#### lib_path: {lib_path}")
88+
lib = ctypes.cdll.LoadLibrary(lib_path)
89+
return lib
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# -*- coding: utf-8 -*-
2+
import unittest
3+
4+
5+
class TestLibLoader(unittest.TestCase):
6+
def test_load_lib(self):
7+
from utils.lib_loader import LibLoader
8+
_wedpr_python_transport = LibLoader.load_lib()
9+
10+
11+
if __name__ == '__main__':
12+
unittest.main()

cpp/wedpr-transport/sdk-wrapper/python/setup.py.in

-35
This file was deleted.

0 commit comments

Comments
 (0)