Linking the cpp implementation extension statically with libprotobuf
This commit is contained in:
parent
81eb84c029
commit
cf828deb9b
@ -123,13 +123,5 @@ C++ Implementation
|
|||||||
The C++ implementation for Python messages is built as a Python extension to
|
The C++ implementation for Python messages is built as a Python extension to
|
||||||
improve the overall protobuf Python performance.
|
improve the overall protobuf Python performance.
|
||||||
|
|
||||||
To use the C++ implementation, you need to:
|
To use the C++ implementation, you need to install the C++ protobuf runtime
|
||||||
1) Install the C++ protobuf runtime library, please see instructions in the
|
library, please see instructions in the parent directory.
|
||||||
parent directory.
|
|
||||||
2) Export an environment variable:
|
|
||||||
|
|
||||||
$ export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp
|
|
||||||
|
|
||||||
You must set this variable at runtime, before running your program, otherwise
|
|
||||||
the pure-Python implementation will be used. In a future release, we will
|
|
||||||
change the default so that C++ implementation is used whenever it is available.
|
|
||||||
|
@ -157,13 +157,28 @@ class test_conformance(_build_py):
|
|||||||
status = subprocess.check_call(cmd, shell=True)
|
status = subprocess.check_call(cmd, shell=True)
|
||||||
|
|
||||||
|
|
||||||
|
def get_option_from_sys_argv(option_str):
|
||||||
|
if option_str in sys.argv:
|
||||||
|
sys.argv.remove(option_str)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
ext_module_list = []
|
ext_module_list = []
|
||||||
cpp_impl = '--cpp_implementation'
|
|
||||||
warnings_as_errors = '--warnings_as_errors'
|
warnings_as_errors = '--warnings_as_errors'
|
||||||
if cpp_impl in sys.argv:
|
if get_option_from_sys_argv('--cpp_implementation'):
|
||||||
sys.argv.remove(cpp_impl)
|
# Link libprotobuf.a and libprotobuf-lite.a statically with the
|
||||||
|
# extension. Note that those libraries have to be compiled with
|
||||||
|
# -fPIC for this to work.
|
||||||
|
compile_static_ext = get_option_from_sys_argv('--compile_static_extension')
|
||||||
extra_compile_args = ['-Wno-write-strings', '-Wno-invalid-offsetof']
|
extra_compile_args = ['-Wno-write-strings', '-Wno-invalid-offsetof']
|
||||||
|
libraries = ['protobuf']
|
||||||
|
extra_objects = None
|
||||||
|
if compile_static_ext:
|
||||||
|
libraries = None
|
||||||
|
extra_objects = ['../src/.libs/libprotobuf.a',
|
||||||
|
'../src/.libs/libprotobuf-lite.a']
|
||||||
test_conformance.target = 'test_python_cpp'
|
test_conformance.target = 'test_python_cpp'
|
||||||
|
|
||||||
if "clang" in os.popen('$CC --version 2> /dev/null').read():
|
if "clang" in os.popen('$CC --version 2> /dev/null').read():
|
||||||
@ -174,16 +189,22 @@ if __name__ == '__main__':
|
|||||||
sys.argv.remove(warnings_as_errors)
|
sys.argv.remove(warnings_as_errors)
|
||||||
|
|
||||||
# C++ implementation extension
|
# C++ implementation extension
|
||||||
ext_module_list.append(
|
ext_module_list.extend([
|
||||||
Extension(
|
Extension(
|
||||||
"google.protobuf.pyext._message",
|
"google.protobuf.pyext._message",
|
||||||
glob.glob('google/protobuf/pyext/*.cc'),
|
glob.glob('google/protobuf/pyext/*.cc'),
|
||||||
include_dirs=[".", "../src"],
|
include_dirs=[".", "../src"],
|
||||||
libraries=['protobuf'],
|
libraries=libraries,
|
||||||
|
extra_objects=extra_objects,
|
||||||
library_dirs=['../src/.libs'],
|
library_dirs=['../src/.libs'],
|
||||||
extra_compile_args=extra_compile_args,
|
extra_compile_args=extra_compile_args,
|
||||||
)
|
),
|
||||||
)
|
Extension(
|
||||||
|
"google.protobuf.internal._api_implementation",
|
||||||
|
glob.glob('google/protobuf/internal/api_implementation.cc'),
|
||||||
|
extra_compile_args=['-DPYTHON_PROTO2_CPP_IMPL_V2'],
|
||||||
|
),
|
||||||
|
])
|
||||||
os.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] = 'cpp'
|
os.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] = 'cpp'
|
||||||
|
|
||||||
# Keep this list of dependencies in sync with tox.ini.
|
# Keep this list of dependencies in sync with tox.ini.
|
||||||
|
Loading…
Reference in New Issue
Block a user