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
|
||||
improve the overall protobuf Python performance.
|
||||
|
||||
To use the C++ implementation, you need to:
|
||||
1) Install the C++ protobuf runtime library, please see instructions in the
|
||||
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.
|
||||
To use the C++ implementation, you need to install the C++ protobuf runtime
|
||||
library, please see instructions in the parent directory.
|
||||
|
@ -157,13 +157,28 @@ class test_conformance(_build_py):
|
||||
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__':
|
||||
ext_module_list = []
|
||||
cpp_impl = '--cpp_implementation'
|
||||
warnings_as_errors = '--warnings_as_errors'
|
||||
if cpp_impl in sys.argv:
|
||||
sys.argv.remove(cpp_impl)
|
||||
if get_option_from_sys_argv('--cpp_implementation'):
|
||||
# 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']
|
||||
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'
|
||||
|
||||
if "clang" in os.popen('$CC --version 2> /dev/null').read():
|
||||
@ -174,16 +189,22 @@ if __name__ == '__main__':
|
||||
sys.argv.remove(warnings_as_errors)
|
||||
|
||||
# C++ implementation extension
|
||||
ext_module_list.append(
|
||||
ext_module_list.extend([
|
||||
Extension(
|
||||
"google.protobuf.pyext._message",
|
||||
glob.glob('google/protobuf/pyext/*.cc'),
|
||||
include_dirs=[".", "../src"],
|
||||
libraries=['protobuf'],
|
||||
libraries=libraries,
|
||||
extra_objects=extra_objects,
|
||||
library_dirs=['../src/.libs'],
|
||||
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'
|
||||
|
||||
# Keep this list of dependencies in sync with tox.ini.
|
||||
|
Loading…
Reference in New Issue
Block a user