diff --git a/BUILD b/BUILD index ee31cd86..89b8162a 100644 --- a/BUILD +++ b/BUILD @@ -54,9 +54,9 @@ cc_library( "src/google/protobuf/stubs/time.cc", "src/google/protobuf/wire_format_lite.cc", ], + hdrs = glob(["src/google/protobuf/**/*.h"]), copts = COPTS, includes = ["src/"], - hdrs = glob(["src/google/protobuf/**/*.h"]), linkopts = LINK_OPTS, visibility = ["//visibility:public"], ) @@ -156,9 +156,9 @@ cc_proto_library( name = "cc_wkt_protos", srcs = WELL_KNOWN_PROTOS, include = "src", + default_runtime = ":protobuf", internal_bootstrap_hack = 1, protoc = ":protoc", - default_runtime = ":protobuf", visibility = ["//visibility:public"], ) @@ -336,8 +336,8 @@ cc_proto_library( name = "cc_test_protos", srcs = LITE_TEST_PROTOS + TEST_PROTOS, include = "src", - protoc = ":protoc", default_runtime = ":protobuf", + protoc = ":protoc", deps = [":cc_wkt_protos"], ) @@ -509,15 +509,66 @@ internal_copied_filegroup( include = "python", ) +cc_binary( + name = "internal/_api_implementation.so", + srcs = ["python/google/protobuf/internal/api_implementation.cc"], + copts = COPTS + [ + "-DPYTHON_PROTO2_CPP_IMPL_V2", + ], + linkshared = 1, + linkstatic = 1, + deps = select({ + "//conditions:default": [], + ":use_fast_cpp_protos": ["//util/python:python_headers"], + }), +) + +cc_binary( + name = "pyext/_message.so", + srcs = glob([ + "python/google/protobuf/pyext/*.cc", + "python/google/protobuf/pyext/*.h", + ]), + copts = COPTS + [ + "-DGOOGLE_PROTOBUF_HAS_ONEOF=1", + ], + includes = [ + "python/", + "src/", + ], + linkshared = 1, + linkstatic = 1, + deps = [ + ":protobuf", + ] + select({ + "//conditions:default": [], + ":use_fast_cpp_protos": ["//util/python:python_headers"], + }), +) + +config_setting( + name = "use_fast_cpp_protos", + values = { + "define": "use_fast_cpp_protos=true", + }, +) + py_proto_library( name = "protobuf_python", srcs = WELL_KNOWN_PROTOS, - srcs_version = "PY2AND3", include = "src", + data = select({ + "//conditions:default": [], + ":use_fast_cpp_protos": [ + ":internal/_api_implementation.so", + ":pyext/_message.so", + ], + }), + default_runtime = "", protoc = ":protoc", py_extra_srcs = [":python_srcs"], py_libs = ["//external:six"], - default_runtime = "", + srcs_version = "PY2AND3", visibility = ["//visibility:public"], ) @@ -536,9 +587,9 @@ py_proto_library( name = "python_common_test_protos", srcs = LITE_TEST_PROTOS + TEST_PROTOS, include = "src", + default_runtime = "", protoc = ":protoc", deps = [":protobuf_python"], - default_runtime = "", ) py_proto_library( @@ -548,9 +599,9 @@ py_proto_library( "python/google/protobuf/internal/import_test_package/*.proto", ]), include = "python", + default_runtime = ":protobuf_python", protoc = ":protoc", deps = [":python_common_test_protos"], - default_runtime = ":protobuf_python", ) py_library( diff --git a/python/google/protobuf/pyext/extension_dict.h b/python/google/protobuf/pyext/extension_dict.h index 7e1049f1..7a66cb23 100644 --- a/python/google/protobuf/pyext/extension_dict.h +++ b/python/google/protobuf/pyext/extension_dict.h @@ -47,7 +47,11 @@ namespace protobuf { class Message; class FieldDescriptor; +#ifdef _SHARED_PTR_H +using std::shared_ptr; +#else using internal::shared_ptr; +#endif namespace python { diff --git a/python/google/protobuf/pyext/message.h b/python/google/protobuf/pyext/message.h index 1ff82e2f..94de4551 100644 --- a/python/google/protobuf/pyext/message.h +++ b/python/google/protobuf/pyext/message.h @@ -52,7 +52,12 @@ class Descriptor; class DescriptorPool; class MessageFactory; +#ifdef _SHARED_PTR_H +using std::shared_ptr; +using std::string; +#else using internal::shared_ptr; +#endif namespace python { diff --git a/python/google/protobuf/pyext/message_map_container.h b/python/google/protobuf/pyext/message_map_container.h index 8286ba8a..4f6cb26a 100644 --- a/python/google/protobuf/pyext/message_map_container.h +++ b/python/google/protobuf/pyext/message_map_container.h @@ -45,7 +45,11 @@ namespace protobuf { class Message; +#ifdef _SHARED_PTR_H +using std::shared_ptr; +#else using internal::shared_ptr; +#endif namespace python { diff --git a/python/google/protobuf/pyext/repeated_composite_container.h b/python/google/protobuf/pyext/repeated_composite_container.h index 3013aba9..58d37b02 100644 --- a/python/google/protobuf/pyext/repeated_composite_container.h +++ b/python/google/protobuf/pyext/repeated_composite_container.h @@ -49,7 +49,11 @@ namespace protobuf { class FieldDescriptor; class Message; +#ifdef _SHARED_PTR_H +using std::shared_ptr; +#else using internal::shared_ptr; +#endif namespace python { diff --git a/python/google/protobuf/pyext/repeated_scalar_container.h b/python/google/protobuf/pyext/repeated_scalar_container.h index 5dfa21e0..555e621c 100644 --- a/python/google/protobuf/pyext/repeated_scalar_container.h +++ b/python/google/protobuf/pyext/repeated_scalar_container.h @@ -48,7 +48,11 @@ namespace protobuf { class Message; +#ifdef _SHARED_PTR_H +using std::shared_ptr; +#else using internal::shared_ptr; +#endif namespace python { diff --git a/python/google/protobuf/pyext/scalar_map_container.h b/python/google/protobuf/pyext/scalar_map_container.h index aded8d49..4d663b88 100644 --- a/python/google/protobuf/pyext/scalar_map_container.h +++ b/python/google/protobuf/pyext/scalar_map_container.h @@ -45,7 +45,11 @@ namespace protobuf { class Message; +#ifdef _SHARED_PTR_H +using std::shared_ptr; +#else using internal::shared_ptr; +#endif namespace python { diff --git a/util/python/BUILD b/util/python/BUILD new file mode 100644 index 00000000..358c381c --- /dev/null +++ b/util/python/BUILD @@ -0,0 +1,8 @@ +# This is a placeholder for python headers. Projects needing to use +# fast cpp protos in protobuf's python interface should build with +# --define=use_fast_cpp_protos=true, and in addition, provide +# //util/python:python_headers dependency that in turn provides Python.h. +cc_library( + name = "python_headers", + visibility = ["//visibility:public"], +)