Merge branch 'master' into java1.26

pull/21512/head
Eric Gribkoff 5 years ago committed by GitHub
commit 23fb8d4a9a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      .clang_complete
  2. 2
      .github/ISSUE_TEMPLATE/bug_report.md
  3. 2
      .github/ISSUE_TEMPLATE/cleanup_request.md
  4. 2
      .github/ISSUE_TEMPLATE/feature_request.md
  5. 2
      .github/pull_request_template.md
  6. 6
      .gitmodules
  7. 1
      .pylintrc
  8. 35
      .yapfignore
  9. 65
      BUILD
  10. 273
      BUILD.gn
  11. 110
      BUILDING.md
  12. 4187
      CMakeLists.txt
  13. 5016
      Makefile
  14. 3
      PYTHON-MANIFEST.in
  15. 22
      bazel/grpc_build_system.bzl
  16. 40
      bazel/grpc_deps.bzl
  17. 10
      bazel/grpc_python_deps.bzl
  18. 102
      build.yaml
  19. 12
      cmake/abseil-cpp.cmake
  20. 1
      cmake/gRPCConfig.cmake.in
  21. 2
      cmake/msvc_static_runtime.cmake
  22. 18
      cmake/protobuf.cmake
  23. 8
      cmake/ssl.cmake
  24. 668
      config.m4
  25. 678
      config.w32
  26. 12
      doc/PROTOCOL-HTTP2.md
  27. 2
      doc/connection-backoff-interop-test-description.md
  28. 10
      doc/grpc_release_schedule.md
  29. 35
      doc/python/server_reflection.md
  30. 54
      examples/cpp/helloworld/CMakeLists.txt
  31. 6
      examples/cpp/helloworld/README.md
  32. 245
      examples/cpp/helloworld/cmake_externalproject/CMakeLists.txt
  33. 29
      examples/cpp/helloworld/greeter_client.cc
  34. 15
      examples/python/auth/customized_auth_client.py
  35. 12
      examples/python/auth/customized_auth_server.py
  36. 2
      examples/python/cancellation/BUILD.bazel
  37. 40
      examples/python/cancellation/client.py
  38. 15
      examples/python/cancellation/server.py
  39. 12
      examples/python/cancellation/test/_cancellation_example_test.py
  40. 33
      examples/python/compression/client.py
  41. 40
      examples/python/compression/server.py
  42. 6
      examples/python/compression/test/compression_example_test.py
  43. 24
      examples/python/data_transmission/client.py
  44. 4
      examples/python/data_transmission/server.py
  45. 11
      examples/python/debug/debug_server.py
  46. 11
      examples/python/debug/get_stats.py
  47. 22
      examples/python/debug/send_message.py
  48. 4
      examples/python/debug/test/_debug_example_test.py
  49. 13
      examples/python/errors/server.py
  50. 14
      examples/python/helloworld/greeter_client_with_options.py
  51. 7
      examples/python/interceptors/headers/generic_client_interceptor.py
  52. 5
      examples/python/interceptors/headers/greeter_server.py
  53. 10
      examples/python/multiplex/multiplex_client.py
  54. 13
      examples/python/multiplex/multiplex_server.py
  55. 12
      examples/python/multiprocessing/client.py
  56. 10
      examples/python/multiprocessing/server.py
  57. 10
      examples/python/multiprocessing/test/_multiprocessing_example_test.py
  58. 9
      examples/python/route_guide/route_guide_client.py
  59. 13
      examples/python/route_guide/route_guide_server.py
  60. 17
      examples/python/wait_for_ready/wait_for_ready_example.py
  61. 29
      gRPC-C++.podspec
  62. 46
      gRPC-Core.podspec
  63. 1
      grpc.def
  64. 1044
      grpc.gemspec
  65. 1935
      grpc.gyp
  66. 42
      include/grpc/grpc_security.h
  67. 27
      include/grpc/grpc_security_constants.h
  68. 19
      include/grpc/impl/codegen/grpc_types.h
  69. 2
      include/grpc/impl/codegen/port_platform.h
  70. 5
      include/grpcpp/impl/codegen/callback_common.h
  71. 18
      include/grpcpp/impl/codegen/client_callback_impl.h
  72. 2
      include/grpcpp/impl/codegen/proto_utils.h
  73. 24
      include/grpcpp/impl/codegen/server_callback_impl.h
  74. 22
      include/grpcpp/impl/codegen/server_context_impl.h
  75. 12
      include/grpcpp/impl/codegen/sync_stream_impl.h
  76. 67
      include/grpcpp/security/alts_context.h
  77. 50
      include/grpcpp/security/alts_util.h
  78. 4
      include/grpcpp/security/credentials_impl.h
  79. 9
      include/grpcpp/security/tls_credentials_options.h
  80. 7
      include/grpcpp/server_impl.h
  81. 7
      include/grpcpp/test/default_reactor_test_peer.h
  82. 1042
      package.xml
  83. 6
      setup.cfg
  84. 8
      setup.py
  85. 6
      src/abseil-cpp/gen_build_yaml.py
  86. 386
      src/abseil-cpp/preprocessed_builds.yaml
  87. 118
      src/abseil-cpp/preprocessed_builds.yaml.gen.py
  88. 1
      src/android/test/interop/app/CMakeLists.txt
  89. 27
      src/benchmark/gen_build_yaml.py
  90. 3715
      src/boringssl/crypto_test_data.cc
  91. 1407
      src/boringssl/err_data.c
  92. 202
      src/boringssl/gen_build_yaml.py
  93. 228
      src/c-ares/gen_build_yaml.py
  94. 11
      src/core/ext/filters/client_channel/client_channel.cc
  95. 78
      src/core/ext/filters/client_channel/client_channel_channelz.cc
  96. 4
      src/core/ext/filters/client_channel/client_channel_channelz.h
  97. 2
      src/core/ext/filters/client_channel/http_connect_handshaker.cc
  98. 5
      src/core/ext/filters/client_channel/http_proxy.cc
  99. 7
      src/core/ext/filters/client_channel/lb_policy.cc
  100. 49
      src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc
  101. Some files were not shown because too many files have changed in this diff Show More

@ -6,7 +6,7 @@
-Isrc/core/ext/upb-generated
-Ithird_party/abseil-cpp
-Ithird_party/benchmark/include
-Ithird_party/boringssl/include
-Ithird_party/boringssl-with-bazel/src/include
-Ithird_party/cares
-Ithird_party/cares/cares
-Ithird_party/googletest

@ -2,7 +2,7 @@
name: Report a bug
about: Create a report to help us improve
labels: kind/bug, priority/P2
assignees: yashykt
assignees: donnadionne
---

@ -2,7 +2,7 @@
name: Request a cleanup
about: Suggest a cleanup in our repository
labels: kind/internal cleanup, priority/P2
assignees: yashykt
assignees: donnadionne
---

@ -2,7 +2,7 @@
name: Request a feature
about: Suggest an idea for this project
labels: kind/enhancement, priority/P2
assignees: yashykt
assignees: donnadionne
---

@ -8,4 +8,4 @@ If you know who should review your pull request, please remove the mentioning be
-->
@yashykt
@donnadionne

6
.gitmodules vendored

@ -15,9 +15,6 @@
[submodule "third_party/googletest"]
path = third_party/googletest
url = https://github.com/google/googletest.git
[submodule "third_party/boringssl"]
path = third_party/boringssl
url = https://github.com/google/boringssl.git
[submodule "third_party/benchmark"]
path = third_party/benchmark
url = https://github.com/google/benchmark
@ -46,3 +43,6 @@
[submodule "third_party/udpa"]
path = third_party/udpa
url = https://github.com/cncf/udpa.git
[submodule "third_party/libuv"]
path = third_party/libuv
url = https://github.com/libuv/libuv.git

@ -20,6 +20,7 @@ dummy-variables-rgx=^ignored_|^unused_
# be what works for us at the moment (excepting the dead-code-walking Beta
# API).
max-args=7
max-parents=8
[MISCELLANEOUS]

@ -0,0 +1,35 @@
# this file is auto-generated
*protoc_lib_deps.py
# no need to format protoc generated files
*_pb2*.py
# no need to format build-yaml generated files
*.gen.py
# generated files from a template
*test/cpp/naming/resolver_component_tests_runner.py
# No BUILD, .bzl files
*BUILD
*.bzl
*.bazelrc
# No other languages
*.bat
*.c
*.c++
*.cc
*.css
*.go
*.h
*.html
*.json
*.md
*.objc
*.php
*.proto
*.rb
*.sh
*.xml
*.yaml

65
BUILD

@ -16,7 +16,10 @@
licenses(["notice"])
exports_files(["LICENSE"])
exports_files([
"LICENSE",
"etc/roots.pem",
])
package(
default_visibility = ["//visibility:public"],
@ -70,8 +73,8 @@ config_setting(
)
config_setting(
name = "grpc_use_absl",
values = {"define": "GRPC_USE_ABSL=1"},
name = "grpc_disable_absl",
values = {"define": "GRPC_USE_ABSL=0"},
)
python_config_settings()
@ -428,6 +431,25 @@ grpc_cc_library(
],
)
grpc_cc_library(
name = "grpc++_alts",
srcs = [
"src/cpp/common/alts_context.cc",
"src/cpp/common/alts_util.cc",
],
hdrs = [
"include/grpcpp/security/alts_context.h",
"include/grpcpp/security/alts_util.h",
],
language = "c++",
standalone = True,
deps = [
"alts_upb",
"alts_util",
"grpc++",
],
)
grpc_cc_library(
name = "grpc_csharp_ext",
srcs = [
@ -541,6 +563,9 @@ grpc_cc_library(
"src/core/lib/gprpp/thd.h",
"src/core/lib/profiling/timers.h",
],
external_deps = [
"absl/strings",
],
language = "c++",
public_hdrs = GPR_PUBLIC_HDRS,
deps = [
@ -595,6 +620,9 @@ grpc_cc_library(
grpc_cc_library(
name = "inlined_vector",
external_deps = [
"absl/container:inlined_vector",
],
language = "c++",
public_hdrs = [
"src/core/lib/gprpp/inlined_vector.h",
@ -612,6 +640,9 @@ grpc_cc_library(
grpc_cc_library(
name = "optional",
external_deps = [
"absl/types:optional",
],
language = "c++",
public_hdrs = [
"src/core/lib/gprpp/optional.h",
@ -721,7 +752,6 @@ grpc_cc_library(
"src/core/lib/iomgr/is_epollexclusive_available.cc",
"src/core/lib/iomgr/load_file.cc",
"src/core/lib/iomgr/lockfree_event.cc",
"src/core/lib/iomgr/logical_thread.cc",
"src/core/lib/iomgr/polling_entity.cc",
"src/core/lib/iomgr/pollset.cc",
"src/core/lib/iomgr/pollset_custom.cc",
@ -773,9 +803,12 @@ grpc_cc_library(
"src/core/lib/iomgr/wakeup_fd_nospecial.cc",
"src/core/lib/iomgr/wakeup_fd_pipe.cc",
"src/core/lib/iomgr/wakeup_fd_posix.cc",
"src/core/lib/iomgr/work_serializer.cc",
"src/core/lib/json/json.cc",
"src/core/lib/json/json_reader.cc",
"src/core/lib/json/json_reader_new.cc",
"src/core/lib/json/json_writer.cc",
"src/core/lib/json/json_writer_new.cc",
"src/core/lib/slice/b64.cc",
"src/core/lib/slice/percent_encoding.cc",
"src/core/lib/slice/slice.cc",
@ -873,7 +906,6 @@ grpc_cc_library(
"src/core/lib/iomgr/is_epollexclusive_available.h",
"src/core/lib/iomgr/load_file.h",
"src/core/lib/iomgr/lockfree_event.h",
"src/core/lib/iomgr/logical_thread.h",
"src/core/lib/iomgr/nameser.h",
"src/core/lib/iomgr/polling_entity.h",
"src/core/lib/iomgr/pollset.h",
@ -916,6 +948,7 @@ grpc_cc_library(
"src/core/lib/iomgr/unix_sockets_posix.h",
"src/core/lib/iomgr/wakeup_fd_pipe.h",
"src/core/lib/iomgr/wakeup_fd_posix.h",
"src/core/lib/iomgr/work_serializer.h",
"src/core/lib/json/json.h",
"src/core/lib/slice/b64.h",
"src/core/lib/slice/percent_encoding.h",
@ -2372,8 +2405,19 @@ grpc_cc_library(
"src/core/ext/upb-generated/envoy/api/v2/eds.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/lds.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/rds.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/srds.upb.c",
"src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c",
"src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c",
"src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c",
"src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c",
"src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c",
"src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c",
"src/core/ext/upb-generated/envoy/type/matcher/string.upb.c",
],
hdrs = [
"src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h",
@ -2385,8 +2429,19 @@ grpc_cc_library(
"src/core/ext/upb-generated/envoy/api/v2/eds.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/lds.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/rds.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/srds.upb.h",
"src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h",
"src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h",
"src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h",
"src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h",
"src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h",
"src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h",
"src/core/ext/upb-generated/envoy/type/matcher/string.upb.h",
],
external_deps = [
"upb_lib",

@ -158,6 +158,9 @@ config("grpc_config") {
"src/core/lib/profiling/timers.h",
]
deps = [
":absl/container:inlined_vector",
":absl/strings:strings",
":absl/types:optional",
]
public_configs = [
@ -418,12 +421,34 @@ config("grpc_config") {
"src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/lds.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/lds.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/rds.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/rds.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h",
"src/core/ext/upb-generated/envoy/api/v2/srds.upb.c",
"src/core/ext/upb-generated/envoy/api/v2/srds.upb.h",
"src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c",
"src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h",
"src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c",
"src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h",
"src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c",
"src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h",
"src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c",
"src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h",
"src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c",
"src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h",
"src/core/ext/upb-generated/envoy/type/http.upb.c",
"src/core/ext/upb-generated/envoy/type/http.upb.h",
"src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c",
"src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h",
"src/core/ext/upb-generated/envoy/type/matcher/string.upb.c",
"src/core/ext/upb-generated/envoy/type/matcher/string.upb.h",
"src/core/ext/upb-generated/envoy/type/percent.upb.c",
"src/core/ext/upb-generated/envoy/type/percent.upb.h",
"src/core/ext/upb-generated/envoy/type/range.upb.c",
@ -595,8 +620,6 @@ config("grpc_config") {
"src/core/lib/iomgr/load_file.h",
"src/core/lib/iomgr/lockfree_event.cc",
"src/core/lib/iomgr/lockfree_event.h",
"src/core/lib/iomgr/logical_thread.cc",
"src/core/lib/iomgr/logical_thread.h",
"src/core/lib/iomgr/nameser.h",
"src/core/lib/iomgr/poller/eventmanager_libuv.cc",
"src/core/lib/iomgr/poller/eventmanager_libuv.h",
@ -690,10 +713,14 @@ config("grpc_config") {
"src/core/lib/iomgr/wakeup_fd_pipe.h",
"src/core/lib/iomgr/wakeup_fd_posix.cc",
"src/core/lib/iomgr/wakeup_fd_posix.h",
"src/core/lib/iomgr/work_serializer.cc",
"src/core/lib/iomgr/work_serializer.h",
"src/core/lib/json/json.cc",
"src/core/lib/json/json.h",
"src/core/lib/json/json_reader.cc",
"src/core/lib/json/json_reader_new.cc",
"src/core/lib/json/json_writer.cc",
"src/core/lib/json/json_writer_new.cc",
"src/core/lib/security/context/security_context.cc",
"src/core/lib/security/context/security_context.h",
"src/core/lib/security/credentials/alts/alts_credentials.cc",
@ -1189,135 +1216,32 @@ config("grpc_config") {
"include/grpcpp/support/sync_stream_impl.h",
"include/grpcpp/support/time.h",
"include/grpcpp/support/validate_service_config.h",
"src/core/ext/filters/client_channel/backend_metric.cc",
"src/core/ext/filters/client_channel/backend_metric.h",
"src/core/ext/filters/client_channel/backup_poller.cc",
"src/core/ext/filters/client_channel/backup_poller.h",
"src/core/ext/filters/client_channel/channel_connectivity.cc",
"src/core/ext/filters/client_channel/client_channel.cc",
"src/core/ext/filters/client_channel/client_channel.h",
"src/core/ext/filters/client_channel/client_channel_channelz.cc",
"src/core/ext/filters/client_channel/client_channel_channelz.h",
"src/core/ext/filters/client_channel/client_channel_factory.cc",
"src/core/ext/filters/client_channel/client_channel_factory.h",
"src/core/ext/filters/client_channel/client_channel_plugin.cc",
"src/core/ext/filters/client_channel/connector.h",
"src/core/ext/filters/client_channel/global_subchannel_pool.cc",
"src/core/ext/filters/client_channel/global_subchannel_pool.h",
"src/core/ext/filters/client_channel/health/health_check_client.cc",
"src/core/ext/filters/client_channel/health/health_check_client.h",
"src/core/ext/filters/client_channel/http_connect_handshaker.cc",
"src/core/ext/filters/client_channel/http_connect_handshaker.h",
"src/core/ext/filters/client_channel/http_proxy.cc",
"src/core/ext/filters/client_channel/http_proxy.h",
"src/core/ext/filters/client_channel/lb_policy.cc",
"src/core/ext/filters/client_channel/lb_policy.h",
"src/core/ext/filters/client_channel/lb_policy_factory.h",
"src/core/ext/filters/client_channel/lb_policy_registry.cc",
"src/core/ext/filters/client_channel/lb_policy_registry.h",
"src/core/ext/filters/client_channel/local_subchannel_pool.cc",
"src/core/ext/filters/client_channel/local_subchannel_pool.h",
"src/core/ext/filters/client_channel/parse_address.cc",
"src/core/ext/filters/client_channel/parse_address.h",
"src/core/ext/filters/client_channel/proxy_mapper.h",
"src/core/ext/filters/client_channel/proxy_mapper_registry.cc",
"src/core/ext/filters/client_channel/proxy_mapper_registry.h",
"src/core/ext/filters/client_channel/resolver.cc",
"src/core/ext/filters/client_channel/resolver.h",
"src/core/ext/filters/client_channel/resolver_factory.h",
"src/core/ext/filters/client_channel/resolver_registry.cc",
"src/core/ext/filters/client_channel/resolver_registry.h",
"src/core/ext/filters/client_channel/resolver_result_parsing.cc",
"src/core/ext/filters/client_channel/resolver_result_parsing.h",
"src/core/ext/filters/client_channel/resolving_lb_policy.cc",
"src/core/ext/filters/client_channel/resolving_lb_policy.h",
"src/core/ext/filters/client_channel/retry_throttle.cc",
"src/core/ext/filters/client_channel/retry_throttle.h",
"src/core/ext/filters/client_channel/server_address.cc",
"src/core/ext/filters/client_channel/server_address.h",
"src/core/ext/filters/client_channel/service_config.cc",
"src/core/ext/filters/client_channel/service_config.h",
"src/core/ext/filters/client_channel/subchannel.cc",
"src/core/ext/filters/client_channel/subchannel.h",
"src/core/ext/filters/client_channel/subchannel_interface.h",
"src/core/ext/filters/client_channel/subchannel_pool_interface.cc",
"src/core/ext/filters/client_channel/subchannel_pool_interface.h",
"src/core/ext/filters/deadline/deadline_filter.cc",
"src/core/ext/filters/deadline/deadline_filter.h",
"src/core/ext/transport/inproc/inproc_transport.h",
"src/core/ext/upb-generated/gogoproto/gogo.upb.c",
"src/core/ext/upb-generated/gogoproto/gogo.upb.h",
"src/core/ext/upb-generated/google/api/annotations.upb.c",
"src/core/ext/upb-generated/google/api/annotations.upb.h",
"src/core/ext/upb-generated/google/api/http.upb.c",
"src/core/ext/upb-generated/google/api/http.upb.h",
"src/core/ext/upb-generated/google/protobuf/any.upb.c",
"src/core/ext/upb-generated/google/protobuf/any.upb.h",
"src/core/ext/upb-generated/google/protobuf/descriptor.upb.c",
"src/core/ext/upb-generated/google/protobuf/descriptor.upb.h",
"src/core/ext/upb-generated/google/protobuf/duration.upb.c",
"src/core/ext/upb-generated/google/protobuf/duration.upb.h",
"src/core/ext/upb-generated/google/protobuf/empty.upb.c",
"src/core/ext/upb-generated/google/protobuf/empty.upb.h",
"src/core/ext/upb-generated/google/protobuf/struct.upb.c",
"src/core/ext/upb-generated/google/protobuf/struct.upb.h",
"src/core/ext/upb-generated/google/protobuf/timestamp.upb.c",
"src/core/ext/upb-generated/google/protobuf/timestamp.upb.h",
"src/core/ext/upb-generated/google/protobuf/wrappers.upb.c",
"src/core/ext/upb-generated/google/protobuf/wrappers.upb.h",
"src/core/ext/upb-generated/google/rpc/status.upb.c",
"src/core/ext/upb-generated/google/rpc/status.upb.h",
"src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c",
"src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h",
"src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c",
"src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h",
"src/core/ext/upb-generated/validate/validate.upb.c",
"src/core/ext/upb-generated/validate/validate.upb.h",
"src/core/lib/avl/avl.cc",
"src/core/lib/avl/avl.h",
"src/core/lib/backoff/backoff.cc",
"src/core/lib/backoff/backoff.h",
"src/core/lib/channel/channel_args.cc",
"src/core/lib/channel/channel_args.h",
"src/core/lib/channel/channel_stack.cc",
"src/core/lib/channel/channel_stack.h",
"src/core/lib/channel/channel_stack_builder.cc",
"src/core/lib/channel/channel_stack_builder.h",
"src/core/lib/channel/channel_trace.cc",
"src/core/lib/channel/channel_trace.h",
"src/core/lib/channel/channelz.cc",
"src/core/lib/channel/channelz.h",
"src/core/lib/channel/channelz_registry.cc",
"src/core/lib/channel/channelz_registry.h",
"src/core/lib/channel/connected_channel.cc",
"src/core/lib/channel/connected_channel.h",
"src/core/lib/channel/context.h",
"src/core/lib/channel/handshaker.cc",
"src/core/lib/channel/handshaker.h",
"src/core/lib/channel/handshaker_factory.h",
"src/core/lib/channel/handshaker_registry.cc",
"src/core/lib/channel/handshaker_registry.h",
"src/core/lib/channel/status_util.cc",
"src/core/lib/channel/status_util.h",
"src/core/lib/compression/algorithm_metadata.h",
"src/core/lib/compression/compression.cc",
"src/core/lib/compression/compression_args.cc",
"src/core/lib/compression/compression_args.h",
"src/core/lib/compression/compression_internal.cc",
"src/core/lib/compression/compression_internal.h",
"src/core/lib/compression/message_compress.cc",
"src/core/lib/compression/message_compress.h",
"src/core/lib/compression/stream_compression.cc",
"src/core/lib/compression/stream_compression.h",
"src/core/lib/compression/stream_compression_gzip.cc",
"src/core/lib/compression/stream_compression_gzip.h",
"src/core/lib/compression/stream_compression_identity.cc",
"src/core/lib/compression/stream_compression_identity.h",
"src/core/lib/debug/stats.cc",
"src/core/lib/debug/stats.h",
"src/core/lib/debug/stats_data.cc",
"src/core/lib/debug/stats_data.h",
"src/core/lib/debug/trace.cc",
"src/core/lib/debug/trace.h",
"src/core/lib/gpr/alloc.h",
"src/core/lib/gpr/arena.h",
@ -1354,255 +1278,118 @@ config("grpc_config") {
"src/core/lib/gprpp/string_view.h",
"src/core/lib/gprpp/sync.h",
"src/core/lib/gprpp/thd.h",
"src/core/lib/http/format_request.cc",
"src/core/lib/http/format_request.h",
"src/core/lib/http/httpcli.cc",
"src/core/lib/http/httpcli.h",
"src/core/lib/http/parser.cc",
"src/core/lib/http/parser.h",
"src/core/lib/iomgr/block_annotate.h",
"src/core/lib/iomgr/buffer_list.cc",
"src/core/lib/iomgr/buffer_list.h",
"src/core/lib/iomgr/call_combiner.cc",
"src/core/lib/iomgr/call_combiner.h",
"src/core/lib/iomgr/cfstream_handle.cc",
"src/core/lib/iomgr/cfstream_handle.h",
"src/core/lib/iomgr/closure.h",
"src/core/lib/iomgr/combiner.cc",
"src/core/lib/iomgr/combiner.h",
"src/core/lib/iomgr/dynamic_annotations.h",
"src/core/lib/iomgr/endpoint.cc",
"src/core/lib/iomgr/endpoint.h",
"src/core/lib/iomgr/endpoint_cfstream.cc",
"src/core/lib/iomgr/endpoint_cfstream.h",
"src/core/lib/iomgr/endpoint_pair.h",
"src/core/lib/iomgr/endpoint_pair_posix.cc",
"src/core/lib/iomgr/endpoint_pair_uv.cc",
"src/core/lib/iomgr/endpoint_pair_windows.cc",
"src/core/lib/iomgr/error.cc",
"src/core/lib/iomgr/error.h",
"src/core/lib/iomgr/error_cfstream.cc",
"src/core/lib/iomgr/error_cfstream.h",
"src/core/lib/iomgr/error_internal.h",
"src/core/lib/iomgr/ev_epoll1_linux.cc",
"src/core/lib/iomgr/ev_epoll1_linux.h",
"src/core/lib/iomgr/ev_epollex_linux.cc",
"src/core/lib/iomgr/ev_epollex_linux.h",
"src/core/lib/iomgr/ev_poll_posix.cc",
"src/core/lib/iomgr/ev_poll_posix.h",
"src/core/lib/iomgr/ev_posix.cc",
"src/core/lib/iomgr/ev_posix.h",
"src/core/lib/iomgr/ev_windows.cc",
"src/core/lib/iomgr/exec_ctx.cc",
"src/core/lib/iomgr/exec_ctx.h",
"src/core/lib/iomgr/executor.cc",
"src/core/lib/iomgr/executor.h",
"src/core/lib/iomgr/executor/mpmcqueue.cc",
"src/core/lib/iomgr/executor/mpmcqueue.h",
"src/core/lib/iomgr/executor/threadpool.cc",
"src/core/lib/iomgr/executor/threadpool.h",
"src/core/lib/iomgr/fork_posix.cc",
"src/core/lib/iomgr/fork_windows.cc",
"src/core/lib/iomgr/gethostname.h",
"src/core/lib/iomgr/gethostname_fallback.cc",
"src/core/lib/iomgr/gethostname_host_name_max.cc",
"src/core/lib/iomgr/gethostname_sysconf.cc",
"src/core/lib/iomgr/grpc_if_nametoindex.h",
"src/core/lib/iomgr/grpc_if_nametoindex_posix.cc",
"src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc",
"src/core/lib/iomgr/internal_errqueue.cc",
"src/core/lib/iomgr/internal_errqueue.h",
"src/core/lib/iomgr/iocp_windows.cc",
"src/core/lib/iomgr/iocp_windows.h",
"src/core/lib/iomgr/iomgr.cc",
"src/core/lib/iomgr/iomgr.h",
"src/core/lib/iomgr/iomgr_custom.cc",
"src/core/lib/iomgr/iomgr_custom.h",
"src/core/lib/iomgr/iomgr_internal.cc",
"src/core/lib/iomgr/iomgr_internal.h",
"src/core/lib/iomgr/iomgr_posix.cc",
"src/core/lib/iomgr/iomgr_posix.h",
"src/core/lib/iomgr/iomgr_posix_cfstream.cc",
"src/core/lib/iomgr/iomgr_uv.cc",
"src/core/lib/iomgr/iomgr_windows.cc",
"src/core/lib/iomgr/is_epollexclusive_available.cc",
"src/core/lib/iomgr/is_epollexclusive_available.h",
"src/core/lib/iomgr/load_file.cc",
"src/core/lib/iomgr/load_file.h",
"src/core/lib/iomgr/lockfree_event.cc",
"src/core/lib/iomgr/lockfree_event.h",
"src/core/lib/iomgr/logical_thread.cc",
"src/core/lib/iomgr/logical_thread.h",
"src/core/lib/iomgr/nameser.h",
"src/core/lib/iomgr/poller/eventmanager_libuv.cc",
"src/core/lib/iomgr/poller/eventmanager_libuv.h",
"src/core/lib/iomgr/polling_entity.cc",
"src/core/lib/iomgr/polling_entity.h",
"src/core/lib/iomgr/pollset.cc",
"src/core/lib/iomgr/pollset.h",
"src/core/lib/iomgr/pollset_custom.cc",
"src/core/lib/iomgr/pollset_custom.h",
"src/core/lib/iomgr/pollset_set.cc",
"src/core/lib/iomgr/pollset_set.h",
"src/core/lib/iomgr/pollset_set_custom.cc",
"src/core/lib/iomgr/pollset_set_custom.h",
"src/core/lib/iomgr/pollset_set_windows.cc",
"src/core/lib/iomgr/pollset_set_windows.h",
"src/core/lib/iomgr/pollset_uv.cc",
"src/core/lib/iomgr/pollset_windows.cc",
"src/core/lib/iomgr/pollset_windows.h",
"src/core/lib/iomgr/port.h",
"src/core/lib/iomgr/resolve_address.cc",
"src/core/lib/iomgr/resolve_address.h",
"src/core/lib/iomgr/resolve_address_custom.cc",
"src/core/lib/iomgr/resolve_address_custom.h",
"src/core/lib/iomgr/resolve_address_posix.cc",
"src/core/lib/iomgr/resolve_address_windows.cc",
"src/core/lib/iomgr/resource_quota.cc",
"src/core/lib/iomgr/resource_quota.h",
"src/core/lib/iomgr/sockaddr.h",
"src/core/lib/iomgr/sockaddr_custom.h",
"src/core/lib/iomgr/sockaddr_posix.h",
"src/core/lib/iomgr/sockaddr_utils.cc",
"src/core/lib/iomgr/sockaddr_utils.h",
"src/core/lib/iomgr/sockaddr_windows.h",
"src/core/lib/iomgr/socket_factory_posix.cc",
"src/core/lib/iomgr/socket_factory_posix.h",
"src/core/lib/iomgr/socket_mutator.cc",
"src/core/lib/iomgr/socket_mutator.h",
"src/core/lib/iomgr/socket_utils.h",
"src/core/lib/iomgr/socket_utils_common_posix.cc",
"src/core/lib/iomgr/socket_utils_linux.cc",
"src/core/lib/iomgr/socket_utils_posix.cc",
"src/core/lib/iomgr/socket_utils_posix.h",
"src/core/lib/iomgr/socket_utils_uv.cc",
"src/core/lib/iomgr/socket_utils_windows.cc",
"src/core/lib/iomgr/socket_windows.cc",
"src/core/lib/iomgr/socket_windows.h",
"src/core/lib/iomgr/sys_epoll_wrapper.h",
"src/core/lib/iomgr/tcp_client.cc",
"src/core/lib/iomgr/tcp_client.h",
"src/core/lib/iomgr/tcp_client_cfstream.cc",
"src/core/lib/iomgr/tcp_client_custom.cc",
"src/core/lib/iomgr/tcp_client_posix.cc",
"src/core/lib/iomgr/tcp_client_posix.h",
"src/core/lib/iomgr/tcp_client_windows.cc",
"src/core/lib/iomgr/tcp_custom.cc",
"src/core/lib/iomgr/tcp_custom.h",
"src/core/lib/iomgr/tcp_posix.cc",
"src/core/lib/iomgr/tcp_posix.h",
"src/core/lib/iomgr/tcp_server.cc",
"src/core/lib/iomgr/tcp_server.h",
"src/core/lib/iomgr/tcp_server_custom.cc",
"src/core/lib/iomgr/tcp_server_posix.cc",
"src/core/lib/iomgr/tcp_server_utils_posix.h",
"src/core/lib/iomgr/tcp_server_utils_posix_common.cc",
"src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc",
"src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc",
"src/core/lib/iomgr/tcp_server_windows.cc",
"src/core/lib/iomgr/tcp_uv.cc",
"src/core/lib/iomgr/tcp_windows.cc",
"src/core/lib/iomgr/tcp_windows.h",
"src/core/lib/iomgr/time_averaged_stats.cc",
"src/core/lib/iomgr/time_averaged_stats.h",
"src/core/lib/iomgr/timer.cc",
"src/core/lib/iomgr/timer.h",
"src/core/lib/iomgr/timer_custom.cc",
"src/core/lib/iomgr/timer_custom.h",
"src/core/lib/iomgr/timer_generic.cc",
"src/core/lib/iomgr/timer_heap.cc",
"src/core/lib/iomgr/timer_heap.h",
"src/core/lib/iomgr/timer_manager.cc",
"src/core/lib/iomgr/timer_manager.h",
"src/core/lib/iomgr/timer_uv.cc",
"src/core/lib/iomgr/udp_server.cc",
"src/core/lib/iomgr/udp_server.h",
"src/core/lib/iomgr/unix_sockets_posix.cc",
"src/core/lib/iomgr/unix_sockets_posix.h",
"src/core/lib/iomgr/unix_sockets_posix_noop.cc",
"src/core/lib/iomgr/wakeup_fd_eventfd.cc",
"src/core/lib/iomgr/wakeup_fd_nospecial.cc",
"src/core/lib/iomgr/wakeup_fd_pipe.cc",
"src/core/lib/iomgr/wakeup_fd_pipe.h",
"src/core/lib/iomgr/wakeup_fd_posix.cc",
"src/core/lib/iomgr/wakeup_fd_posix.h",
"src/core/lib/json/json.cc",
"src/core/lib/iomgr/work_serializer.h",
"src/core/lib/json/json.h",
"src/core/lib/json/json_reader.cc",
"src/core/lib/json/json_writer.cc",
"src/core/lib/profiling/timers.h",
"src/core/lib/slice/b64.cc",
"src/core/lib/slice/b64.h",
"src/core/lib/slice/percent_encoding.cc",
"src/core/lib/slice/percent_encoding.h",
"src/core/lib/slice/slice.cc",
"src/core/lib/slice/slice_buffer.cc",
"src/core/lib/slice/slice_hash_table.h",
"src/core/lib/slice/slice_intern.cc",
"src/core/lib/slice/slice_internal.h",
"src/core/lib/slice/slice_string_helpers.cc",
"src/core/lib/slice/slice_string_helpers.h",
"src/core/lib/slice/slice_utils.h",
"src/core/lib/slice/slice_weak_hash_table.h",
"src/core/lib/surface/api_trace.cc",
"src/core/lib/surface/api_trace.h",
"src/core/lib/surface/byte_buffer.cc",
"src/core/lib/surface/byte_buffer_reader.cc",
"src/core/lib/surface/call.cc",
"src/core/lib/surface/call.h",
"src/core/lib/surface/call_details.cc",
"src/core/lib/surface/call_log_batch.cc",
"src/core/lib/surface/call_test_only.h",
"src/core/lib/surface/channel.cc",
"src/core/lib/surface/channel.h",
"src/core/lib/surface/channel_init.cc",
"src/core/lib/surface/channel_init.h",
"src/core/lib/surface/channel_ping.cc",
"src/core/lib/surface/channel_stack_type.cc",
"src/core/lib/surface/channel_stack_type.h",
"src/core/lib/surface/completion_queue.cc",
"src/core/lib/surface/completion_queue.h",
"src/core/lib/surface/completion_queue_factory.cc",
"src/core/lib/surface/completion_queue_factory.h",
"src/core/lib/surface/event_string.cc",
"src/core/lib/surface/event_string.h",
"src/core/lib/surface/init.h",
"src/core/lib/surface/lame_client.cc",
"src/core/lib/surface/lame_client.h",
"src/core/lib/surface/metadata_array.cc",
"src/core/lib/surface/server.cc",
"src/core/lib/surface/server.h",
"src/core/lib/surface/validate_metadata.cc",
"src/core/lib/surface/validate_metadata.h",
"src/core/lib/surface/version.cc",
"src/core/lib/transport/bdp_estimator.cc",
"src/core/lib/transport/bdp_estimator.h",
"src/core/lib/transport/byte_stream.cc",
"src/core/lib/transport/byte_stream.h",
"src/core/lib/transport/connectivity_state.cc",
"src/core/lib/transport/connectivity_state.h",
"src/core/lib/transport/error_utils.cc",
"src/core/lib/transport/error_utils.h",
"src/core/lib/transport/http2_errors.h",
"src/core/lib/transport/metadata.cc",
"src/core/lib/transport/metadata.h",
"src/core/lib/transport/metadata_batch.cc",
"src/core/lib/transport/metadata_batch.h",
"src/core/lib/transport/pid_controller.cc",
"src/core/lib/transport/pid_controller.h",
"src/core/lib/transport/static_metadata.cc",
"src/core/lib/transport/static_metadata.h",
"src/core/lib/transport/status_conversion.cc",
"src/core/lib/transport/status_conversion.h",
"src/core/lib/transport/status_metadata.cc",
"src/core/lib/transport/status_metadata.h",
"src/core/lib/transport/timeout_encoding.cc",
"src/core/lib/transport/timeout_encoding.h",
"src/core/lib/transport/transport.cc",
"src/core/lib/transport/transport.h",
"src/core/lib/transport/transport_impl.h",
"src/core/lib/transport/transport_op_string.cc",
"src/core/lib/uri/uri_parser.cc",
"src/core/lib/uri/uri_parser.h",
"src/cpp/client/channel_cc.cc",
"src/cpp/client/client_context.cc",

@ -12,9 +12,16 @@ Other should follow the user instructions. See the [How to use](https://github.c
$ [sudo] apt-get install build-essential autoconf libtool pkg-config
```
If you plan to build from source and run tests, install the following as well:
If you plan to build using CMake
```sh
$ [sudo] apt-get install libgflags-dev libgtest-dev
$ [sudo] apt-get install cmake
```
If you are a contributor and plan to build and run tests, install the following as well:
```sh
$ # libgflags-dev is only required if building with make (deprecated)
$ [sudo] apt-get install libgflags-dev
$ # clang and LLVM C++ lib is only required for sanitizer builds
$ [sudo] apt-get install clang-5.0 libc++-dev
```
@ -36,12 +43,15 @@ packages from [Homebrew](https://brew.sh):
$ brew install autoconf automake libtool shtool
```
If you plan to build from source and run tests, install the following as well:
If you plan to build using CMake, follow the instructions from https://cmake.org/download/
If you are a contributor and plan to build and run tests, install the following as well:
```sh
$ # gflags is only required if building with make (deprecated)
$ brew install gflags
```
*Tip*: when building,
*Tip*: when building,
you *may* want to explicitly set the `LIBTOOL` and `LIBTOOLIZE`
environment variables when running `make` to ensure the version
installed by `brew` is being used:
@ -56,14 +66,12 @@ To prepare for cmake + Microsoft Visual C++ compiler build
- Install Visual Studio 2015 or 2017 (Visual C++ compiler will be used).
- Install [Git](https://git-scm.com/).
- Install [CMake](https://cmake.org/download/).
- Install [Active State Perl](https://www.activestate.com/activeperl/) (`choco install activeperl`) - *required by boringssl*
- Install [Go](https://golang.org/dl/) (`choco install golang`) - *required by boringssl*
- Install [nasm](https://www.nasm.us/) and add it to `PATH` (`choco install nasm`) - *required by boringssl*
- (Optional) Install [Ninja](https://ninja-build.org/) (`choco install ninja`)
# Clone the repository (including submodules)
Before building, you need to clone the gRPC github repository and download submodules containing source code
Before building, you need to clone the gRPC github repository and download submodules containing source code
for gRPC's dependencies (that's done by the `submodule` command or `--recursive` flag). The following commands will clone the gRPC
repository at the latest stable version.
@ -116,7 +124,9 @@ $ bazel test --config=dbg //test/...
NOTE: If you are gRPC maintainer and you have access to our test cluster, you should use the our [gRPC's Remote Execution environment](tools/remote_build/README.md)
to get significant improvement to the build and test speed (and a bunch of other very useful features).
## CMake: Linux/Unix, Using Make
## Building with CMake
### Linux/Unix, Using Make
Run from grpc directory after cloning the repo with --recursive or updating submodules.
```
@ -128,12 +138,12 @@ $ make
If you want to build shared libraries (`.so` files), run `cmake` with `-DBUILD_SHARED_LIBS=ON`.
## Building with CMake: Windows, Using Visual Studio 2015 or 2017 (can only build with OPENSSL_NO_ASM).
### Windows, Using Visual Studio 2015 or 2017
When using the "Visual Studio" generator,
cmake will generate a solution (`grpc.sln`) that contains a VS project for
cmake will generate a solution (`grpc.sln`) that contains a VS project for
every target defined in `CMakeLists.txt` (+ few extra convenience projects
added automatically by cmake). After opening the solution with Visual Studio
added automatically by cmake). After opening the solution with Visual Studio
you will be able to browse and build the code.
```
> @rem Run from grpc directory after cloning the repo with --recursive or updating submodules.
@ -143,20 +153,88 @@ you will be able to browse and build the code.
> cmake --build . --config Release
```
## Building with CMake: Windows, Using Ninja (faster build, supports boringssl's assembly optimizations).
If you want to build DLLs, run `cmake` with `-DBUILD_SHARED_LIBS=ON`.
### Windows, Using Ninja (faster build).
Please note that when using Ninja, you will still need Visual C++ (part of Visual Studio)
installed to be able to compile the C/C++ sources.
```
> @rem Run from grpc directory after cloning the repo with --recursive or updating submodules.
> md .build
> cd .build
> cd cmake
> md build
> cd build
> call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x64
> cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release
> cmake ..\.. -GNinja -DCMAKE_BUILD_TYPE=Release
> cmake --build .
```
## Building with make (on UNIX systems)
If you want to build DLLs, run `cmake` with `-DBUILD_SHARED_LIBS=ON`.
### Dependency management
gRPC's CMake build system provides two modes for handling dependencies.
* module - build dependencies alongside gRPC.
* package - use external copies of dependencies that are already available
on your system.
This behavior is controlled by the `gRPC_<depname>_PROVIDER` CMake variables,
ie `gRPC_CARES_PROVIDER`.
### Install after build
Perform the following steps to install gRPC using CMake.
* Set `-DgRPC_INSTALL=ON`
* Build the `install` target
The install destination is controlled by the
[`CMAKE_INSTALL_PREFIX`](https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX.html) variable.
If you are running CMake v3.13 or newer you can build gRPC's dependencies
in "module" mode and install them alongside gRPC in a single step.
[Example](test/distrib/cpp/run_distrib_test_cmake_module_install.sh)
If you are using an older version of gRPC, you will need to select "package"
mode (rather than "module" mode) for the dependencies.
This means you will need to have external copies of these libraries available
on your system. This [example](test/distrib/cpp/run_distrib_test_cmake.sh) shows
how to install dependencies with cmake before proceeding to installing gRPC itself.
```
# NOTE: all of gRPC's dependencies need to be already installed
$ cmake ../.. -DgRPC_INSTALL=ON \
-DCMAKE_BUILD_TYPE=Release \
-DgRPC_ABSL_PROVIDER=package \
-DgRPC_CARES_PROVIDER=package \
-DgRPC_PROTOBUF_PROVIDER=package \
-DgRPC_SSL_PROVIDER=package \
-DgRPC_ZLIB_PROVIDER=package
$ make
$ make install
```
### Cross-compiling
You can use CMake to cross-compile gRPC for another architecture. In order to
do so, you will first need to build `protoc` and `grpc_cpp_plugin`
for the host architecture. These tools are used during the build of gRPC, so
we need copies of executables that can be run natively.
You will likely need to install the toolchain for the platform you are
targeting for your cross-compile. Once you have done so, you can write a
toolchain file to tell CMake where to find the compilers and system tools
that will be used for this build.
This toolchain file is specified to CMake by setting the `CMAKE_TOOLCHAIN_FILE`
variable.
```
$ cmake ../.. -DCMAKE_TOOLCHAIN_FILE=path/to/file
$ make
```
[Cross-compile example](test/distrib/cpp/run_distrib_test_raspberry_pi.sh)
## Building with make on UNIX systems (deprecated)
NOTE: `make` used to be gRPC's default build system, but we're no longer recommending it. You should use `bazel` or `cmake` instead. The `Makefile` is only intended for internal usage and is not meant for public consumption.

File diff suppressed because it is too large Load Diff

5016
Makefile

File diff suppressed because it is too large Load Diff

@ -4,8 +4,9 @@ graft src/python/grpcio/grpcio.egg-info
graft src/core
graft src/boringssl
graft include/grpc
graft third_party/abseil-cpp/absl
graft third_party/address_sorting
graft third_party/boringssl
graft third_party/boringssl-with-bazel
graft third_party/cares
graft third_party/upb
graft third_party/zlib

@ -85,23 +85,6 @@ def grpc_cc_library(
if use_cfstream:
linkopts = linkopts + if_mac(["-framework CoreFoundation"])
# This is a temporary solution to enable absl dependency only for
# Bazel-build with grpc_use_absl enabled to abseilfy in-house classes
# such as inlined_vector before absl is fully supported.
# When https://github.com/grpc/grpc/pull/20184 is merged, it will
# be removed.
more_external_deps = []
if name == "inlined_vector":
more_external_deps += select({
"//:grpc_use_absl": ["@com_google_absl//absl/container:inlined_vector"],
"//conditions:default": [],
})
if name == "gpr_base":
more_external_deps += select({
"//:grpc_use_absl": ["@com_google_absl//absl/strings:strings"],
"//conditions:default": [],
})
native.cc_library(
name = name,
srcs = srcs,
@ -119,11 +102,11 @@ def grpc_cc_library(
"//conditions:default": [],
}) +
select({
"//:grpc_use_absl": ["GRPC_USE_ABSL=1"],
"//:grpc_disable_absl": ["GRPC_USE_ABSL=0"],
"//conditions:default": [],
}),
hdrs = hdrs + public_hdrs,
deps = deps + _get_external_deps(external_deps) + more_external_deps,
deps = deps + _get_external_deps(external_deps),
copts = copts,
visibility = visibility,
testonly = testonly,
@ -193,6 +176,7 @@ def grpc_cc_test(name, srcs = [], deps = [], external_deps = [], args = [], data
copts = if_mac(["-DGRPC_CFSTREAM"])
if language.upper() == "C":
copts = copts + if_not_windows(["-std=c99"])
# NOTE: these attributes won't be used for the poller-specific versions of a test
# automatically, you need to set them explicitly (if applicable)
args = {

@ -121,12 +121,19 @@ def grpc_deps():
actual = "@io_opencensus_cpp//opencensus/tags:tags",
)
native.bind(
name = "libuv",
actual = "@libuv//:libuv",
)
if "boringssl" not in native.existing_rules():
http_archive(
name = "boringssl",
# NOTE: This URL generates a tarball containing dynamic date
# information, so the sha256 is not consistent.
url = "https://boringssl.googlesource.com/boringssl/+archive/83da28a68f32023fd3b95a8ae94991a07b1f6c62.tar.gz",
# Use github mirror instead of https://boringssl.googlesource.com/boringssl
# to obtain a boringssl archive with consistent sha256
sha256 = "a3d4de4f03cb321ef943678d72a045c9a19d26b23d6f4e313f97600c65201a27",
strip_prefix = "boringssl-1c2769383f027befac5b75b6cedd25daf3bf4dcf",
url = "https://github.com/google/boringssl/archive/1c2769383f027befac5b75b6cedd25daf3bf4dcf.tar.gz",
)
if "zlib" not in native.existing_rules():
@ -141,9 +148,9 @@ def grpc_deps():
if "com_google_protobuf" not in native.existing_rules():
http_archive(
name = "com_google_protobuf",
sha256 = "416212e14481cff8fd4849b1c1c1200a7f34808a54377e22d7447efdf54ad758",
strip_prefix = "protobuf-09745575a923640154bcf307fba8aedff47f240a",
url = "https://github.com/google/protobuf/archive/09745575a923640154bcf307fba8aedff47f240a.tar.gz",
sha256 = "51398b0b97b353c1c226d0ade0bae80c80380e691cba7c1a108918986784a1c7",
strip_prefix = "protobuf-29cd005ce1fe1a8fabf11e325cb13006a6646d59",
url = "https://github.com/google/protobuf/archive/29cd005ce1fe1a8fabf11e325cb13006a6646d59.tar.gz",
)
if "com_github_google_googletest" not in native.existing_rules():
@ -190,9 +197,9 @@ def grpc_deps():
if "com_google_absl" not in native.existing_rules():
http_archive(
name = "com_google_absl",
sha256 = "6e477042edb279a7e3436f5d571b918389daea4b01d0d1e37ace50157d132b36",
strip_prefix = "abseil-cpp-bf86cfe165ef7d70dfe68f0b8fc0c018bc79a577",
url = "https://github.com/abseil/abseil-cpp/archive/bf86cfe165ef7d70dfe68f0b8fc0c018bc79a577.tar.gz",
sha256 = "19391fb4882601a65cb648d638c11aa301ce5f525ef02da1a9eafd22f72d7c59",
strip_prefix = "abseil-cpp-37dd2562ec830d547a1524bb306be313ac3f2556",
url = "https://github.com/abseil/abseil-cpp/archive/37dd2562ec830d547a1524bb306be313ac3f2556.tar.gz",
)
if "bazel_toolchains" not in native.existing_rules():
@ -227,9 +234,9 @@ def grpc_deps():
if "upb" not in native.existing_rules():
http_archive(
name = "upb",
sha256 = "61d0417abd60e65ed589c9deee7c124fe76a4106831f6ad39464e1525cef1454",
strip_prefix = "upb-9effcbcb27f0a665f9f345030188c0b291e32482",
url = "https://github.com/protocolbuffers/upb/archive/9effcbcb27f0a665f9f345030188c0b291e32482.tar.gz",
sha256 = "e9c136e56b98c8eb48ad1c9f8df4a6348e99f9f336ee6199c4259a312c2e3598",
strip_prefix = "upb-d8f3d6f9d415b31f3ce56d46791706c38fa311bc",
url = "https://github.com/protocolbuffers/upb/archive/d8f3d6f9d415b31f3ce56d46791706c38fa311bc.tar.gz",
)
if "envoy_api" not in native.existing_rules():
http_archive(
@ -263,6 +270,15 @@ def grpc_deps():
sha256 = "122ebf7fe7d1c8e938af6aeaee0efe788a3a2449ece5a8d6a428cb18d6f88033",
)
if "libuv" not in native.existing_rules():
http_archive(
name = "libuv",
build_file = "@com_github_grpc_grpc//third_party:libuv.BUILD",
sha256 = "dfb4fe1ff0b47340978490a14bf253475159ecfcbad46ab2a350c78f9ce3360f",
strip_prefix = "libuv-15ae750151ac9341e5945eb38f8982d59fb99201",
url = "https://github.com/libuv/libuv/archive/15ae750151ac9341e5945eb38f8982d59fb99201.tar.gz",
)
grpc_python_deps()
# TODO: move some dependencies from "grpc_deps" here?

@ -4,18 +4,12 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
load("@com_github_grpc_grpc//third_party/py:python_configure.bzl", "python_configure")
def grpc_python_deps():
native.bind(
name = "six",
actual = "@six_archive//:six",
)
# protobuf binds to the name "six", so we can't use it here.
# See https://github.com/bazelbuild/bazel/issues/1952 for why bind is
# horrible.
if "six_archive" not in native.existing_rules():
if "six" not in native.existing_rules():
http_archive(
name = "six_archive",
strip_prefix = "six-1.12.0",
name = "six",
build_file = "@com_github_grpc_grpc//third_party:six.BUILD",
sha256 = "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73",
urls = ["https://files.pythonhosted.org/packages/dd/bf/4138e7bfb757de47d1f4b6994648ec67a51efe58fa907c1e11e350cddfca/six-1.12.0.tar.gz"],

@ -120,6 +120,15 @@ filegroups:
- src/core/ext/upb-generated/envoy/api/v2/eds.upb.h
- src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h
- src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h
- src/core/ext/upb-generated/envoy/api/v2/lds.upb.h
- src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h
- src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h
- src/core/ext/upb-generated/envoy/api/v2/rds.upb.h
- src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h
- src/core/ext/upb-generated/envoy/api/v2/srds.upb.h
- src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h
- src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h
- src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h
- src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h
- src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h
src:
@ -132,6 +141,15 @@ filegroups:
- src/core/ext/upb-generated/envoy/api/v2/eds.upb.c
- src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c
- src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c
- src/core/ext/upb-generated/envoy/api/v2/lds.upb.c
- src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c
- src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c
- src/core/ext/upb-generated/envoy/api/v2/rds.upb.c
- src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c
- src/core/ext/upb-generated/envoy/api/v2/srds.upb.c
- src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c
- src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c
- src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c
- src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c
- src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c
uses:
@ -170,10 +188,14 @@ filegroups:
- name: envoy_type_upb
headers:
- src/core/ext/upb-generated/envoy/type/http.upb.h
- src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h
- src/core/ext/upb-generated/envoy/type/matcher/string.upb.h
- src/core/ext/upb-generated/envoy/type/percent.upb.h
- src/core/ext/upb-generated/envoy/type/range.upb.h
src:
- src/core/ext/upb-generated/envoy/type/http.upb.c
- src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c
- src/core/ext/upb-generated/envoy/type/matcher/string.upb.c
- src/core/ext/upb-generated/envoy/type/percent.upb.c
- src/core/ext/upb-generated/envoy/type/range.upb.c
uses:
@ -246,6 +268,10 @@ filegroups:
- src/core/lib/gprpp/thd_windows.cc
- src/core/lib/profiling/basic_timers.cc
- src/core/lib/profiling/stap_timers.cc
deps:
- absl/container:inlined_vector
- absl/strings:strings
- absl/types:optional
uses:
- gpr_base_headers
- name: gpr_base_headers
@ -601,7 +627,6 @@ filegroups:
uses:
- gpr_base_headers
- grpc_base_headers
- grpc_client_channel
- grpc_health_upb
- grpc_transport_inproc_headers
- grpc++_codegen_base
@ -691,7 +716,6 @@ filegroups:
- src/core/lib/iomgr/is_epollexclusive_available.cc
- src/core/lib/iomgr/load_file.cc
- src/core/lib/iomgr/lockfree_event.cc
- src/core/lib/iomgr/logical_thread.cc
- src/core/lib/iomgr/poller/eventmanager_libuv.cc
- src/core/lib/iomgr/polling_entity.cc
- src/core/lib/iomgr/pollset.cc
@ -745,9 +769,12 @@ filegroups:
- src/core/lib/iomgr/wakeup_fd_nospecial.cc
- src/core/lib/iomgr/wakeup_fd_pipe.cc
- src/core/lib/iomgr/wakeup_fd_posix.cc
- src/core/lib/iomgr/work_serializer.cc
- src/core/lib/json/json.cc
- src/core/lib/json/json_reader.cc
- src/core/lib/json/json_reader_new.cc
- src/core/lib/json/json_writer.cc
- src/core/lib/json/json_writer_new.cc
- src/core/lib/slice/b64.cc
- src/core/lib/slice/percent_encoding.cc
- src/core/lib/slice/slice.cc
@ -871,7 +898,6 @@ filegroups:
- src/core/lib/iomgr/is_epollexclusive_available.h
- src/core/lib/iomgr/load_file.h
- src/core/lib/iomgr/lockfree_event.h
- src/core/lib/iomgr/logical_thread.h
- src/core/lib/iomgr/nameser.h
- src/core/lib/iomgr/poller/eventmanager_libuv.h
- src/core/lib/iomgr/polling_entity.h
@ -912,6 +938,7 @@ filegroups:
- src/core/lib/iomgr/unix_sockets_posix.h
- src/core/lib/iomgr/wakeup_fd_pipe.h
- src/core/lib/iomgr/wakeup_fd_posix.h
- src/core/lib/iomgr/work_serializer.h
- src/core/lib/json/json.h
- src/core/lib/slice/b64.h
- src/core/lib/slice/percent_encoding.h
@ -1681,7 +1708,15 @@ libs:
- test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.cc
deps:
- grpc
filegroups:
- grpc_test_util_base
secure: true
- name: engine_passthrough
build: test
language: c
src:
- test/core/end2end/engine_passthrough.cc
dll: only
- name: gpr
build: all
language: c
@ -1848,6 +1883,8 @@ libs:
- test/cpp/naming/dns_test_util.h
src:
- test/cpp/naming/dns_test_util.cc
deps:
- gpr
- name: grpc++
build: all
language: c++
@ -1879,6 +1916,22 @@ libs:
- grpc++_codegen_proto
- grpc++_codegen_base_src
secure: check
- name: grpc++_alts
build: all
language: c++
public_headers:
- include/grpcpp/impl/codegen/security/auth_context.h
- include/grpcpp/security/alts_context.h
- include/grpcpp/security/alts_util.h
src:
- src/cpp/common/alts_context.cc
- src/cpp/common/alts_util.cc
deps:
- grpc++
- gpr
baselib: true
filegroups:
- alts_upb
- name: grpc++_core_stats
build: private
language: c++
@ -2245,7 +2298,6 @@ libs:
language: csharp
src:
- src/csharp/ext/grpc_csharp_ext.c
- src/csharp/ext/std++compat.cc
deps:
- grpc
- gpr
@ -4006,6 +4058,19 @@ targets:
- alts_test_util
- gpr
- grpc
- name: alts_util_test
build: test
language: c++
src:
- test/cpp/common/alts_util_test.cc
deps:
- grpc++_test_util
- grpc_test_util
- grpc++_alts
- grpc++
- grpc
- gpr
- grpc++_test_config
- name: alts_zero_copy_grpc_protector_test
build: test
language: c++
@ -4536,6 +4601,7 @@ targets:
src:
- test/cpp/common/channel_arguments_test.cc
deps:
- grpc_test_util
- grpc++
- grpc
- gpr
@ -5330,16 +5396,17 @@ targets:
- mac
- linux
- posix
- name: logical_thread_test
cpu_cost: 10
- name: json_test_new
gtest: true
build: test
language: c++
src:
- test/core/iomgr/logical_thread_test.cc
- test/core/json/json_test_new.cc
deps:
- grpc_test_util
- grpc
- gpr
uses_polling: false
- name: message_allocator_end2end_test
gtest: true
cpu_cost: 0.5
@ -6011,6 +6078,16 @@ targets:
- alts_test_util
- gpr
- grpc
- name: work_serializer_test
cpu_cost: 10
build: test
language: c++
src:
- test/core/iomgr/work_serializer_test.cc
deps:
- grpc_test_util
- grpc
- gpr
- name: writes_per_rpc_test
gtest: true
cpu_cost: 0.5
@ -6045,7 +6122,9 @@ targets:
language: c++
src:
- src/proto/grpc/testing/xds/ads_for_test.proto
- src/proto/grpc/testing/xds/cds_for_test.proto
- src/proto/grpc/testing/xds/eds_for_test.proto
- src/proto/grpc/testing/xds/lds_rds_for_test.proto
- src/proto/grpc/testing/xds/lrs_for_test.proto
- test/cpp/end2end/xds_end2end_test.cc
deps:
@ -6221,20 +6300,17 @@ defaults:
CPPFLAGS: -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX
boringssl:
CFLAGS: -g
CPPFLAGS: -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM
CPPFLAGS: -Ithird_party/boringssl-with-bazel/src/include -fvisibility=hidden -DOPENSSL_NO_ASM
-D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
CXXFLAGS: -fno-exceptions
global:
CFLAGS: -g
COREFLAGS: -fno-exceptions
CPPFLAGS: -g -Wall -Wextra -DOSATOMIC_USE_INLINED=1 -Ithird_party/upb -Isrc/core/ext/upb-generated
CPPFLAGS: -g -Wall -Wextra -DOSATOMIC_USE_INLINED=1 -Ithird_party/abseil-cpp -Ithird_party/upb
-Isrc/core/ext/upb-generated
LDFLAGS: -g
zlib:
CFLAGS: -fvisibility=hidden
openssl_fallback:
base_uri: https://openssl.org/source/old/1.0.2/
extraction_dir: openssl-1.0.2f
tarball: openssl-1.0.2f.tar.gz
php_config_m4:
deps:
- grpc

@ -18,9 +18,21 @@ if(gRPC_ABSL_PROVIDER STREQUAL "module")
endif()
if(EXISTS "${ABSL_ROOT_DIR}/CMakeLists.txt")
add_subdirectory(${ABSL_ROOT_DIR} third_party/abseil-cpp)
if(TARGET absl_base)
if(gRPC_INSTALL AND _gRPC_INSTALL_SUPPORTED_FROM_MODULE)
install(TARGETS ${gRPC_ABSL_USED_TARGETS} EXPORT gRPCTargets
RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR}
LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR})
endif()
endif()
else()
message(WARNING "gRPC_ABSL_PROVIDER is \"module\" but ABSL_ROOT_DIR is wrong")
endif()
if(gRPC_INSTALL AND NOT _gRPC_INSTALL_SUPPORTED_FROM_MODULE)
message(WARNING "gRPC_INSTALL will be forced to FALSE because gRPC_ABSL_PROVIDER is \"module\" and CMake version (${CMAKE_VERSION}) is less than 3.13.")
set(gRPC_INSTALL FALSE)
endif()
elseif(gRPC_ABSL_PROVIDER STREQUAL "package")
# Use "CONFIG" as there is no built-in cmake module for absl.
find_package(absl REQUIRED CONFIG)

@ -6,6 +6,7 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/modules)
@_gRPC_FIND_PROTOBUF@
@_gRPC_FIND_SSL@
@_gRPC_FIND_CARES@
@_gRPC_FIND_ABSL@
# Targets
include(${CMAKE_CURRENT_LIST_DIR}/gRPCTargets.cmake)

@ -22,7 +22,7 @@ if(gRPC_MSVC_STATIC_RUNTIME)
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
if(flag_var MATCHES "/MD")
if(${flag_var} MATCHES "/MD")
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
endif()
endforeach()

@ -39,7 +39,11 @@ if(gRPC_PROTOBUF_PROVIDER STREQUAL "module")
endif()
if(TARGET protoc)
set(_gRPC_PROTOBUF_PROTOC protoc)
set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE $<TARGET_FILE:protoc>)
if(CMAKE_CROSSCOMPILING)
find_program(_gRPC_PROTOBUF_PROTOC_EXECUTABLE protoc)
else()
set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE $<TARGET_FILE:protoc>)
endif()
endif()
# For well-known .proto files distributed with protobuf
set(_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR "${PROTOBUF_ROOT_DIR}/src")
@ -73,10 +77,18 @@ elseif(gRPC_PROTOBUF_PROVIDER STREQUAL "package")
endif()
if(TARGET protobuf::protoc)
set(_gRPC_PROTOBUF_PROTOC protobuf::protoc)
set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE $<TARGET_FILE:protobuf::protoc>)
if(CMAKE_CROSSCOMPILING)
find_program(_gRPC_PROTOBUF_PROTOC_EXECUTABLE protoc)
else()
set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE $<TARGET_FILE:protobuf::protoc>)
endif()
else()
set(_gRPC_PROTOBUF_PROTOC ${PROTOBUF_PROTOC_EXECUTABLE})
set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE})
if(CMAKE_CROSSCOMPILING)
find_program(_gRPC_PROTOBUF_PROTOC_EXECUTABLE protoc)
else()
set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE})
endif()
endif()
set(_gRPC_FIND_PROTOBUF "if(NOT Protobuf_FOUND AND NOT PROTOBUF_FOUND)\n find_package(Protobuf ${gRPC_PROTOBUF_PACKAGE_TYPE})\nendif()")
endif()

@ -18,7 +18,7 @@
if(gRPC_SSL_PROVIDER STREQUAL "module")
if(NOT BORINGSSL_ROOT_DIR)
set(BORINGSSL_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/boringssl)
set(BORINGSSL_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/boringssl-with-bazel)
endif()
if(EXISTS "${BORINGSSL_ROOT_DIR}/CMakeLists.txt")
@ -40,10 +40,10 @@ if(gRPC_SSL_PROVIDER STREQUAL "module")
endif()
endif()
add_subdirectory(${BORINGSSL_ROOT_DIR} third_party/boringssl)
add_subdirectory(${BORINGSSL_ROOT_DIR} third_party/boringssl-with-bazel)
if(TARGET ssl)
set(_gRPC_SSL_LIBRARIES ssl)
set(_gRPC_SSL_INCLUDE_DIR ${BORINGSSL_ROOT_DIR}/include)
set(_gRPC_SSL_LIBRARIES ssl crypto)
set(_gRPC_SSL_INCLUDE_DIR ${BORINGSSL_ROOT_DIR}/src/include)
if(gRPC_INSTALL AND _gRPC_INSTALL_SUPPORTED_FROM_MODULE)
install(TARGETS ssl crypto EXPORT gRPCTargets
RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR}

@ -8,8 +8,9 @@ if test "$PHP_GRPC" != "no"; then
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/include)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/src/core/ext/upb-generated)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/src/php/ext/grpc)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/abseil-cpp)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/address_sorting/include)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/boringssl/include)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/boringssl-with-bazel/src/include)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/upb)
LIBS="-lpthread $LIBS"
@ -36,7 +37,6 @@ if test "$PHP_GRPC" != "no"; then
PHP_SUBST(GRPC_SHARED_LIBADD)
PHP_NEW_EXTENSION(grpc,
src/boringssl/err_data.c \
src/core/ext/filters/census/grpc_context.cc \
src/core/ext/filters/client_channel/backend_metric.cc \
src/core/ext/filters/client_channel/backup_poller.cc \
@ -154,9 +154,20 @@ if test "$PHP_GRPC" != "no"; then
src/core/ext/upb-generated/envoy/api/v2/eds.upb.c \
src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c \
src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c \
src/core/ext/upb-generated/envoy/api/v2/lds.upb.c \
src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c \
src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c \
src/core/ext/upb-generated/envoy/api/v2/rds.upb.c \
src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c \
src/core/ext/upb-generated/envoy/api/v2/srds.upb.c \
src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c \
src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c \
src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c \
src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c \
src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c \
src/core/ext/upb-generated/envoy/type/http.upb.c \
src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c \
src/core/ext/upb-generated/envoy/type/matcher/string.upb.c \
src/core/ext/upb-generated/envoy/type/percent.upb.c \
src/core/ext/upb-generated/envoy/type/range.upb.c \
src/core/ext/upb-generated/gogoproto/gogo.upb.c \
@ -280,7 +291,6 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/iomgr/is_epollexclusive_available.cc \
src/core/lib/iomgr/load_file.cc \
src/core/lib/iomgr/lockfree_event.cc \
src/core/lib/iomgr/logical_thread.cc \
src/core/lib/iomgr/poller/eventmanager_libuv.cc \
src/core/lib/iomgr/polling_entity.cc \
src/core/lib/iomgr/pollset.cc \
@ -334,9 +344,12 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/iomgr/wakeup_fd_nospecial.cc \
src/core/lib/iomgr/wakeup_fd_pipe.cc \
src/core/lib/iomgr/wakeup_fd_posix.cc \
src/core/lib/iomgr/work_serializer.cc \
src/core/lib/json/json.cc \
src/core/lib/json/json_reader.cc \
src/core/lib/json/json_reader_new.cc \
src/core/lib/json/json_writer.cc \
src/core/lib/json/json_writer_new.cc \
src/core/lib/profiling/basic_timers.cc \
src/core/lib/profiling/stap_timers.cc \
src/core/lib/security/context/security_context.cc \
@ -459,272 +472,301 @@ if test "$PHP_GRPC" != "no"; then
src/php/ext/grpc/server.c \
src/php/ext/grpc/server_credentials.c \
src/php/ext/grpc/timeval.c \
third_party/abseil-cpp/absl/base/dynamic_annotations.cc \
third_party/abseil-cpp/absl/base/internal/cycleclock.cc \
third_party/abseil-cpp/absl/base/internal/raw_logging.cc \
third_party/abseil-cpp/absl/base/internal/spinlock.cc \
third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc \
third_party/abseil-cpp/absl/base/internal/sysinfo.cc \
third_party/abseil-cpp/absl/base/internal/thread_identity.cc \
third_party/abseil-cpp/absl/base/internal/throw_delegate.cc \
third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc \
third_party/abseil-cpp/absl/base/log_severity.cc \
third_party/abseil-cpp/absl/numeric/int128.cc \
third_party/abseil-cpp/absl/strings/ascii.cc \
third_party/abseil-cpp/absl/strings/charconv.cc \
third_party/abseil-cpp/absl/strings/escaping.cc \
third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc \
third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc \
third_party/abseil-cpp/absl/strings/internal/escaping.cc \
third_party/abseil-cpp/absl/strings/internal/memutil.cc \
third_party/abseil-cpp/absl/strings/internal/ostringstream.cc \
third_party/abseil-cpp/absl/strings/internal/utf8.cc \
third_party/abseil-cpp/absl/strings/match.cc \
third_party/abseil-cpp/absl/strings/numbers.cc \
third_party/abseil-cpp/absl/strings/str_cat.cc \
third_party/abseil-cpp/absl/strings/str_replace.cc \
third_party/abseil-cpp/absl/strings/str_split.cc \
third_party/abseil-cpp/absl/strings/string_view.cc \
third_party/abseil-cpp/absl/strings/substitute.cc \
third_party/abseil-cpp/absl/types/bad_optional_access.cc \
third_party/address_sorting/address_sorting.c \
third_party/address_sorting/address_sorting_posix.c \
third_party/address_sorting/address_sorting_windows.c \
third_party/boringssl/crypto/asn1/a_bitstr.c \
third_party/boringssl/crypto/asn1/a_bool.c \
third_party/boringssl/crypto/asn1/a_d2i_fp.c \
third_party/boringssl/crypto/asn1/a_dup.c \
third_party/boringssl/crypto/asn1/a_enum.c \
third_party/boringssl/crypto/asn1/a_gentm.c \
third_party/boringssl/crypto/asn1/a_i2d_fp.c \
third_party/boringssl/crypto/asn1/a_int.c \
third_party/boringssl/crypto/asn1/a_mbstr.c \
third_party/boringssl/crypto/asn1/a_object.c \
third_party/boringssl/crypto/asn1/a_octet.c \
third_party/boringssl/crypto/asn1/a_print.c \
third_party/boringssl/crypto/asn1/a_strnid.c \
third_party/boringssl/crypto/asn1/a_time.c \
third_party/boringssl/crypto/asn1/a_type.c \
third_party/boringssl/crypto/asn1/a_utctm.c \
third_party/boringssl/crypto/asn1/a_utf8.c \
third_party/boringssl/crypto/asn1/asn1_lib.c \
third_party/boringssl/crypto/asn1/asn1_par.c \
third_party/boringssl/crypto/asn1/asn_pack.c \
third_party/boringssl/crypto/asn1/f_enum.c \
third_party/boringssl/crypto/asn1/f_int.c \
third_party/boringssl/crypto/asn1/f_string.c \
third_party/boringssl/crypto/asn1/tasn_dec.c \
third_party/boringssl/crypto/asn1/tasn_enc.c \
third_party/boringssl/crypto/asn1/tasn_fre.c \
third_party/boringssl/crypto/asn1/tasn_new.c \
third_party/boringssl/crypto/asn1/tasn_typ.c \
third_party/boringssl/crypto/asn1/tasn_utl.c \
third_party/boringssl/crypto/asn1/time_support.c \
third_party/boringssl/crypto/base64/base64.c \
third_party/boringssl/crypto/bio/bio.c \
third_party/boringssl/crypto/bio/bio_mem.c \
third_party/boringssl/crypto/bio/connect.c \
third_party/boringssl/crypto/bio/fd.c \
third_party/boringssl/crypto/bio/file.c \
third_party/boringssl/crypto/bio/hexdump.c \
third_party/boringssl/crypto/bio/pair.c \
third_party/boringssl/crypto/bio/printf.c \
third_party/boringssl/crypto/bio/socket.c \
third_party/boringssl/crypto/bio/socket_helper.c \
third_party/boringssl/crypto/bn_extra/bn_asn1.c \
third_party/boringssl/crypto/bn_extra/convert.c \
third_party/boringssl/crypto/buf/buf.c \
third_party/boringssl/crypto/bytestring/asn1_compat.c \
third_party/boringssl/crypto/bytestring/ber.c \
third_party/boringssl/crypto/bytestring/cbb.c \
third_party/boringssl/crypto/bytestring/cbs.c \
third_party/boringssl/crypto/bytestring/unicode.c \
third_party/boringssl/crypto/chacha/chacha.c \
third_party/boringssl/crypto/cipher_extra/cipher_extra.c \
third_party/boringssl/crypto/cipher_extra/derive_key.c \
third_party/boringssl/crypto/cipher_extra/e_aesccm.c \
third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c \
third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c \
third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c \
third_party/boringssl/crypto/cipher_extra/e_null.c \
third_party/boringssl/crypto/cipher_extra/e_rc2.c \
third_party/boringssl/crypto/cipher_extra/e_rc4.c \
third_party/boringssl/crypto/cipher_extra/e_tls.c \
third_party/boringssl/crypto/cipher_extra/tls_cbc.c \
third_party/boringssl/crypto/cmac/cmac.c \
third_party/boringssl/crypto/conf/conf.c \
third_party/boringssl/crypto/cpu-aarch64-fuchsia.c \
third_party/boringssl/crypto/cpu-aarch64-linux.c \
third_party/boringssl/crypto/cpu-arm-linux.c \
third_party/boringssl/crypto/cpu-arm.c \
third_party/boringssl/crypto/cpu-intel.c \
third_party/boringssl/crypto/cpu-ppc64le.c \
third_party/boringssl/crypto/crypto.c \
third_party/boringssl/crypto/curve25519/spake25519.c \
third_party/boringssl/crypto/dh/check.c \
third_party/boringssl/crypto/dh/dh.c \
third_party/boringssl/crypto/dh/dh_asn1.c \
third_party/boringssl/crypto/dh/params.c \
third_party/boringssl/crypto/digest_extra/digest_extra.c \
third_party/boringssl/crypto/dsa/dsa.c \
third_party/boringssl/crypto/dsa/dsa_asn1.c \
third_party/boringssl/crypto/ec_extra/ec_asn1.c \
third_party/boringssl/crypto/ec_extra/ec_derive.c \
third_party/boringssl/crypto/ecdh_extra/ecdh_extra.c \
third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c \
third_party/boringssl/crypto/engine/engine.c \
third_party/boringssl/crypto/err/err.c \
third_party/boringssl/crypto/evp/digestsign.c \
third_party/boringssl/crypto/evp/evp.c \
third_party/boringssl/crypto/evp/evp_asn1.c \
third_party/boringssl/crypto/evp/evp_ctx.c \
third_party/boringssl/crypto/evp/p_dsa_asn1.c \
third_party/boringssl/crypto/evp/p_ec.c \
third_party/boringssl/crypto/evp/p_ec_asn1.c \
third_party/boringssl/crypto/evp/p_ed25519.c \
third_party/boringssl/crypto/evp/p_ed25519_asn1.c \
third_party/boringssl/crypto/evp/p_rsa.c \
third_party/boringssl/crypto/evp/p_rsa_asn1.c \
third_party/boringssl/crypto/evp/p_x25519.c \
third_party/boringssl/crypto/evp/p_x25519_asn1.c \
third_party/boringssl/crypto/evp/pbkdf.c \
third_party/boringssl/crypto/evp/print.c \
third_party/boringssl/crypto/evp/scrypt.c \
third_party/boringssl/crypto/evp/sign.c \
third_party/boringssl/crypto/ex_data.c \
third_party/boringssl/crypto/fipsmodule/bcm.c \
third_party/boringssl/crypto/fipsmodule/fips_shared_support.c \
third_party/boringssl/crypto/fipsmodule/is_fips.c \
third_party/boringssl/crypto/hkdf/hkdf.c \
third_party/boringssl/crypto/hrss/hrss.c \
third_party/boringssl/crypto/lhash/lhash.c \
third_party/boringssl/crypto/mem.c \
third_party/boringssl/crypto/obj/obj.c \
third_party/boringssl/crypto/obj/obj_xref.c \
third_party/boringssl/crypto/pem/pem_all.c \
third_party/boringssl/crypto/pem/pem_info.c \
third_party/boringssl/crypto/pem/pem_lib.c \
third_party/boringssl/crypto/pem/pem_oth.c \
third_party/boringssl/crypto/pem/pem_pk8.c \
third_party/boringssl/crypto/pem/pem_pkey.c \
third_party/boringssl/crypto/pem/pem_x509.c \
third_party/boringssl/crypto/pem/pem_xaux.c \
third_party/boringssl/crypto/pkcs7/pkcs7.c \
third_party/boringssl/crypto/pkcs7/pkcs7_x509.c \
third_party/boringssl/crypto/pkcs8/p5_pbev2.c \
third_party/boringssl/crypto/pkcs8/pkcs8.c \
third_party/boringssl/crypto/pkcs8/pkcs8_x509.c \
third_party/boringssl/crypto/poly1305/poly1305.c \
third_party/boringssl/crypto/poly1305/poly1305_arm.c \
third_party/boringssl/crypto/poly1305/poly1305_vec.c \
third_party/boringssl/crypto/pool/pool.c \
third_party/boringssl/crypto/rand_extra/deterministic.c \
third_party/boringssl/crypto/rand_extra/forkunsafe.c \
third_party/boringssl/crypto/rand_extra/fuchsia.c \
third_party/boringssl/crypto/rand_extra/rand_extra.c \
third_party/boringssl/crypto/rand_extra/windows.c \
third_party/boringssl/crypto/rc4/rc4.c \
third_party/boringssl/crypto/refcount_c11.c \
third_party/boringssl/crypto/refcount_lock.c \
third_party/boringssl/crypto/rsa_extra/rsa_asn1.c \
third_party/boringssl/crypto/rsa_extra/rsa_print.c \
third_party/boringssl/crypto/siphash/siphash.c \
third_party/boringssl/crypto/stack/stack.c \
third_party/boringssl/crypto/thread.c \
third_party/boringssl/crypto/thread_none.c \
third_party/boringssl/crypto/thread_pthread.c \
third_party/boringssl/crypto/thread_win.c \
third_party/boringssl/crypto/x509/a_digest.c \
third_party/boringssl/crypto/x509/a_sign.c \
third_party/boringssl/crypto/x509/a_strex.c \
third_party/boringssl/crypto/x509/a_verify.c \
third_party/boringssl/crypto/x509/algorithm.c \
third_party/boringssl/crypto/x509/asn1_gen.c \
third_party/boringssl/crypto/x509/by_dir.c \
third_party/boringssl/crypto/x509/by_file.c \
third_party/boringssl/crypto/x509/i2d_pr.c \
third_party/boringssl/crypto/x509/rsa_pss.c \
third_party/boringssl/crypto/x509/t_crl.c \
third_party/boringssl/crypto/x509/t_req.c \
third_party/boringssl/crypto/x509/t_x509.c \
third_party/boringssl/crypto/x509/t_x509a.c \
third_party/boringssl/crypto/x509/x509.c \
third_party/boringssl/crypto/x509/x509_att.c \
third_party/boringssl/crypto/x509/x509_cmp.c \
third_party/boringssl/crypto/x509/x509_d2.c \
third_party/boringssl/crypto/x509/x509_def.c \
third_party/boringssl/crypto/x509/x509_ext.c \
third_party/boringssl/crypto/x509/x509_lu.c \
third_party/boringssl/crypto/x509/x509_obj.c \
third_party/boringssl/crypto/x509/x509_r2x.c \
third_party/boringssl/crypto/x509/x509_req.c \
third_party/boringssl/crypto/x509/x509_set.c \
third_party/boringssl/crypto/x509/x509_trs.c \
third_party/boringssl/crypto/x509/x509_txt.c \
third_party/boringssl/crypto/x509/x509_v3.c \
third_party/boringssl/crypto/x509/x509_vfy.c \
third_party/boringssl/crypto/x509/x509_vpm.c \
third_party/boringssl/crypto/x509/x509cset.c \
third_party/boringssl/crypto/x509/x509name.c \
third_party/boringssl/crypto/x509/x509rset.c \
third_party/boringssl/crypto/x509/x509spki.c \
third_party/boringssl/crypto/x509/x_algor.c \
third_party/boringssl/crypto/x509/x_all.c \
third_party/boringssl/crypto/x509/x_attrib.c \
third_party/boringssl/crypto/x509/x_crl.c \
third_party/boringssl/crypto/x509/x_exten.c \
third_party/boringssl/crypto/x509/x_info.c \
third_party/boringssl/crypto/x509/x_name.c \
third_party/boringssl/crypto/x509/x_pkey.c \
third_party/boringssl/crypto/x509/x_pubkey.c \
third_party/boringssl/crypto/x509/x_req.c \
third_party/boringssl/crypto/x509/x_sig.c \
third_party/boringssl/crypto/x509/x_spki.c \
third_party/boringssl/crypto/x509/x_val.c \
third_party/boringssl/crypto/x509/x_x509.c \
third_party/boringssl/crypto/x509/x_x509a.c \
third_party/boringssl/crypto/x509v3/pcy_cache.c \
third_party/boringssl/crypto/x509v3/pcy_data.c \
third_party/boringssl/crypto/x509v3/pcy_lib.c \
third_party/boringssl/crypto/x509v3/pcy_map.c \
third_party/boringssl/crypto/x509v3/pcy_node.c \
third_party/boringssl/crypto/x509v3/pcy_tree.c \
third_party/boringssl/crypto/x509v3/v3_akey.c \
third_party/boringssl/crypto/x509v3/v3_akeya.c \
third_party/boringssl/crypto/x509v3/v3_alt.c \
third_party/boringssl/crypto/x509v3/v3_bcons.c \
third_party/boringssl/crypto/x509v3/v3_bitst.c \
third_party/boringssl/crypto/x509v3/v3_conf.c \
third_party/boringssl/crypto/x509v3/v3_cpols.c \
third_party/boringssl/crypto/x509v3/v3_crld.c \
third_party/boringssl/crypto/x509v3/v3_enum.c \
third_party/boringssl/crypto/x509v3/v3_extku.c \
third_party/boringssl/crypto/x509v3/v3_genn.c \
third_party/boringssl/crypto/x509v3/v3_ia5.c \
third_party/boringssl/crypto/x509v3/v3_info.c \
third_party/boringssl/crypto/x509v3/v3_int.c \
third_party/boringssl/crypto/x509v3/v3_lib.c \
third_party/boringssl/crypto/x509v3/v3_ncons.c \
third_party/boringssl/crypto/x509v3/v3_ocsp.c \
third_party/boringssl/crypto/x509v3/v3_pci.c \
third_party/boringssl/crypto/x509v3/v3_pcia.c \
third_party/boringssl/crypto/x509v3/v3_pcons.c \
third_party/boringssl/crypto/x509v3/v3_pku.c \
third_party/boringssl/crypto/x509v3/v3_pmaps.c \
third_party/boringssl/crypto/x509v3/v3_prn.c \
third_party/boringssl/crypto/x509v3/v3_purp.c \
third_party/boringssl/crypto/x509v3/v3_skey.c \
third_party/boringssl/crypto/x509v3/v3_sxnet.c \
third_party/boringssl/crypto/x509v3/v3_utl.c \
third_party/boringssl/ssl/bio_ssl.cc \
third_party/boringssl/ssl/d1_both.cc \
third_party/boringssl/ssl/d1_lib.cc \
third_party/boringssl/ssl/d1_pkt.cc \
third_party/boringssl/ssl/d1_srtp.cc \
third_party/boringssl/ssl/dtls_method.cc \
third_party/boringssl/ssl/dtls_record.cc \
third_party/boringssl/ssl/handoff.cc \
third_party/boringssl/ssl/handshake.cc \
third_party/boringssl/ssl/handshake_client.cc \
third_party/boringssl/ssl/handshake_server.cc \
third_party/boringssl/ssl/s3_both.cc \
third_party/boringssl/ssl/s3_lib.cc \
third_party/boringssl/ssl/s3_pkt.cc \
third_party/boringssl/ssl/ssl_aead_ctx.cc \
third_party/boringssl/ssl/ssl_asn1.cc \
third_party/boringssl/ssl/ssl_buffer.cc \
third_party/boringssl/ssl/ssl_cert.cc \
third_party/boringssl/ssl/ssl_cipher.cc \
third_party/boringssl/ssl/ssl_file.cc \
third_party/boringssl/ssl/ssl_key_share.cc \
third_party/boringssl/ssl/ssl_lib.cc \
third_party/boringssl/ssl/ssl_privkey.cc \
third_party/boringssl/ssl/ssl_session.cc \
third_party/boringssl/ssl/ssl_stat.cc \
third_party/boringssl/ssl/ssl_transcript.cc \
third_party/boringssl/ssl/ssl_versions.cc \
third_party/boringssl/ssl/ssl_x509.cc \
third_party/boringssl/ssl/t1_enc.cc \
third_party/boringssl/ssl/t1_lib.cc \
third_party/boringssl/ssl/tls13_both.cc \
third_party/boringssl/ssl/tls13_client.cc \
third_party/boringssl/ssl/tls13_enc.cc \
third_party/boringssl/ssl/tls13_server.cc \
third_party/boringssl/ssl/tls_method.cc \
third_party/boringssl/ssl/tls_record.cc \
third_party/boringssl/third_party/fiat/curve25519.c \
third_party/boringssl-with-bazel/err_data.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c \
third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c \
third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c \
third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c \
third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c \
third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c \
third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c \
third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c \
third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c \
third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c \
third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c \
third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c \
third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c \
third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c \
third_party/boringssl-with-bazel/src/crypto/base64/base64.c \
third_party/boringssl-with-bazel/src/crypto/bio/bio.c \
third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c \
third_party/boringssl-with-bazel/src/crypto/bio/connect.c \
third_party/boringssl-with-bazel/src/crypto/bio/fd.c \
third_party/boringssl-with-bazel/src/crypto/bio/file.c \
third_party/boringssl-with-bazel/src/crypto/bio/hexdump.c \
third_party/boringssl-with-bazel/src/crypto/bio/pair.c \
third_party/boringssl-with-bazel/src/crypto/bio/printf.c \
third_party/boringssl-with-bazel/src/crypto/bio/socket.c \
third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c \
third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c \
third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c \
third_party/boringssl-with-bazel/src/crypto/buf/buf.c \
third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c \
third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c \
third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c \
third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c \
third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c \
third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c \
third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c \
third_party/boringssl-with-bazel/src/crypto/conf/conf.c \
third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-fuchsia.c \
third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-linux.c \
third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c \
third_party/boringssl-with-bazel/src/crypto/cpu-arm.c \
third_party/boringssl-with-bazel/src/crypto/cpu-intel.c \
third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c \
third_party/boringssl-with-bazel/src/crypto/crypto.c \
third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c \
third_party/boringssl-with-bazel/src/crypto/dh/check.c \
third_party/boringssl-with-bazel/src/crypto/dh/dh.c \
third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.c \
third_party/boringssl-with-bazel/src/crypto/dh/params.c \
third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c \
third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c \
third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c \
third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c \
third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c \
third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c \
third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c \
third_party/boringssl-with-bazel/src/crypto/engine/engine.c \
third_party/boringssl-with-bazel/src/crypto/err/err.c \
third_party/boringssl-with-bazel/src/crypto/evp/digestsign.c \
third_party/boringssl-with-bazel/src/crypto/evp/evp.c \
third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c \
third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c \
third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c \
third_party/boringssl-with-bazel/src/crypto/evp/print.c \
third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c \
third_party/boringssl-with-bazel/src/crypto/evp/sign.c \
third_party/boringssl-with-bazel/src/crypto/ex_data.c \
third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c \
third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c \
third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c \
third_party/boringssl-with-bazel/src/crypto/hkdf/hkdf.c \
third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c \
third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c \
third_party/boringssl-with-bazel/src/crypto/mem.c \
third_party/boringssl-with-bazel/src/crypto/obj/obj.c \
third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.c \
third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c \
third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c \
third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c \
third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c \
third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c \
third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c \
third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c \
third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c \
third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c \
third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c \
third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c \
third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c \
third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c \
third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c \
third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c \
third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c \
third_party/boringssl-with-bazel/src/crypto/pool/pool.c \
third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c \
third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c \
third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c \
third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c \
third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c \
third_party/boringssl-with-bazel/src/crypto/rc4/rc4.c \
third_party/boringssl-with-bazel/src/crypto/refcount_c11.c \
third_party/boringssl-with-bazel/src/crypto/refcount_lock.c \
third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c \
third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c \
third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c \
third_party/boringssl-with-bazel/src/crypto/stack/stack.c \
third_party/boringssl-with-bazel/src/crypto/thread.c \
third_party/boringssl-with-bazel/src/crypto/thread_none.c \
third_party/boringssl-with-bazel/src/crypto/thread_pthread.c \
third_party/boringssl-with-bazel/src/crypto/thread_win.c \
third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c \
third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c \
third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c \
third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c \
third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c \
third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c \
third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c \
third_party/boringssl-with-bazel/src/crypto/x509/by_file.c \
third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c \
third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c \
third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c \
third_party/boringssl-with-bazel/src/crypto/x509/t_req.c \
third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c \
third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509name.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_all.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_info.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_name.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_req.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_val.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c \
third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc \
third_party/boringssl-with-bazel/src/ssl/d1_both.cc \
third_party/boringssl-with-bazel/src/ssl/d1_lib.cc \
third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc \
third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc \
third_party/boringssl-with-bazel/src/ssl/dtls_method.cc \
third_party/boringssl-with-bazel/src/ssl/dtls_record.cc \
third_party/boringssl-with-bazel/src/ssl/handoff.cc \
third_party/boringssl-with-bazel/src/ssl/handshake.cc \
third_party/boringssl-with-bazel/src/ssl/handshake_client.cc \
third_party/boringssl-with-bazel/src/ssl/handshake_server.cc \
third_party/boringssl-with-bazel/src/ssl/s3_both.cc \
third_party/boringssl-with-bazel/src/ssl/s3_lib.cc \
third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_file.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_session.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc \
third_party/boringssl-with-bazel/src/ssl/t1_enc.cc \
third_party/boringssl-with-bazel/src/ssl/t1_lib.cc \
third_party/boringssl-with-bazel/src/ssl/tls13_both.cc \
third_party/boringssl-with-bazel/src/ssl/tls13_client.cc \
third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc \
third_party/boringssl-with-bazel/src/ssl/tls13_server.cc \
third_party/boringssl-with-bazel/src/ssl/tls_method.cc \
third_party/boringssl-with-bazel/src/ssl/tls_record.cc \
third_party/boringssl-with-bazel/src/third_party/fiat/curve25519.c \
third_party/upb/upb/decode.c \
third_party/upb/upb/encode.c \
third_party/upb/upb/msg.c \
@ -736,7 +778,6 @@ if test "$PHP_GRPC" != "no"; then
-D_HAS_EXCEPTIONS=0 -DNOMINMAX -DGRPC_ARES=0 \
-DGRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK=1)
PHP_ADD_BUILD_DIR($ext_builddir/src/boringssl)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/census)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/health)
@ -774,9 +815,15 @@ if test "$PHP_GRPC" != "no"; then
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/cluster)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/core)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/endpoint)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/listener)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/route)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/listener/v2)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/service/discovery/v2)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/service/load_stats/v2)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/type)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/type/matcher)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/gogoproto)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/google/api)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/google/protobuf)
@ -832,46 +879,53 @@ if test "$PHP_GRPC" != "no"; then
PHP_ADD_BUILD_DIR($ext_builddir/src/core/tsi/alts/zero_copy_frame_protector)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/tsi/ssl/session_cache)
PHP_ADD_BUILD_DIR($ext_builddir/src/php/ext/grpc)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/base)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/base/internal)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/numeric)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/strings)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/strings/internal)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/types)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/address_sorting)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/asn1)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/base64)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/bio)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/bn_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/buf)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/bytestring)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/chacha)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/cipher_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/cmac)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/conf)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/curve25519)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/dh)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/digest_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/dsa)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/ec_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/ecdh_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/ecdsa_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/engine)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/err)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/evp)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/fipsmodule)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/hkdf)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/hrss)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/lhash)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/obj)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/pem)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/pkcs7)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/pkcs8)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/poly1305)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/pool)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/rand_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/rc4)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/rsa_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/siphash)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/stack)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/x509)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/x509v3)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/ssl)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/third_party/fiat)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/asn1)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/base64)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/bio)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/bn_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/buf)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/bytestring)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/chacha)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/cipher_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/cmac)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/conf)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/curve25519)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/dh)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/digest_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/dsa)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/ec_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/ecdh_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/engine)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/err)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/evp)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/fipsmodule)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/hkdf)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/hrss)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/lhash)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/obj)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/pem)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/pkcs7)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/pkcs8)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/poly1305)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/pool)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/rand_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/rc4)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/rsa_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/siphash)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/stack)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/x509)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/x509v3)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/ssl)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/third_party/fiat)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/upb/upb)
fi

@ -6,7 +6,6 @@ ARG_WITH("grpc", "grpc support", "no");
if (PHP_GRPC != "no") {
EXTENSION("grpc",
"src\\boringssl\\err_data.c " +
"src\\core\\ext\\filters\\census\\grpc_context.cc " +
"src\\core\\ext\\filters\\client_channel\\backend_metric.cc " +
"src\\core\\ext\\filters\\client_channel\\backup_poller.cc " +
@ -124,9 +123,20 @@ if (PHP_GRPC != "no") {
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\eds.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint\\endpoint.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint\\load_report.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\lds.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener\\listener.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener\\udp_listener_config.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\rds.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\route\\route.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\api\\v2\\srds.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\config\\filter\\accesslog\\v2\\accesslog.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\config\\filter\\network\\http_connection_manager\\v2\\http_connection_manager.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\config\\listener\\v2\\api_listener.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\service\\discovery\\v2\\ads.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\service\\load_stats\\v2\\lrs.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\type\\http.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\type\\matcher\\regex.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\type\\matcher\\string.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\type\\percent.upb.c " +
"src\\core\\ext\\upb-generated\\envoy\\type\\range.upb.c " +
"src\\core\\ext\\upb-generated\\gogoproto\\gogo.upb.c " +
@ -250,7 +260,6 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\iomgr\\is_epollexclusive_available.cc " +
"src\\core\\lib\\iomgr\\load_file.cc " +
"src\\core\\lib\\iomgr\\lockfree_event.cc " +
"src\\core\\lib\\iomgr\\logical_thread.cc " +
"src\\core\\lib\\iomgr\\poller\\eventmanager_libuv.cc " +
"src\\core\\lib\\iomgr\\polling_entity.cc " +
"src\\core\\lib\\iomgr\\pollset.cc " +
@ -304,9 +313,12 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\iomgr\\wakeup_fd_nospecial.cc " +
"src\\core\\lib\\iomgr\\wakeup_fd_pipe.cc " +
"src\\core\\lib\\iomgr\\wakeup_fd_posix.cc " +
"src\\core\\lib\\iomgr\\work_serializer.cc " +
"src\\core\\lib\\json\\json.cc " +
"src\\core\\lib\\json\\json_reader.cc " +
"src\\core\\lib\\json\\json_reader_new.cc " +
"src\\core\\lib\\json\\json_writer.cc " +
"src\\core\\lib\\json\\json_writer_new.cc " +
"src\\core\\lib\\profiling\\basic_timers.cc " +
"src\\core\\lib\\profiling\\stap_timers.cc " +
"src\\core\\lib\\security\\context\\security_context.cc " +
@ -429,272 +441,301 @@ if (PHP_GRPC != "no") {
"src\\php\\ext\\grpc\\server.c " +
"src\\php\\ext\\grpc\\server_credentials.c " +
"src\\php\\ext\\grpc\\timeval.c " +
"third_party\\abseil-cpp\\absl\\base\\dynamic_annotations.cc " +
"third_party\\abseil-cpp\\absl\\base\\internal\\cycleclock.cc " +
"third_party\\abseil-cpp\\absl\\base\\internal\\raw_logging.cc " +
"third_party\\abseil-cpp\\absl\\base\\internal\\spinlock.cc " +
"third_party\\abseil-cpp\\absl\\base\\internal\\spinlock_wait.cc " +
"third_party\\abseil-cpp\\absl\\base\\internal\\sysinfo.cc " +
"third_party\\abseil-cpp\\absl\\base\\internal\\thread_identity.cc " +
"third_party\\abseil-cpp\\absl\\base\\internal\\throw_delegate.cc " +
"third_party\\abseil-cpp\\absl\\base\\internal\\unscaledcycleclock.cc " +
"third_party\\abseil-cpp\\absl\\base\\log_severity.cc " +
"third_party\\abseil-cpp\\absl\\numeric\\int128.cc " +
"third_party\\abseil-cpp\\absl\\strings\\ascii.cc " +
"third_party\\abseil-cpp\\absl\\strings\\charconv.cc " +
"third_party\\abseil-cpp\\absl\\strings\\escaping.cc " +
"third_party\\abseil-cpp\\absl\\strings\\internal\\charconv_bigint.cc " +
"third_party\\abseil-cpp\\absl\\strings\\internal\\charconv_parse.cc " +
"third_party\\abseil-cpp\\absl\\strings\\internal\\escaping.cc " +
"third_party\\abseil-cpp\\absl\\strings\\internal\\memutil.cc " +
"third_party\\abseil-cpp\\absl\\strings\\internal\\ostringstream.cc " +
"third_party\\abseil-cpp\\absl\\strings\\internal\\utf8.cc " +
"third_party\\abseil-cpp\\absl\\strings\\match.cc " +
"third_party\\abseil-cpp\\absl\\strings\\numbers.cc " +
"third_party\\abseil-cpp\\absl\\strings\\str_cat.cc " +
"third_party\\abseil-cpp\\absl\\strings\\str_replace.cc " +
"third_party\\abseil-cpp\\absl\\strings\\str_split.cc " +
"third_party\\abseil-cpp\\absl\\strings\\string_view.cc " +
"third_party\\abseil-cpp\\absl\\strings\\substitute.cc " +
"third_party\\abseil-cpp\\absl\\types\\bad_optional_access.cc " +
"third_party\\address_sorting\\address_sorting.c " +
"third_party\\address_sorting\\address_sorting_posix.c " +
"third_party\\address_sorting\\address_sorting_windows.c " +
"third_party\\boringssl\\crypto\\asn1\\a_bitstr.c " +
"third_party\\boringssl\\crypto\\asn1\\a_bool.c " +
"third_party\\boringssl\\crypto\\asn1\\a_d2i_fp.c " +
"third_party\\boringssl\\crypto\\asn1\\a_dup.c " +
"third_party\\boringssl\\crypto\\asn1\\a_enum.c " +
"third_party\\boringssl\\crypto\\asn1\\a_gentm.c " +
"third_party\\boringssl\\crypto\\asn1\\a_i2d_fp.c " +
"third_party\\boringssl\\crypto\\asn1\\a_int.c " +
"third_party\\boringssl\\crypto\\asn1\\a_mbstr.c " +
"third_party\\boringssl\\crypto\\asn1\\a_object.c " +
"third_party\\boringssl\\crypto\\asn1\\a_octet.c " +
"third_party\\boringssl\\crypto\\asn1\\a_print.c " +
"third_party\\boringssl\\crypto\\asn1\\a_strnid.c " +
"third_party\\boringssl\\crypto\\asn1\\a_time.c " +
"third_party\\boringssl\\crypto\\asn1\\a_type.c " +
"third_party\\boringssl\\crypto\\asn1\\a_utctm.c " +
"third_party\\boringssl\\crypto\\asn1\\a_utf8.c " +
"third_party\\boringssl\\crypto\\asn1\\asn1_lib.c " +
"third_party\\boringssl\\crypto\\asn1\\asn1_par.c " +
"third_party\\boringssl\\crypto\\asn1\\asn_pack.c " +
"third_party\\boringssl\\crypto\\asn1\\f_enum.c " +
"third_party\\boringssl\\crypto\\asn1\\f_int.c " +
"third_party\\boringssl\\crypto\\asn1\\f_string.c " +
"third_party\\boringssl\\crypto\\asn1\\tasn_dec.c " +
"third_party\\boringssl\\crypto\\asn1\\tasn_enc.c " +
"third_party\\boringssl\\crypto\\asn1\\tasn_fre.c " +
"third_party\\boringssl\\crypto\\asn1\\tasn_new.c " +
"third_party\\boringssl\\crypto\\asn1\\tasn_typ.c " +
"third_party\\boringssl\\crypto\\asn1\\tasn_utl.c " +
"third_party\\boringssl\\crypto\\asn1\\time_support.c " +
"third_party\\boringssl\\crypto\\base64\\base64.c " +
"third_party\\boringssl\\crypto\\bio\\bio.c " +
"third_party\\boringssl\\crypto\\bio\\bio_mem.c " +
"third_party\\boringssl\\crypto\\bio\\connect.c " +
"third_party\\boringssl\\crypto\\bio\\fd.c " +
"third_party\\boringssl\\crypto\\bio\\file.c " +
"third_party\\boringssl\\crypto\\bio\\hexdump.c " +
"third_party\\boringssl\\crypto\\bio\\pair.c " +
"third_party\\boringssl\\crypto\\bio\\printf.c " +
"third_party\\boringssl\\crypto\\bio\\socket.c " +
"third_party\\boringssl\\crypto\\bio\\socket_helper.c " +
"third_party\\boringssl\\crypto\\bn_extra\\bn_asn1.c " +
"third_party\\boringssl\\crypto\\bn_extra\\convert.c " +
"third_party\\boringssl\\crypto\\buf\\buf.c " +
"third_party\\boringssl\\crypto\\bytestring\\asn1_compat.c " +
"third_party\\boringssl\\crypto\\bytestring\\ber.c " +
"third_party\\boringssl\\crypto\\bytestring\\cbb.c " +
"third_party\\boringssl\\crypto\\bytestring\\cbs.c " +
"third_party\\boringssl\\crypto\\bytestring\\unicode.c " +
"third_party\\boringssl\\crypto\\chacha\\chacha.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\cipher_extra.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\derive_key.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\e_aesccm.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\e_aesctrhmac.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\e_aesgcmsiv.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\e_chacha20poly1305.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\e_null.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\e_rc2.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\e_rc4.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\e_tls.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\tls_cbc.c " +
"third_party\\boringssl\\crypto\\cmac\\cmac.c " +
"third_party\\boringssl\\crypto\\conf\\conf.c " +
"third_party\\boringssl\\crypto\\cpu-aarch64-fuchsia.c " +
"third_party\\boringssl\\crypto\\cpu-aarch64-linux.c " +
"third_party\\boringssl\\crypto\\cpu-arm-linux.c " +
"third_party\\boringssl\\crypto\\cpu-arm.c " +
"third_party\\boringssl\\crypto\\cpu-intel.c " +
"third_party\\boringssl\\crypto\\cpu-ppc64le.c " +
"third_party\\boringssl\\crypto\\crypto.c " +
"third_party\\boringssl\\crypto\\curve25519\\spake25519.c " +
"third_party\\boringssl\\crypto\\dh\\check.c " +
"third_party\\boringssl\\crypto\\dh\\dh.c " +
"third_party\\boringssl\\crypto\\dh\\dh_asn1.c " +
"third_party\\boringssl\\crypto\\dh\\params.c " +
"third_party\\boringssl\\crypto\\digest_extra\\digest_extra.c " +
"third_party\\boringssl\\crypto\\dsa\\dsa.c " +
"third_party\\boringssl\\crypto\\dsa\\dsa_asn1.c " +
"third_party\\boringssl\\crypto\\ec_extra\\ec_asn1.c " +
"third_party\\boringssl\\crypto\\ec_extra\\ec_derive.c " +
"third_party\\boringssl\\crypto\\ecdh_extra\\ecdh_extra.c " +
"third_party\\boringssl\\crypto\\ecdsa_extra\\ecdsa_asn1.c " +
"third_party\\boringssl\\crypto\\engine\\engine.c " +
"third_party\\boringssl\\crypto\\err\\err.c " +
"third_party\\boringssl\\crypto\\evp\\digestsign.c " +
"third_party\\boringssl\\crypto\\evp\\evp.c " +
"third_party\\boringssl\\crypto\\evp\\evp_asn1.c " +
"third_party\\boringssl\\crypto\\evp\\evp_ctx.c " +
"third_party\\boringssl\\crypto\\evp\\p_dsa_asn1.c " +
"third_party\\boringssl\\crypto\\evp\\p_ec.c " +
"third_party\\boringssl\\crypto\\evp\\p_ec_asn1.c " +
"third_party\\boringssl\\crypto\\evp\\p_ed25519.c " +
"third_party\\boringssl\\crypto\\evp\\p_ed25519_asn1.c " +
"third_party\\boringssl\\crypto\\evp\\p_rsa.c " +
"third_party\\boringssl\\crypto\\evp\\p_rsa_asn1.c " +
"third_party\\boringssl\\crypto\\evp\\p_x25519.c " +
"third_party\\boringssl\\crypto\\evp\\p_x25519_asn1.c " +
"third_party\\boringssl\\crypto\\evp\\pbkdf.c " +
"third_party\\boringssl\\crypto\\evp\\print.c " +
"third_party\\boringssl\\crypto\\evp\\scrypt.c " +
"third_party\\boringssl\\crypto\\evp\\sign.c " +
"third_party\\boringssl\\crypto\\ex_data.c " +
"third_party\\boringssl\\crypto\\fipsmodule\\bcm.c " +
"third_party\\boringssl\\crypto\\fipsmodule\\fips_shared_support.c " +
"third_party\\boringssl\\crypto\\fipsmodule\\is_fips.c " +
"third_party\\boringssl\\crypto\\hkdf\\hkdf.c " +
"third_party\\boringssl\\crypto\\hrss\\hrss.c " +
"third_party\\boringssl\\crypto\\lhash\\lhash.c " +
"third_party\\boringssl\\crypto\\mem.c " +
"third_party\\boringssl\\crypto\\obj\\obj.c " +
"third_party\\boringssl\\crypto\\obj\\obj_xref.c " +
"third_party\\boringssl\\crypto\\pem\\pem_all.c " +
"third_party\\boringssl\\crypto\\pem\\pem_info.c " +
"third_party\\boringssl\\crypto\\pem\\pem_lib.c " +
"third_party\\boringssl\\crypto\\pem\\pem_oth.c " +
"third_party\\boringssl\\crypto\\pem\\pem_pk8.c " +
"third_party\\boringssl\\crypto\\pem\\pem_pkey.c " +
"third_party\\boringssl\\crypto\\pem\\pem_x509.c " +
"third_party\\boringssl\\crypto\\pem\\pem_xaux.c " +
"third_party\\boringssl\\crypto\\pkcs7\\pkcs7.c " +
"third_party\\boringssl\\crypto\\pkcs7\\pkcs7_x509.c " +
"third_party\\boringssl\\crypto\\pkcs8\\p5_pbev2.c " +
"third_party\\boringssl\\crypto\\pkcs8\\pkcs8.c " +
"third_party\\boringssl\\crypto\\pkcs8\\pkcs8_x509.c " +
"third_party\\boringssl\\crypto\\poly1305\\poly1305.c " +
"third_party\\boringssl\\crypto\\poly1305\\poly1305_arm.c " +
"third_party\\boringssl\\crypto\\poly1305\\poly1305_vec.c " +
"third_party\\boringssl\\crypto\\pool\\pool.c " +
"third_party\\boringssl\\crypto\\rand_extra\\deterministic.c " +
"third_party\\boringssl\\crypto\\rand_extra\\forkunsafe.c " +
"third_party\\boringssl\\crypto\\rand_extra\\fuchsia.c " +
"third_party\\boringssl\\crypto\\rand_extra\\rand_extra.c " +
"third_party\\boringssl\\crypto\\rand_extra\\windows.c " +
"third_party\\boringssl\\crypto\\rc4\\rc4.c " +
"third_party\\boringssl\\crypto\\refcount_c11.c " +
"third_party\\boringssl\\crypto\\refcount_lock.c " +
"third_party\\boringssl\\crypto\\rsa_extra\\rsa_asn1.c " +
"third_party\\boringssl\\crypto\\rsa_extra\\rsa_print.c " +
"third_party\\boringssl\\crypto\\siphash\\siphash.c " +
"third_party\\boringssl\\crypto\\stack\\stack.c " +
"third_party\\boringssl\\crypto\\thread.c " +
"third_party\\boringssl\\crypto\\thread_none.c " +
"third_party\\boringssl\\crypto\\thread_pthread.c " +
"third_party\\boringssl\\crypto\\thread_win.c " +
"third_party\\boringssl\\crypto\\x509\\a_digest.c " +
"third_party\\boringssl\\crypto\\x509\\a_sign.c " +
"third_party\\boringssl\\crypto\\x509\\a_strex.c " +
"third_party\\boringssl\\crypto\\x509\\a_verify.c " +
"third_party\\boringssl\\crypto\\x509\\algorithm.c " +
"third_party\\boringssl\\crypto\\x509\\asn1_gen.c " +
"third_party\\boringssl\\crypto\\x509\\by_dir.c " +
"third_party\\boringssl\\crypto\\x509\\by_file.c " +
"third_party\\boringssl\\crypto\\x509\\i2d_pr.c " +
"third_party\\boringssl\\crypto\\x509\\rsa_pss.c " +
"third_party\\boringssl\\crypto\\x509\\t_crl.c " +
"third_party\\boringssl\\crypto\\x509\\t_req.c " +
"third_party\\boringssl\\crypto\\x509\\t_x509.c " +
"third_party\\boringssl\\crypto\\x509\\t_x509a.c " +
"third_party\\boringssl\\crypto\\x509\\x509.c " +
"third_party\\boringssl\\crypto\\x509\\x509_att.c " +
"third_party\\boringssl\\crypto\\x509\\x509_cmp.c " +
"third_party\\boringssl\\crypto\\x509\\x509_d2.c " +
"third_party\\boringssl\\crypto\\x509\\x509_def.c " +
"third_party\\boringssl\\crypto\\x509\\x509_ext.c " +
"third_party\\boringssl\\crypto\\x509\\x509_lu.c " +
"third_party\\boringssl\\crypto\\x509\\x509_obj.c " +
"third_party\\boringssl\\crypto\\x509\\x509_r2x.c " +
"third_party\\boringssl\\crypto\\x509\\x509_req.c " +
"third_party\\boringssl\\crypto\\x509\\x509_set.c " +
"third_party\\boringssl\\crypto\\x509\\x509_trs.c " +
"third_party\\boringssl\\crypto\\x509\\x509_txt.c " +
"third_party\\boringssl\\crypto\\x509\\x509_v3.c " +
"third_party\\boringssl\\crypto\\x509\\x509_vfy.c " +
"third_party\\boringssl\\crypto\\x509\\x509_vpm.c " +
"third_party\\boringssl\\crypto\\x509\\x509cset.c " +
"third_party\\boringssl\\crypto\\x509\\x509name.c " +
"third_party\\boringssl\\crypto\\x509\\x509rset.c " +
"third_party\\boringssl\\crypto\\x509\\x509spki.c " +
"third_party\\boringssl\\crypto\\x509\\x_algor.c " +
"third_party\\boringssl\\crypto\\x509\\x_all.c " +
"third_party\\boringssl\\crypto\\x509\\x_attrib.c " +
"third_party\\boringssl\\crypto\\x509\\x_crl.c " +
"third_party\\boringssl\\crypto\\x509\\x_exten.c " +
"third_party\\boringssl\\crypto\\x509\\x_info.c " +
"third_party\\boringssl\\crypto\\x509\\x_name.c " +
"third_party\\boringssl\\crypto\\x509\\x_pkey.c " +
"third_party\\boringssl\\crypto\\x509\\x_pubkey.c " +
"third_party\\boringssl\\crypto\\x509\\x_req.c " +
"third_party\\boringssl\\crypto\\x509\\x_sig.c " +
"third_party\\boringssl\\crypto\\x509\\x_spki.c " +
"third_party\\boringssl\\crypto\\x509\\x_val.c " +
"third_party\\boringssl\\crypto\\x509\\x_x509.c " +
"third_party\\boringssl\\crypto\\x509\\x_x509a.c " +
"third_party\\boringssl\\crypto\\x509v3\\pcy_cache.c " +
"third_party\\boringssl\\crypto\\x509v3\\pcy_data.c " +
"third_party\\boringssl\\crypto\\x509v3\\pcy_lib.c " +
"third_party\\boringssl\\crypto\\x509v3\\pcy_map.c " +
"third_party\\boringssl\\crypto\\x509v3\\pcy_node.c " +
"third_party\\boringssl\\crypto\\x509v3\\pcy_tree.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_akey.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_akeya.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_alt.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_bcons.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_bitst.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_conf.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_cpols.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_crld.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_enum.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_extku.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_genn.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_ia5.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_info.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_int.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_lib.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_ncons.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_ocsp.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_pci.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_pcia.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_pcons.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_pku.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_pmaps.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_prn.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_purp.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_skey.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_sxnet.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_utl.c " +
"third_party\\boringssl\\ssl\\bio_ssl.cc " +
"third_party\\boringssl\\ssl\\d1_both.cc " +
"third_party\\boringssl\\ssl\\d1_lib.cc " +
"third_party\\boringssl\\ssl\\d1_pkt.cc " +
"third_party\\boringssl\\ssl\\d1_srtp.cc " +
"third_party\\boringssl\\ssl\\dtls_method.cc " +
"third_party\\boringssl\\ssl\\dtls_record.cc " +
"third_party\\boringssl\\ssl\\handoff.cc " +
"third_party\\boringssl\\ssl\\handshake.cc " +
"third_party\\boringssl\\ssl\\handshake_client.cc " +
"third_party\\boringssl\\ssl\\handshake_server.cc " +
"third_party\\boringssl\\ssl\\s3_both.cc " +
"third_party\\boringssl\\ssl\\s3_lib.cc " +
"third_party\\boringssl\\ssl\\s3_pkt.cc " +
"third_party\\boringssl\\ssl\\ssl_aead_ctx.cc " +
"third_party\\boringssl\\ssl\\ssl_asn1.cc " +
"third_party\\boringssl\\ssl\\ssl_buffer.cc " +
"third_party\\boringssl\\ssl\\ssl_cert.cc " +
"third_party\\boringssl\\ssl\\ssl_cipher.cc " +
"third_party\\boringssl\\ssl\\ssl_file.cc " +
"third_party\\boringssl\\ssl\\ssl_key_share.cc " +
"third_party\\boringssl\\ssl\\ssl_lib.cc " +
"third_party\\boringssl\\ssl\\ssl_privkey.cc " +
"third_party\\boringssl\\ssl\\ssl_session.cc " +
"third_party\\boringssl\\ssl\\ssl_stat.cc " +
"third_party\\boringssl\\ssl\\ssl_transcript.cc " +
"third_party\\boringssl\\ssl\\ssl_versions.cc " +
"third_party\\boringssl\\ssl\\ssl_x509.cc " +
"third_party\\boringssl\\ssl\\t1_enc.cc " +
"third_party\\boringssl\\ssl\\t1_lib.cc " +
"third_party\\boringssl\\ssl\\tls13_both.cc " +
"third_party\\boringssl\\ssl\\tls13_client.cc " +
"third_party\\boringssl\\ssl\\tls13_enc.cc " +
"third_party\\boringssl\\ssl\\tls13_server.cc " +
"third_party\\boringssl\\ssl\\tls_method.cc " +
"third_party\\boringssl\\ssl\\tls_record.cc " +
"third_party\\boringssl\\third_party\\fiat\\curve25519.c " +
"third_party\\boringssl-with-bazel\\err_data.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_bitstr.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_bool.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_d2i_fp.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_dup.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_enum.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_gentm.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_i2d_fp.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_int.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_mbstr.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_object.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_octet.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_print.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_strnid.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_time.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_type.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_utctm.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_utf8.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\asn1_lib.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\asn1_par.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\asn_pack.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\f_enum.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\f_int.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\f_string.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_dec.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_enc.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_fre.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_new.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_typ.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_utl.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\time_support.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\base64\\base64.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\bio.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\bio_mem.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\connect.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\fd.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\file.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\hexdump.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\pair.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\printf.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\socket.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\socket_helper.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bn_extra\\bn_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bn_extra\\convert.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\buf\\buf.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bytestring\\asn1_compat.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bytestring\\ber.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bytestring\\cbb.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bytestring\\cbs.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bytestring\\unicode.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\chacha\\chacha.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\cipher_extra.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\derive_key.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_aesccm.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_aesctrhmac.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_aesgcmsiv.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_chacha20poly1305.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_null.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_rc2.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_rc4.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_tls.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\tls_cbc.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cmac\\cmac.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\conf\\conf.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cpu-aarch64-fuchsia.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cpu-aarch64-linux.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cpu-arm-linux.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cpu-arm.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cpu-intel.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cpu-ppc64le.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\crypto.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\curve25519\\spake25519.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\dh\\check.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\dh\\dh.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\dh\\dh_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\dh\\params.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\digest_extra\\digest_extra.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\dsa\\dsa.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\dsa\\dsa_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\ec_extra\\ec_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\ec_extra\\ec_derive.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\ecdh_extra\\ecdh_extra.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\ecdsa_extra\\ecdsa_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\engine\\engine.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\err\\err.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\digestsign.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\evp.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\evp_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\evp_ctx.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_dsa_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_ec.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_ec_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_ed25519.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_ed25519_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_rsa.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_rsa_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_x25519.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_x25519_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\pbkdf.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\print.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\scrypt.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\sign.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\ex_data.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\fipsmodule\\bcm.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\fipsmodule\\fips_shared_support.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\fipsmodule\\is_fips.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\hkdf\\hkdf.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\hrss\\hrss.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\lhash\\lhash.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\mem.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\obj\\obj.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\obj\\obj_xref.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_all.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_info.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_lib.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_oth.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_pk8.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_pkey.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_x509.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_xaux.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pkcs7\\pkcs7.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pkcs7\\pkcs7_x509.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pkcs8\\p5_pbev2.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pkcs8\\pkcs8.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pkcs8\\pkcs8_x509.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\poly1305\\poly1305.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\poly1305\\poly1305_arm.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\poly1305\\poly1305_vec.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pool\\pool.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra\\deterministic.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra\\forkunsafe.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra\\fuchsia.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra\\rand_extra.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra\\windows.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\rc4\\rc4.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\refcount_c11.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\refcount_lock.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\rsa_extra\\rsa_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\rsa_extra\\rsa_print.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\siphash\\siphash.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\stack\\stack.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\thread.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\thread_none.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\thread_pthread.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\thread_win.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\a_digest.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\a_sign.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\a_strex.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\a_verify.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\algorithm.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\asn1_gen.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\by_dir.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\by_file.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\i2d_pr.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\rsa_pss.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\t_crl.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\t_req.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\t_x509.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\t_x509a.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_att.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_cmp.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_d2.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_def.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_ext.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_lu.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_obj.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_r2x.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_req.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_set.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_trs.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_txt.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_v3.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_vfy.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_vpm.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509cset.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509name.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509rset.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509spki.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_algor.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_all.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_attrib.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_crl.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_exten.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_info.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_name.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_pkey.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_pubkey.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_req.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_sig.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_spki.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_val.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_x509.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_x509a.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_cache.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_data.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_lib.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_map.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_node.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_tree.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_akey.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_akeya.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_alt.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_bcons.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_bitst.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_conf.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_cpols.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_crld.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_enum.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_extku.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_genn.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_ia5.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_info.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_int.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_lib.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_ncons.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_ocsp.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_pci.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_pcia.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_pcons.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_pku.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_pmaps.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_prn.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_purp.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_skey.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_sxnet.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_utl.c " +
"third_party\\boringssl-with-bazel\\src\\ssl\\bio_ssl.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\d1_both.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\d1_lib.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\d1_pkt.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\d1_srtp.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\dtls_method.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\dtls_record.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\handoff.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\handshake.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\handshake_client.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\handshake_server.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\s3_both.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\s3_lib.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\s3_pkt.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_aead_ctx.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_asn1.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_buffer.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_cert.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_cipher.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_file.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_key_share.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_lib.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_privkey.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_session.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_stat.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_transcript.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_versions.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_x509.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\t1_enc.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\t1_lib.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\tls13_both.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\tls13_client.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\tls13_enc.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\tls13_server.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\tls_method.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\tls_record.cc " +
"third_party\\boringssl-with-bazel\\src\\third_party\\fiat\\curve25519.c " +
"third_party\\upb\\upb\\decode.c " +
"third_party\\upb\\upb\\encode.c " +
"third_party\\upb\\upb\\msg.c " +
@ -724,6 +765,7 @@ if (PHP_GRPC != "no") {
"/I"+configure_module_dirname+"\\include "+
"/I"+configure_module_dirname+"\\src\\core\\ext\\upb-generated "+
"/I"+configure_module_dirname+"\\src\\php\\ext\\grpc "+
"/I"+configure_module_dirname+"\\third_party\\abseil-cpp "+
"/I"+configure_module_dirname+"\\third_party\\address_sorting\\include "+
"/I"+configure_module_dirname+"\\third_party\\boringssl\\include "+
"/I"+configure_module_dirname+"\\third_party\\upb "+
@ -733,7 +775,6 @@ if (PHP_GRPC != "no") {
FSO.CreateFolder(base_dir+"\\ext");
FSO.CreateFolder(base_dir+"\\ext\\grpc");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\boringssl");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters");
@ -781,12 +822,24 @@ if (PHP_GRPC != "no") {
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\route");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter\\accesslog");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter\\accesslog\\v2");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter\\network");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter\\network\\http_connection_manager");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter\\network\\http_connection_manager\\v2");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\listener");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\listener\\v2");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\discovery");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\discovery\\v2");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\load_stats");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\load_stats\\v2");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type\\matcher");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\gogoproto");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\google");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\google\\api");
@ -858,49 +911,58 @@ if (PHP_GRPC != "no") {
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\php\\ext");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\php\\ext\\grpc");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\base");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\base\\internal");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\numeric");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\strings");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\strings\\internal");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\types");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\address_sorting");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\asn1");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\base64");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\bio");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\bn_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\buf");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\bytestring");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\chacha");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\cipher_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\cmac");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\conf");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\curve25519");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\dh");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\digest_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\dsa");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\ec_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\ecdh_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\ecdsa_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\engine");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\err");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\evp");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\fipsmodule");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\hkdf");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\hrss");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\lhash");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\obj");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\pem");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\pkcs7");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\pkcs8");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\poly1305");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\pool");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\rand_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\rc4");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\rsa_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\siphash");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\stack");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\x509");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\x509v3");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\ssl");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\third_party");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\third_party\\fiat");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\asn1");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\base64");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\bio");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\bn_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\buf");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\bytestring");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\chacha");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\cmac");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\conf");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\curve25519");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\dh");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\digest_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\dsa");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\ec_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\ecdh_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\ecdsa_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\engine");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\err");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\evp");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\fipsmodule");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\hkdf");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\hrss");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\lhash");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\obj");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\pem");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\pkcs7");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\pkcs8");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\poly1305");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\pool");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\rc4");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\rsa_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\siphash");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\stack");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\x509");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\x509v3");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\ssl");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\third_party");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\third_party\\fiat");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\upb");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\upb\\upb");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\zlib");

@ -31,12 +31,12 @@ Request-Headers are delivered as HTTP2 headers in HEADERS + CONTINUATION frames.
* **Timeout** → "grpc-timeout" TimeoutValue TimeoutUnit
* **TimeoutValue** → {_positive integer as ASCII string of at most 8 digits_}
* **TimeoutUnit** → Hour / Minute / Second / Millisecond / Microsecond / Nanosecond
* **Hour** → "H"
* **Minute** → "M"
* **Second** → "S"
* **Millisecond** → "m"
* **Microsecond** → "u"
* **Nanosecond** → "n"
* **Hour** → "H"
* **Minute** → "M"
* **Second** → "S"
* **Millisecond** → "m"
* **Microsecond** → "u"
* **Nanosecond** → "n"
* **Content-Type** → "content-type" "application/grpc" [("+proto" / "+json" / {_custom_})]
* **Content-Coding** → "identity" / "gzip" / "deflate" / "snappy" / {_custom_}
* <a name="message-encoding"></a>**Message-Encoding** → "grpc-encoding" Content-Coding

@ -3,7 +3,7 @@ Connection Backoff Interop Test Descriptions
This test is to verify the client is reconnecting the server with correct
backoffs as specified in
[the spec](http://github.com/grpc/grpc/blob/master/doc/connection-backoff.md).
[the spec](https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md).
The test server has a port (control_port) running a rpc service for controlling
the server and another port (retry_port) to close any incoming tcp connections.
The test has the following flow:

@ -20,3 +20,13 @@ v1.23.0 |Jul 30, 2019 |Aug 13, 2019
v1.24.0 |Sept 10, 2019 |Sept 24, 2019
v1.25.0 |Oct 22, 2019 |Nov 5, 2019
v1.26.0 |Dec 3, 2019 |Dec 17, 2019
v1.27.0 |Jan 14, 2020 |Jan 28, 2020
v1.28.0 |Feb 25, 2020 |Mar 10, 2020
v1.29.0 |Apr 7, 2020 |Apr 21, 2020
v1.30.0 |May 19, 2020 |Jun 2, 2020
v1.31.0 |Jun 30, 2020 |Jul 14, 2020
v1.32.0 |Aug 11, 2020 |Aug 25, 2020
v1.33.0 |Sept 22, 2020 |Oct 6, 2020
v1.34.0 |Nov 3, 2020 |Nov 17, 2020
v1.35.0 |Dec 15, 2020 |Dec 29, 2020
v1.36.0 |Jan 26, 2021 |Feb 9, 2021

@ -1,14 +1,13 @@
# gRPC Python Server Reflection
This document shows how to use gRPC Server Reflection in gRPC Python.
Please see [C++ Server Reflection Tutorial](../server_reflection_tutorial.md)
for general information and more examples how to use server reflection.
Please see [C++ Server Reflection Tutorial] for general information
and more examples how to use server reflection.
## Enable server reflection in Python servers
gRPC Python Server Reflection is an add-on library.
To use it, first install the [grpcio-reflection](https://pypi.org/project/grpcio-reflection/)
PyPI package into your project.
gRPC Python Server Reflection is an add-on library. To use it, first install
the [grpcio-reflection] PyPI package into your project.
Note that with Python you need to manually register the service
descriptors with the reflection service implementation when creating a server
@ -30,15 +29,11 @@ def serve():
server.start()
```
Please see
[greeter_server_with_reflection.py](https://github.com/grpc/grpc/blob/master/examples/python/helloworld/greeter_server_with_reflection.py)
in the examples directory for the full example, which extends the gRPC [Python
`Greeter` example](https://github.com/grpc/tree/master/examples/python/helloworld) on a
reflection-enabled server.
Please see [greeter_server_with_reflection.py] in the examples directory for the full
example, which extends the gRPC [Python `Greeter` example] on a reflection-enabled server.
After starting the server, you can verify that the server reflection
is working properly by using the [`grpc_cli` command line
tool](https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md):
is working properly by using the [`grpc_cli` command line tool]:
```sh
$ grpc_cli ls localhost:50051
@ -51,11 +46,21 @@ tool](https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md):
```
For more examples and instructions how to use the `grpc_cli` tool,
please refer to the [`grpc_cli` documentation](../command_line_tool.md)
and the [C++ Server Reflection Tutorial](../server_reflection_tutorial.md).
please refer to the [`grpc_cli` documentation] and the
[C++ Server Reflection Tutorial].
## Additional Resources
The [Server Reflection Protocol](../server-reflection.md) provides detailed
The [Server Reflection Protocol] provides detailed
information about how the server reflection works and describes the server reflection
protocol in detail.
[C++ Server Reflection Tutorial]: ../server_reflection_tutorial.md
[grpcio-reflection]: https://pypi.org/project/grpcio-reflection/
[greeter_server_with_reflection.py]: https://github.com/grpc/grpc/blob/master/examples/python/helloworld/greeter_server_with_reflection.py
[Python `Greeter` example]: https://github.com/grpc/grpc/tree/master/examples/python/helloworld
[`grpc_cli` command line tool]: https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md
[`grpc_cli` documentation]: ../command_line_tool.md
[C++ Server Reflection Tutorial]: ../server_reflection_tutorial.md
[Server Reflection Protocol]: ../server-reflection.md

@ -27,6 +27,8 @@ else()
add_definitions(-D_WIN32_WINNT=0x600)
endif()
find_package(Threads REQUIRED)
if(GRPC_AS_SUBMODULE)
# One way to build a projects that uses gRPC is to just include the
# entire gRPC project tree via "add_subdirectory".
@ -48,13 +50,47 @@ if(GRPC_AS_SUBMODULE)
# the same repository as gRPC sources, so we just look a few directories up)
add_subdirectory(../../.. ${CMAKE_CURRENT_BINARY_DIR}/grpc EXCLUDE_FROM_ALL)
message(STATUS "Using gRPC via add_subdirectory.")
# After using add_subdirectory, we can now use the grpc targets directly from
# this build.
set(_PROTOBUF_LIBPROTOBUF libprotobuf)
if(CMAKE_CROSSCOMPILING)
find_program(_PROTOBUF_PROTOC protoc)
else()
set(_PROTOBUF_PROTOC $<TARGET_FILE:protobuf::protoc>)
endif()
set(_GRPC_GRPCPP_UNSECURE grpc++_unsecure)
if(CMAKE_CROSSCOMPILING)
find_program(_GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin)
else()
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:grpc_cpp_plugin>)
endif()
elseif(GRPC_FETCHCONTENT)
# Another way is to use CMake's FetchContent module to clone gRPC at
# configure time. This makes gRPC's source code available to your project,
# similar to a git submodule.
message(STATUS "Using gRPC via add_subdirectory (FetchContent).")
include(FetchContent)
FetchContent_Declare(
grpc
GIT_REPOSITORY https://github.com/grpc/grpc.git
# when using gRPC, you will actually set this to an existing tag, such as
# v1.25.0, v1.26.0 etc..
# For the purpose of testing, we override the tag used to the commit
# that's currently under test.
GIT_TAG vGRPC_TAG_VERSION_OF_YOUR_CHOICE)
FetchContent_MakeAvailable(grpc)
# Since FetchContent uses add_subdirectory under the hood, we can use
# the grpc targets directly from this build.
set(_PROTOBUF_LIBPROTOBUF libprotobuf)
set(_PROTOBUF_PROTOC $<TARGET_FILE:protoc>)
set(_GRPC_GRPCPP_UNSECURE grpc++_unsecure)
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:grpc_cpp_plugin>)
if(CMAKE_CROSSCOMPILING)
find_program(_GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin)
else()
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:grpc_cpp_plugin>)
endif()
else()
# This branch assumes that gRPC and all its dependencies are already installed
# on this system, so they can be located by find_package().
@ -66,7 +102,11 @@ else()
message(STATUS "Using protobuf ${protobuf_VERSION}")
set(_PROTOBUF_LIBPROTOBUF protobuf::libprotobuf)
set(_PROTOBUF_PROTOC $<TARGET_FILE:protobuf::protoc>)
if(CMAKE_CROSSCOMPILING)
find_program(_PROTOBUF_PROTOC protoc)
else()
set(_PROTOBUF_PROTOC $<TARGET_FILE:protobuf::protoc>)
endif()
# Find gRPC installation
# Looks for gRPCConfig.cmake file installed by gRPC's cmake installation.
@ -74,7 +114,11 @@ else()
message(STATUS "Using gRPC ${gRPC_VERSION}")
set(_GRPC_GRPCPP_UNSECURE gRPC::grpc++_unsecure)
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:gRPC::grpc_cpp_plugin>)
if(CMAKE_CROSSCOMPILING)
find_program(_GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin)
else()
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:gRPC::grpc_cpp_plugin>)
endif()
endif()
# Proto file
@ -102,7 +146,7 @@ include_directories("${CMAKE_CURRENT_BINARY_DIR}")
# Targets greeter_[async_](client|server)
foreach(_target
greeter_client greeter_server
greeter_async_client greeter_async_server)
greeter_async_client greeter_async_client2 greeter_async_server)
add_executable(${_target} "${_target}.cc"
${hw_proto_srcs}
${hw_grpc_srcs})

@ -255,6 +255,10 @@ main loop in `HandleRpcs` to query the queue.
For a working example, refer to [greeter_async_server.cc](greeter_async_server.cc).
#### Flags for the client
```sh
./greeter_client --target="a target string used to create a GRPC client channel"
```
The Default value for --target is "localhost:50051".

@ -1,116 +1,129 @@
# Copyright 2018 gRPC authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# cmake "superbuild" file for C++ helloworld example.
# This build file demonstrates how to build the helloworld project
# and all its dependencies in a single cmake build (hence "superbuild")
# that is easy to build and maintain.
# cmake's ExternalProject_Add() is used to import all the sub-projects,
# including the "helloworld" project itself.
# See https://blog.kitware.com/cmake-superbuilds-git-submodules/
cmake_minimum_required(VERSION 3.5.1)
# Project
project(HelloWorld-SuperBuild C CXX)
include(ExternalProject)
# Builds c-ares project from the git submodule.
# Note: For all external projects, instead of using checked-out code, one could
# specify GIT_REPOSITORY and GIT_TAG to have cmake download the dependency directly,
# without needing to add a submodule to your project.
ExternalProject_Add(c-ares
PREFIX c-ares
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../third_party/cares/cares"
CMAKE_CACHE_ARGS
-DCARES_SHARED:BOOL=OFF
-DCARES_STATIC:BOOL=ON
-DCARES_STATIC_PIC:BOOL=ON
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/c-ares
)
# Builds protobuf project from the git submodule.
ExternalProject_Add(protobuf
PREFIX protobuf
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../third_party/protobuf/cmake"
CMAKE_CACHE_ARGS
-Dprotobuf_BUILD_TESTS:BOOL=OFF
-Dprotobuf_WITH_ZLIB:BOOL=OFF
-Dprotobuf_MSVC_STATIC_RUNTIME:BOOL=OFF
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/protobuf
)
# Builds zlib project from the git submodule.
ExternalProject_Add(zlib
PREFIX zlib
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../third_party/zlib"
CMAKE_CACHE_ARGS
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/zlib
)
# the location where protobuf-config.cmake will be installed varies by platform
if (WIN32)
set(_FINDPACKAGE_PROTOBUF_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}/protobuf/cmake")
else()
set(_FINDPACKAGE_PROTOBUF_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}/protobuf/lib/cmake/protobuf")
endif()
# if OPENSSL_ROOT_DIR is set, propagate that hint path to the external projects with OpenSSL dependency.
set(_CMAKE_ARGS_OPENSSL_ROOT_DIR "")
if (OPENSSL_ROOT_DIR)
set(_CMAKE_ARGS_OPENSSL_ROOT_DIR "-DOPENSSL_ROOT_DIR:PATH=${OPENSSL_ROOT_DIR}")
endif()
# Builds gRPC based on locally checked-out sources and set arguments so that all the dependencies
# are correctly located.
ExternalProject_Add(grpc
PREFIX grpc
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../.."
CMAKE_CACHE_ARGS
-DgRPC_INSTALL:BOOL=ON
-DgRPC_BUILD_TESTS:BOOL=OFF
-DgRPC_PROTOBUF_PROVIDER:STRING=package
-DgRPC_PROTOBUF_PACKAGE_TYPE:STRING=CONFIG
-DProtobuf_DIR:PATH=${_FINDPACKAGE_PROTOBUF_CONFIG_DIR}
-DgRPC_ZLIB_PROVIDER:STRING=package
-DZLIB_ROOT:STRING=${CMAKE_CURRENT_BINARY_DIR}/zlib
-DgRPC_CARES_PROVIDER:STRING=package
-Dc-ares_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/c-ares/lib/cmake/c-ares
-DgRPC_SSL_PROVIDER:STRING=package
${_CMAKE_ARGS_OPENSSL_ROOT_DIR}
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/grpc
DEPENDS c-ares protobuf zlib
)
# Build the helloworld projects itself using a CMakeLists.txt that assumes all the dependencies
# have already been installed.
# Even though helloworld is not really an "external project" from perspective of this build,
# we are still importing it using ExternalProject_Add because that allows us to use find_package()
# to locate all the dependencies (if we were building helloworld directly in this build we,
# we would have needed to manually import the libraries as opposed to reusing targets exported by
# gRPC and protobuf).
ExternalProject_Add(helloworld
PREFIX helloworld
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.."
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/helloworld"
INSTALL_COMMAND ""
CMAKE_CACHE_ARGS
-DProtobuf_DIR:PATH=${_FINDPACKAGE_PROTOBUF_CONFIG_DIR}
-Dc-ares_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/c-ares/lib/cmake/c-ares
-DZLIB_ROOT:STRING=${CMAKE_CURRENT_BINARY_DIR}/zlib
${_CMAKE_ARGS_OPENSSL_ROOT_DIR}
-DgRPC_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/grpc/lib/cmake/grpc
DEPENDS protobuf grpc
)
# Copyright 2018 gRPC authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# cmake "superbuild" file for C++ helloworld example.
# This build file demonstrates how to build the helloworld project
# and all its dependencies in a single cmake build (hence "superbuild")
# that is easy to build and maintain.
# cmake's ExternalProject_Add() is used to import all the sub-projects,
# including the "helloworld" project itself.
# See https://blog.kitware.com/cmake-superbuilds-git-submodules/
cmake_minimum_required(VERSION 3.5.1)
# Project
project(HelloWorld-SuperBuild C CXX)
include(ExternalProject)
# Note: For all external projects, instead of using checked-out code, one could
# specify GIT_REPOSITORY and GIT_TAG to have cmake download the dependency directly,
# without needing to add a submodule to your project.
# Builds absl project from the git submodule.
ExternalProject_Add(absl
PREFIX absl
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../third_party/abseil-cpp"
CMAKE_CACHE_ARGS
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=TRUE
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/absl
)
# Builds c-ares project from the git submodule.
ExternalProject_Add(c-ares
PREFIX c-ares
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../third_party/cares/cares"
CMAKE_CACHE_ARGS
-DCARES_SHARED:BOOL=OFF
-DCARES_STATIC:BOOL=ON
-DCARES_STATIC_PIC:BOOL=ON
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/c-ares
)
# Builds protobuf project from the git submodule.
ExternalProject_Add(protobuf
PREFIX protobuf
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../third_party/protobuf/cmake"
CMAKE_CACHE_ARGS
-Dprotobuf_BUILD_TESTS:BOOL=OFF
-Dprotobuf_WITH_ZLIB:BOOL=OFF
-Dprotobuf_MSVC_STATIC_RUNTIME:BOOL=OFF
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/protobuf
)
# Builds zlib project from the git submodule.
ExternalProject_Add(zlib
PREFIX zlib
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../third_party/zlib"
CMAKE_CACHE_ARGS
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/zlib
)
# the location where protobuf-config.cmake will be installed varies by platform
if (WIN32)
set(_FINDPACKAGE_PROTOBUF_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}/protobuf/cmake")
else()
set(_FINDPACKAGE_PROTOBUF_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}/protobuf/lib/cmake/protobuf")
endif()
# if OPENSSL_ROOT_DIR is set, propagate that hint path to the external projects with OpenSSL dependency.
set(_CMAKE_ARGS_OPENSSL_ROOT_DIR "")
if (OPENSSL_ROOT_DIR)
set(_CMAKE_ARGS_OPENSSL_ROOT_DIR "-DOPENSSL_ROOT_DIR:PATH=${OPENSSL_ROOT_DIR}")
endif()
# Builds gRPC based on locally checked-out sources and set arguments so that all the dependencies
# are correctly located.
ExternalProject_Add(grpc
PREFIX grpc
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../.."
CMAKE_CACHE_ARGS
-DgRPC_INSTALL:BOOL=ON
-DgRPC_BUILD_TESTS:BOOL=OFF
-DgRPC_PROTOBUF_PROVIDER:STRING=package
-DgRPC_PROTOBUF_PACKAGE_TYPE:STRING=CONFIG
-DProtobuf_DIR:PATH=${_FINDPACKAGE_PROTOBUF_CONFIG_DIR}
-DgRPC_ZLIB_PROVIDER:STRING=package
-DZLIB_ROOT:STRING=${CMAKE_CURRENT_BINARY_DIR}/zlib
-DgRPC_ABSL_PROVIDER:STRING=package
-Dabsl_DIR:STRING=${CMAKE_CURRENT_BINARY_DIR}/absl/lib/cmake/absl
-DgRPC_CARES_PROVIDER:STRING=package
-Dc-ares_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/c-ares/lib/cmake/c-ares
-DgRPC_SSL_PROVIDER:STRING=package
${_CMAKE_ARGS_OPENSSL_ROOT_DIR}
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/grpc
DEPENDS c-ares protobuf zlib absl
)
# Build the helloworld projects itself using a CMakeLists.txt that assumes all the dependencies
# have already been installed.
# Even though helloworld is not really an "external project" from perspective of this build,
# we are still importing it using ExternalProject_Add because that allows us to use find_package()
# to locate all the dependencies (if we were building helloworld directly in this build we,
# we would have needed to manually import the libraries as opposed to reusing targets exported by
# gRPC and protobuf).
ExternalProject_Add(helloworld
PREFIX helloworld
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.."
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/helloworld"
INSTALL_COMMAND ""
CMAKE_CACHE_ARGS
-DProtobuf_DIR:PATH=${_FINDPACKAGE_PROTOBUF_CONFIG_DIR}
-Dc-ares_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/c-ares/lib/cmake/c-ares
-DZLIB_ROOT:STRING=${CMAKE_CURRENT_BINARY_DIR}/zlib
-Dabsl_DIR:STRING=${CMAKE_CURRENT_BINARY_DIR}/absl/lib/cmake/absl
${_CMAKE_ARGS_OPENSSL_ROOT_DIR}
-DgRPC_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/grpc/lib/cmake/grpc
DEPENDS protobuf grpc
)

@ -73,11 +73,32 @@ class GreeterClient {
int main(int argc, char** argv) {
// Instantiate the client. It requires a channel, out of which the actual RPCs
// are created. This channel models a connection to an endpoint (in this case,
// localhost at port 50051). We indicate that the channel isn't authenticated
// (use of InsecureChannelCredentials()).
// are created. This channel models a connection to an endpoint specified by
// the argument "--target=" which is the only expected argument.
// We indicate that the channel isn't authenticated (use of
// InsecureChannelCredentials()).
std::string target_str;
std::string arg_str("--target");
if (argc > 1) {
std::string arg_val = argv[1];
size_t start_pos = arg_val.find(arg_str);
if (start_pos != std::string::npos) {
start_pos += arg_str.size();
if (arg_val[start_pos] == '=') {
target_str = arg_val.substr(start_pos + 1);
} else {
std::cout << "The only correct argument syntax is --target=" << std::endl;
return 0;
}
} else {
std::cout << "The only acceptable argument is --target=" << std::endl;
return 0;
}
} else {
target_str = "localhost:50051";
}
GreeterClient greeter(grpc::CreateChannel(
"localhost:50051", grpc::InsecureChannelCredentials()));
target_str, grpc::InsecureChannelCredentials()));
std::string user("world");
std::string reply = greeter.SayHello(user);
std::cout << "Greeter received: " << reply << std::endl;

@ -57,8 +57,8 @@ class AuthGateway(grpc.AuthMetadataPlugin):
@contextlib.contextmanager
def create_client_channel(addr):
# Call credential object will be invoked for every single RPC
call_credentials = grpc.metadata_call_credentials(
AuthGateway(), name='auth gateway')
call_credentials = grpc.metadata_call_credentials(AuthGateway(),
name='auth gateway')
# Channel credential will be valid for the entire channel
channel_credential = grpc.ssl_channel_credentials(
_credentials.ROOT_CERTIFICATE)
@ -86,12 +86,11 @@ def send_rpc(channel):
def main():
parser = argparse.ArgumentParser()
parser.add_argument(
'--port',
nargs='?',
type=int,
default=50051,
help='the address of server')
parser.add_argument('--port',
nargs='?',
type=int,
default=50051,
help='the address of server')
args = parser.parse_args()
with create_client_channel(_SERVER_ADDR_TEMPLATE % args.port) as channel:

@ -65,9 +65,8 @@ class SimpleGreeter(helloworld_pb2_grpc.GreeterServicer):
@contextlib.contextmanager
def run_server(port):
# Bind interceptor to server
server = grpc.server(
futures.ThreadPoolExecutor(),
interceptors=(SignatureValidationInterceptor(),))
server = grpc.server(futures.ThreadPoolExecutor(),
interceptors=(SignatureValidationInterceptor(),))
helloworld_pb2_grpc.add_GreeterServicer_to_server(SimpleGreeter(), server)
# Loading credentials
@ -89,8 +88,11 @@ def run_server(port):
def main():
parser = argparse.ArgumentParser()
parser.add_argument(
'--port', nargs='?', type=int, default=50051, help='the listening port')
parser.add_argument('--port',
nargs='?',
type=int,
default=50051,
help='the listening port')
args = parser.parse_args()
with run_server(args.port) as (server, port):

@ -43,8 +43,8 @@ py_binary(
deps = [
":hash_name_py_pb2",
":hash_name_py_pb2_grpc",
"//external:six",
"//src/python/grpcio/grpc:grpcio",
"@six",
],
)

@ -34,10 +34,9 @@ _LOGGER = logging.getLogger(__name__)
def run_unary_client(server_target, name, ideal_distance):
with grpc.insecure_channel(server_target) as channel:
stub = hash_name_pb2_grpc.HashFinderStub(channel)
future = stub.Find.future(
hash_name_pb2.HashNameRequest(
desired_name=name, ideal_hamming_distance=ideal_distance),
wait_for_ready=True)
future = stub.Find.future(hash_name_pb2.HashNameRequest(
desired_name=name, ideal_hamming_distance=ideal_distance),
wait_for_ready=True)
def cancel_request(unused_signum, unused_frame):
future.cancel()
@ -52,12 +51,11 @@ def run_streaming_client(server_target, name, ideal_distance,
interesting_distance):
with grpc.insecure_channel(server_target) as channel:
stub = hash_name_pb2_grpc.HashFinderStub(channel)
result_generator = stub.FindRange(
hash_name_pb2.HashNameRequest(
desired_name=name,
ideal_hamming_distance=ideal_distance,
interesting_hamming_distance=interesting_distance),
wait_for_ready=True)
result_generator = stub.FindRange(hash_name_pb2.HashNameRequest(
desired_name=name,
ideal_hamming_distance=ideal_distance,
interesting_hamming_distance=interesting_distance),
wait_for_ready=True)
def cancel_request(unused_signum, unused_frame):
result_generator.cancel()
@ -71,18 +69,16 @@ def run_streaming_client(server_target, name, ideal_distance,
def main():
parser = argparse.ArgumentParser(description=_DESCRIPTION)
parser.add_argument("name", type=str, help='The desired name.')
parser.add_argument(
"--ideal-distance",
default=0,
nargs='?',
type=int,
help="The desired Hamming distance.")
parser.add_argument(
'--server',
default='localhost:50051',
type=str,
nargs='?',
help='The host-port pair at which to reach the server.')
parser.add_argument("--ideal-distance",
default=0,
nargs='?',
type=int,
help="The desired Hamming distance.")
parser.add_argument('--server',
default='localhost:50051',
type=str,
nargs='?',
help='The host-port pair at which to reach the server.')
parser.add_argument(
'--show-inferior',
default=None,

@ -89,8 +89,8 @@ def _running_server(port, maximum_hashes):
# We use only a single servicer thread here to demonstrate that, if managed
# carefully, cancelled RPCs can need not continue occupying servicers
# threads.
server = grpc.server(
futures.ThreadPoolExecutor(max_workers=1), maximum_concurrent_rpcs=1)
server = grpc.server(futures.ThreadPoolExecutor(max_workers=1),
maximum_concurrent_rpcs=1)
hash_name_pb2_grpc.add_HashFinderServicer_to_server(
HashFinder(maximum_hashes), server)
address = '{}:{}'.format(_SERVER_HOST, port)
@ -102,12 +102,11 @@ def _running_server(port, maximum_hashes):
def main():
parser = argparse.ArgumentParser(description=_DESCRIPTION)
parser.add_argument(
'--port',
type=int,
default=50051,
nargs='?',
help='The port on which the server will listen.')
parser.add_argument('--port',
type=int,
default=50051,
nargs='?',
help='The port on which the server will listen.')
parser.add_argument(
'--maximum-hashes',
type=int,

@ -47,16 +47,16 @@ def _start_client(server_port,
'--show-inferior', interesting_distance)
return subprocess.Popen((_CLIENT_PATH, desired_string, '--server',
'localhost:{}'.format(server_port),
'--ideal-distance',
str(ideal_distance)) + interesting_distance_args)
'--ideal-distance', str(ideal_distance)) +
interesting_distance_args)
class CancellationExampleTest(unittest.TestCase):
def test_successful_run(self):
with _get_port() as test_port:
server_process = subprocess.Popen((_SERVER_PATH, '--port',
str(test_port)))
server_process = subprocess.Popen(
(_SERVER_PATH, '--port', str(test_port)))
try:
client_process = _start_client(test_port, 'aa', 0)
client_return_code = client_process.wait()
@ -68,8 +68,8 @@ class CancellationExampleTest(unittest.TestCase):
def test_graceful_sigint(self):
with _get_port() as test_port:
server_process = subprocess.Popen((_SERVER_PATH, '--port',
str(test_port)))
server_process = subprocess.Popen(
(_SERVER_PATH, '--port', str(test_port)))
try:
client_process1 = _start_client(test_port, 'aaaaaaaaaa', 0)
client_process1.send_signal(signal.SIGINT)

@ -35,36 +35,33 @@ _LOGGER = logging.getLogger(__name__)
def run_client(channel_compression, call_compression, target):
with grpc.insecure_channel(
target, compression=channel_compression) as channel:
with grpc.insecure_channel(target,
compression=channel_compression) as channel:
stub = helloworld_pb2_grpc.GreeterStub(channel)
response = stub.SayHello(
helloworld_pb2.HelloRequest(name='you'),
compression=call_compression,
wait_for_ready=True)
response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'),
compression=call_compression,
wait_for_ready=True)
print("Response: {}".format(response))
def main():
parser = argparse.ArgumentParser(description=_DESCRIPTION)
parser.add_argument(
'--channel_compression',
default='none',
nargs='?',
choices=_COMPRESSION_OPTIONS.keys(),
help='The compression method to use for the channel.')
parser.add_argument('--channel_compression',
default='none',
nargs='?',
choices=_COMPRESSION_OPTIONS.keys(),
help='The compression method to use for the channel.')
parser.add_argument(
'--call_compression',
default='none',
nargs='?',
choices=_COMPRESSION_OPTIONS.keys(),
help='The compression method to use for an individual call.')
parser.add_argument(
'--server',
default='localhost:50051',
type=str,
nargs='?',
help='The host-port pair at which to reach the server.')
parser.add_argument('--server',
default='localhost:50051',
type=str,
nargs='?',
help='The host-port pair at which to reach the server.')
args = parser.parse_args()
channel_compression = _COMPRESSION_OPTIONS[args.channel_compression]
call_compression = _COMPRESSION_OPTIONS[args.call_compression]

@ -60,10 +60,9 @@ class Greeter(helloworld_pb2_grpc.GreeterServicer):
def run_server(server_compression, no_compress_every_n, port):
server = grpc.server(
futures.ThreadPoolExecutor(),
compression=server_compression,
options=(('grpc.so_reuseport', 1),))
server = grpc.server(futures.ThreadPoolExecutor(),
compression=server_compression,
options=(('grpc.so_reuseport', 1),))
helloworld_pb2_grpc.add_GreeterServicer_to_server(
Greeter(no_compress_every_n), server)
address = '{}:{}'.format(_SERVER_HOST, port)
@ -75,24 +74,21 @@ def run_server(server_compression, no_compress_every_n, port):
def main():
parser = argparse.ArgumentParser(description=_DESCRIPTION)
parser.add_argument(
'--server_compression',
default='none',
nargs='?',
choices=_COMPRESSION_OPTIONS.keys(),
help='The default compression method for the server.')
parser.add_argument(
'--no_compress_every_n',
type=int,
default=0,
nargs='?',
help='If set, every nth reply will be uncompressed.')
parser.add_argument(
'--port',
type=int,
default=50051,
nargs='?',
help='The port on which the server will listen.')
parser.add_argument('--server_compression',
default='none',
nargs='?',
choices=_COMPRESSION_OPTIONS.keys(),
help='The default compression method for the server.')
parser.add_argument('--no_compress_every_n',
type=int,
default=0,
nargs='?',
help='If set, every nth reply will be uncompressed.')
parser.add_argument('--port',
type=int,
default=50051,
nargs='?',
help='The port on which the server will listen.')
args = parser.parse_args()
run_server(_COMPRESSION_OPTIONS[args.server_compression],
args.no_compress_every_n, args.port)

@ -42,9 +42,9 @@ class CompressionExampleTest(unittest.TestCase):
def test_compression_example(self):
with _get_port() as test_port:
server_process = subprocess.Popen((_SERVER_PATH, '--port',
str(test_port),
'--server_compression', 'gzip'))
server_process = subprocess.Popen(
(_SERVER_PATH, '--port', str(test_port), '--server_compression',
'gzip'))
try:
server_target = 'localhost:{}'.format(test_port)
client_process = subprocess.Popen(

@ -28,11 +28,11 @@ CLIENT_ID = 1
# only respond once.)
def simple_method(stub):
print("--------------Call SimpleMethod Begin--------------")
request = demo_pb2.Request(
client_id=CLIENT_ID, request_data="called by Python client")
request = demo_pb2.Request(client_id=CLIENT_ID,
request_data="called by Python client")
response = stub.SimpleMethod(request)
print("resp from server(%d), the message=%s" % (response.server_id,
response.response_data))
print("resp from server(%d), the message=%s" %
(response.server_id, response.response_data))
print("--------------Call SimpleMethod Over---------------")
@ -52,8 +52,8 @@ def client_streaming_method(stub):
yield request
response = stub.ClientStreamingMethod(request_messages())
print("resp from server(%d), the message=%s" % (response.server_id,
response.response_data))
print("resp from server(%d), the message=%s" %
(response.server_id, response.response_data))
print("--------------Call ClientStreamingMethod Over---------------")
@ -62,12 +62,12 @@ def client_streaming_method(stub):
# but the server can return the response many times.)
def server_streaming_method(stub):
print("--------------Call ServerStreamingMethod Begin--------------")
request = demo_pb2.Request(
client_id=CLIENT_ID, request_data="called by Python client")
request = demo_pb2.Request(client_id=CLIENT_ID,
request_data="called by Python client")
response_iterator = stub.ServerStreamingMethod(request)
for response in response_iterator:
print("recv from server(%d), message=%s" % (response.server_id,
response.response_data))
print("recv from server(%d), message=%s" %
(response.server_id, response.response_data))
print("--------------Call ServerStreamingMethod Over---------------")
@ -91,8 +91,8 @@ def bidirectional_streaming_method(stub):
response_iterator = stub.BidirectionalStreamingMethod(request_messages())
for response in response_iterator:
print("recv from server(%d), message=%s" % (response.server_id,
response.response_data))
print("recv from server(%d), message=%s" %
(response.server_id, response.response_data))
print("--------------Call BidirectionalStreamingMethod Over---------------")

@ -43,8 +43,8 @@ class DemoServer(demo_pb2_grpc.GRPCDemoServicer):
def ClientStreamingMethod(self, request_iterator, context):
print("ClientStreamingMethod called by client...")
for request in request_iterator:
print("recv from client(%d), message= %s" % (request.client_id,
request.request_data))
print("recv from client(%d), message= %s" %
(request.client_id, request.request_data))
response = demo_pb2.Response(
server_id=SERVER_ID,
response_data="Python server ClientStreamingMethod ok")

@ -60,12 +60,11 @@ def create_server(addr, failure_rate):
def main():
parser = argparse.ArgumentParser()
parser.add_argument(
'--addr',
nargs=1,
type=str,
default='[::]:50051',
help='the address to listen on')
parser.add_argument('--addr',
nargs=1,
type=str,
default='[::]:50051',
help='the address to listen on')
parser.add_argument(
'--failure_rate',
nargs=1,

@ -35,12 +35,11 @@ def run(addr):
def main():
parser = argparse.ArgumentParser()
parser.add_argument(
'--addr',
nargs=1,
type=str,
default='[::]:50051',
help='the address to request')
parser.add_argument('--addr',
nargs=1,
type=str,
default='[::]:50051',
help='the address to request')
args = parser.parse_args()
run(addr=args.addr)

@ -43,18 +43,16 @@ def run(addr, n):
def main():
parser = argparse.ArgumentParser()
parser.add_argument(
'--addr',
nargs=1,
type=str,
default='[::]:50051',
help='the address to request')
parser.add_argument(
'-n',
nargs=1,
type=int,
default=10,
help='an integer for number of messages to sent')
parser.add_argument('--addr',
nargs=1,
type=str,
default='[::]:50051',
help='the address to request')
parser.add_argument('-n',
nargs=1,
type=int,
default=10,
help='an integer for number of messages to sent')
args = parser.parse_args()
run(addr=args.addr, n=args.n)

@ -36,8 +36,8 @@ _ADDR_TEMPLATE = 'localhost:%d'
class DebugExampleTest(unittest.TestCase):
def test_channelz_example(self):
server = debug_server.create_server(
addr='[::]:0', failure_rate=_FAILURE_RATE)
server = debug_server.create_server(addr='[::]:0',
failure_rate=_FAILURE_RATE)
port = server.add_insecure_port('[::]:0')
server.start()
address = _ADDR_TEMPLATE % port

@ -30,13 +30,12 @@ from examples import helloworld_pb2_grpc
def create_greet_limit_exceed_error_status(name):
detail = any_pb2.Any()
detail.Pack(
error_details_pb2.QuotaFailure(
violations=[
error_details_pb2.QuotaFailure.Violation(
subject="name: %s" % name,
description="Limit one greeting per person",
)
],))
error_details_pb2.QuotaFailure(violations=[
error_details_pb2.QuotaFailure.Violation(
subject="name: %s" % name,
description="Limit one greeting per person",
)
],))
return status_pb2.Status(
code=code_pb2.RESOURCE_EXHAUSTED,
message='Request limit exceeded.',

@ -28,16 +28,16 @@ def run():
# of the code.
#
# For more channel options, please see https://grpc.io/grpc/core/group__grpc__arg__keys.html
with grpc.insecure_channel(
target='localhost:50051',
options=[('grpc.lb_policy_name', 'pick_first'),
('grpc.enable_retries', 0), ('grpc.keepalive_timeout_ms',
10000)]) as channel:
with grpc.insecure_channel(target='localhost:50051',
options=[('grpc.lb_policy_name', 'pick_first'),
('grpc.enable_retries', 0),
('grpc.keepalive_timeout_ms', 10000)
]) as channel:
stub = helloworld_pb2_grpc.GreeterStub(channel)
# Timeout in seconds.
# Please refer gRPC Python documents for more detail. https://grpc.io/grpc/python/grpc.html
response = stub.SayHello(
helloworld_pb2.HelloRequest(name='you'), timeout=10)
response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'),
timeout=10)
print("Greeter client received: " + response.message)

@ -16,9 +16,10 @@
import grpc
class _GenericClientInterceptor(
grpc.UnaryUnaryClientInterceptor, grpc.UnaryStreamClientInterceptor,
grpc.StreamUnaryClientInterceptor, grpc.StreamStreamClientInterceptor):
class _GenericClientInterceptor(grpc.UnaryUnaryClientInterceptor,
grpc.UnaryStreamClientInterceptor,
grpc.StreamUnaryClientInterceptor,
grpc.StreamStreamClientInterceptor):
def __init__(self, interceptor_function):
self._fn = interceptor_function

@ -33,9 +33,8 @@ def serve():
header_validator = RequestHeaderValidatorInterceptor(
'one-time-password', '42', grpc.StatusCode.UNAUTHENTICATED,
'Access denied!')
server = grpc.server(
futures.ThreadPoolExecutor(max_workers=10),
interceptors=(header_validator,))
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10),
interceptors=(header_validator,))
helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
server.add_insecure_port('[::]:50051')
server.start()

@ -47,9 +47,9 @@ def guide_get_one_feature(route_guide_stub, point):
def guide_get_feature(route_guide_stub):
guide_get_one_feature(route_guide_stub,
route_guide_pb2.Point(
latitude=409146138, longitude=-746188906))
guide_get_one_feature(
route_guide_stub,
route_guide_pb2.Point(latitude=409146138, longitude=-746188906))
guide_get_one_feature(route_guide_stub,
route_guide_pb2.Point(latitude=0, longitude=0))
@ -102,8 +102,8 @@ def generate_messages():
def guide_route_chat(route_guide_stub):
responses = route_guide_stub.RouteChat(generate_messages())
for response in responses:
print("Received message %s at %s" % (response.message,
response.location))
print("Received message %s at %s" %
(response.message, response.location))
def run():

@ -48,8 +48,8 @@ def _get_distance(start, end):
delta_lon_rad = math.radians(lon_2 - lon_1)
a = (pow(math.sin(delta_lat_rad / 2), 2) +
(math.cos(lat_rad_1) * math.cos(lat_rad_2) * pow(
math.sin(delta_lon_rad / 2), 2)))
(math.cos(lat_rad_1) * math.cos(lat_rad_2) *
pow(math.sin(delta_lon_rad / 2), 2)))
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
R = 6371000
# metres
@ -104,11 +104,10 @@ class _RouteGuideServicer(route_guide_pb2_grpc.RouteGuideServicer):
prev_point = point
elapsed_time = time.time() - start_time
return route_guide_pb2.RouteSummary(
point_count=point_count,
feature_count=feature_count,
distance=int(distance),
elapsed_time=int(elapsed_time))
return route_guide_pb2.RouteSummary(point_count=point_count,
feature_count=feature_count,
distance=int(distance),
elapsed_time=int(elapsed_time))
def RouteChat(self, request_iterator, context):
prev_notes = []

@ -64,10 +64,9 @@ def _run_worker_query(primality_candidate):
def _calculate_primes(server_address):
worker_pool = multiprocessing.Pool(
processes=_PROCESS_COUNT,
initializer=_initialize_worker,
initargs=(server_address,))
worker_pool = multiprocessing.Pool(processes=_PROCESS_COUNT,
initializer=_initialize_worker,
initargs=(server_address,))
check_range = range(2, _MAXIMUM_CANDIDATE)
primality = worker_pool.map(_run_worker_query, check_range)
primes = zip(check_range, map(operator.attrgetter('isPrime'), primality))
@ -78,9 +77,8 @@ def main():
msg = 'Determine the primality of the first {} integers.'.format(
_MAXIMUM_CANDIDATE)
parser = argparse.ArgumentParser(description=msg)
parser.add_argument(
'server_address',
help='The address of the server (e.g. localhost:50051)')
parser.add_argument('server_address',
help='The address of the server (e.g. localhost:50051)')
args = parser.parse_args()
primes = _calculate_primes(args.server_address)
print(primes)

@ -73,9 +73,9 @@ def _run_server(bind_address):
# advantage of this feature, install from source with
# `pip install grpcio --no-binary grpcio`.
server = grpc.server(
futures.ThreadPoolExecutor(max_workers=_THREAD_CONCURRENCY,),
options=options)
server = grpc.server(futures.ThreadPoolExecutor(
max_workers=_THREAD_CONCURRENCY,),
options=options)
prime_pb2_grpc.add_PrimeCheckerServicer_to_server(PrimeChecker(), server)
server.add_insecure_port(bind_address)
server.start()
@ -106,8 +106,8 @@ def main():
# NOTE: It is imperative that the worker subprocesses be forked before
# any gRPC servers start up. See
# https://github.com/grpc/grpc/issues/16001 for more details.
worker = multiprocessing.Process(
target=_run_server, args=(bind_address,))
worker = multiprocessing.Process(target=_run_server,
args=(bind_address,))
worker.start()
workers.append(worker)
for worker in workers:

@ -54,11 +54,11 @@ class MultiprocessingExampleTest(unittest.TestCase):
server_process = subprocess.Popen((_SERVER_PATH,), stdout=server_stdout)
server_address = _get_server_address(server_stdout)
client_stdout = tempfile.TemporaryFile(mode='r')
client_process = subprocess.Popen(
(
_CLIENT_PATH,
server_address,
), stdout=client_stdout)
client_process = subprocess.Popen((
_CLIENT_PATH,
server_address,
),
stdout=client_stdout)
client_process.wait()
server_process.terminate()
client_stdout.seek(0)

@ -44,9 +44,8 @@ def guide_get_one_feature(stub, point):
def guide_get_feature(stub):
guide_get_one_feature(stub,
route_guide_pb2.Point(
latitude=409146138, longitude=-746188906))
guide_get_one_feature(
stub, route_guide_pb2.Point(latitude=409146138, longitude=-746188906))
guide_get_one_feature(stub, route_guide_pb2.Point(latitude=0, longitude=0))
@ -96,8 +95,8 @@ def generate_messages():
def guide_route_chat(stub):
responses = stub.RouteChat(generate_messages())
for response in responses:
print("Received message %s at %s" % (response.message,
response.location))
print("Received message %s at %s" %
(response.message, response.location))
def run():

@ -47,8 +47,8 @@ def get_distance(start, end):
# Formula is based on http://mathforum.org/library/drmath/view/51879.html
a = (pow(math.sin(delta_lat_rad / 2), 2) +
(math.cos(lat_rad_1) * math.cos(lat_rad_2) * pow(
math.sin(delta_lon_rad / 2), 2)))
(math.cos(lat_rad_1) * math.cos(lat_rad_2) *
pow(math.sin(delta_lon_rad / 2), 2)))
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
R = 6371000
# metres
@ -96,11 +96,10 @@ class RouteGuideServicer(route_guide_pb2_grpc.RouteGuideServicer):
prev_point = point
elapsed_time = time.time() - start_time
return route_guide_pb2.RouteSummary(
point_count=point_count,
feature_count=feature_count,
distance=int(distance),
elapsed_time=int(elapsed_time))
return route_guide_pb2.RouteSummary(point_count=point_count,
feature_count=feature_count,
distance=int(distance),
elapsed_time=int(elapsed_time))
def RouteChat(self, request_iterator, context):
prev_notes = []

@ -57,9 +57,8 @@ def create_server(server_address):
def process(stub, wait_for_ready=None):
try:
response = stub.SayHello(
helloworld_pb2.HelloRequest(name='you'),
wait_for_ready=wait_for_ready)
response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'),
wait_for_ready=wait_for_ready)
message = response.message
except grpc.RpcError as rpc_error:
assert rpc_error.code() == grpc.StatusCode.UNAVAILABLE
@ -67,8 +66,8 @@ def process(stub, wait_for_ready=None):
message = rpc_error
else:
assert wait_for_ready
_LOGGER.info("Wait-for-ready %s, client received: %s", "enabled"
if wait_for_ready else "disabled", message)
_LOGGER.info("Wait-for-ready %s, client received: %s",
"enabled" if wait_for_ready else "disabled", message)
def main():
@ -88,12 +87,12 @@ def main():
stub = helloworld_pb2_grpc.GreeterStub(channel)
# Fire an RPC without wait_for_ready
thread_disabled_wait_for_ready = threading.Thread(
target=process, args=(stub, False))
thread_disabled_wait_for_ready = threading.Thread(target=process,
args=(stub, False))
thread_disabled_wait_for_ready.start()
# Fire an RPC with wait_for_ready
thread_enabled_wait_for_ready = threading.Thread(
target=process, args=(stub, True))
thread_enabled_wait_for_ready = threading.Thread(target=process,
args=(stub, True))
thread_enabled_wait_for_ready.start()
# Wait for the channel entering TRANSIENT FAILURE state.

@ -214,6 +214,9 @@ Pod::Spec.new do |s|
ss.dependency "#{s.name}/Interface", version
ss.dependency 'gRPC-Core', version
abseil_version = '0.20190808.1'
ss.dependency 'abseil/container/inlined_vector', abseil_version
ss.dependency 'abseil/strings/strings', abseil_version
ss.dependency 'abseil/types/optional', abseil_version
ss.source_files = 'include/grpcpp/impl/codegen/core_codegen.h',
'src/core/ext/filters/client_channel/backend_metric.h',
@ -312,9 +315,20 @@ Pod::Spec.new do |s|
'src/core/ext/upb-generated/envoy/api/v2/eds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/lds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/rds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/srds.upb.h',
'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h',
'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h',
'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h',
'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h',
'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h',
'src/core/ext/upb-generated/envoy/type/http.upb.h',
'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h',
'src/core/ext/upb-generated/envoy/type/matcher/string.upb.h',
'src/core/ext/upb-generated/envoy/type/percent.upb.h',
'src/core/ext/upb-generated/envoy/type/range.upb.h',
'src/core/ext/upb-generated/gogoproto/gogo.upb.h',
@ -429,7 +443,6 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/is_epollexclusive_available.h',
'src/core/lib/iomgr/load_file.h',
'src/core/lib/iomgr/lockfree_event.h',
'src/core/lib/iomgr/logical_thread.h',
'src/core/lib/iomgr/nameser.h',
'src/core/lib/iomgr/poller/eventmanager_libuv.h',
'src/core/lib/iomgr/polling_entity.h',
@ -470,6 +483,7 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/unix_sockets_posix.h',
'src/core/lib/iomgr/wakeup_fd_pipe.h',
'src/core/lib/iomgr/wakeup_fd_posix.h',
'src/core/lib/iomgr/work_serializer.h',
'src/core/lib/json/json.h',
'src/core/lib/profiling/timers.h',
'src/core/lib/security/context/security_context.h',
@ -733,9 +747,20 @@ Pod::Spec.new do |s|
'src/core/ext/upb-generated/envoy/api/v2/eds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/lds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/rds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/srds.upb.h',
'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h',
'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h',
'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h',
'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h',
'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h',
'src/core/ext/upb-generated/envoy/type/http.upb.h',
'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h',
'src/core/ext/upb-generated/envoy/type/matcher/string.upb.h',
'src/core/ext/upb-generated/envoy/type/percent.upb.h',
'src/core/ext/upb-generated/envoy/type/range.upb.h',
'src/core/ext/upb-generated/gogoproto/gogo.upb.h',
@ -850,7 +875,6 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/is_epollexclusive_available.h',
'src/core/lib/iomgr/load_file.h',
'src/core/lib/iomgr/lockfree_event.h',
'src/core/lib/iomgr/logical_thread.h',
'src/core/lib/iomgr/nameser.h',
'src/core/lib/iomgr/poller/eventmanager_libuv.h',
'src/core/lib/iomgr/polling_entity.h',
@ -891,6 +915,7 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/unix_sockets_posix.h',
'src/core/lib/iomgr/wakeup_fd_pipe.h',
'src/core/lib/iomgr/wakeup_fd_posix.h',
'src/core/lib/iomgr/work_serializer.h',
'src/core/lib/json/json.h',
'src/core/lib/profiling/timers.h',
'src/core/lib/security/context/security_context.h',

@ -170,8 +170,11 @@ Pod::Spec.new do |s|
ss.header_mappings_dir = '.'
ss.libraries = 'z'
ss.dependency "#{s.name}/Interface", version
ss.dependency 'BoringSSL-GRPC', '0.0.5'
ss.dependency 'BoringSSL-GRPC', '0.0.7'
abseil_version = '0.20190808.1'
ss.dependency 'abseil/container/inlined_vector', abseil_version
ss.dependency 'abseil/strings/strings', abseil_version
ss.dependency 'abseil/types/optional', abseil_version
ss.compiler_flags = '-DGRPC_SHADOW_BORINGSSL_SYMBOLS'
ss.source_files = 'src/core/ext/filters/census/grpc_context.cc',
@ -387,12 +390,34 @@ Pod::Spec.new do |s|
'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/lds.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/lds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/rds.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/rds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/srds.upb.c',
'src/core/ext/upb-generated/envoy/api/v2/srds.upb.h',
'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c',
'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h',
'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c',
'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h',
'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c',
'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h',
'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c',
'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h',
'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c',
'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h',
'src/core/ext/upb-generated/envoy/type/http.upb.c',
'src/core/ext/upb-generated/envoy/type/http.upb.h',
'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c',
'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h',
'src/core/ext/upb-generated/envoy/type/matcher/string.upb.c',
'src/core/ext/upb-generated/envoy/type/matcher/string.upb.h',
'src/core/ext/upb-generated/envoy/type/percent.upb.c',
'src/core/ext/upb-generated/envoy/type/percent.upb.h',
'src/core/ext/upb-generated/envoy/type/range.upb.c',
@ -630,8 +655,6 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/load_file.h',
'src/core/lib/iomgr/lockfree_event.cc',
'src/core/lib/iomgr/lockfree_event.h',
'src/core/lib/iomgr/logical_thread.cc',
'src/core/lib/iomgr/logical_thread.h',
'src/core/lib/iomgr/nameser.h',
'src/core/lib/iomgr/poller/eventmanager_libuv.cc',
'src/core/lib/iomgr/poller/eventmanager_libuv.h',
@ -725,10 +748,14 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/wakeup_fd_pipe.h',
'src/core/lib/iomgr/wakeup_fd_posix.cc',
'src/core/lib/iomgr/wakeup_fd_posix.h',
'src/core/lib/iomgr/work_serializer.cc',
'src/core/lib/iomgr/work_serializer.h',
'src/core/lib/json/json.cc',
'src/core/lib/json/json.h',
'src/core/lib/json/json_reader.cc',
'src/core/lib/json/json_reader_new.cc',
'src/core/lib/json/json_writer.cc',
'src/core/lib/json/json_writer_new.cc',
'src/core/lib/profiling/basic_timers.cc',
'src/core/lib/profiling/stap_timers.cc',
'src/core/lib/profiling/timers.h',
@ -1049,9 +1076,20 @@ Pod::Spec.new do |s|
'src/core/ext/upb-generated/envoy/api/v2/eds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/lds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/rds.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h',
'src/core/ext/upb-generated/envoy/api/v2/srds.upb.h',
'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h',
'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h',
'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h',
'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h',
'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h',
'src/core/ext/upb-generated/envoy/type/http.upb.h',
'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h',
'src/core/ext/upb-generated/envoy/type/matcher/string.upb.h',
'src/core/ext/upb-generated/envoy/type/percent.upb.h',
'src/core/ext/upb-generated/envoy/type/range.upb.h',
'src/core/ext/upb-generated/gogoproto/gogo.upb.h',
@ -1166,7 +1204,6 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/is_epollexclusive_available.h',
'src/core/lib/iomgr/load_file.h',
'src/core/lib/iomgr/lockfree_event.h',
'src/core/lib/iomgr/logical_thread.h',
'src/core/lib/iomgr/nameser.h',
'src/core/lib/iomgr/poller/eventmanager_libuv.h',
'src/core/lib/iomgr/polling_entity.h',
@ -1207,6 +1244,7 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/unix_sockets_posix.h',
'src/core/lib/iomgr/wakeup_fd_pipe.h',
'src/core/lib/iomgr/wakeup_fd_posix.h',
'src/core/lib/iomgr/work_serializer.h',
'src/core/lib/json/json.h',
'src/core/lib/profiling/timers.h',
'src/core/lib/security/context/security_context.h',

@ -136,6 +136,7 @@ EXPORTS
grpc_local_server_credentials_create
grpc_tls_credentials_options_create
grpc_tls_credentials_options_set_cert_request_type
grpc_tls_credentials_options_set_server_verification_option
grpc_tls_credentials_options_set_key_materials_config
grpc_tls_credentials_options_set_credential_reload_config
grpc_tls_credentials_options_set_server_authorization_check_config

File diff suppressed because it is too large Load Diff

1935
grpc.gyp

File diff suppressed because it is too large Load Diff

@ -132,7 +132,8 @@ GRPCAPI void grpc_channel_credentials_release(grpc_channel_credentials* creds);
/** Creates default credentials to connect to a google gRPC service.
WARNING: Do NOT use this credentials to connect to a non-google service as
this could result in an oauth2 token leak. */
this could result in an oauth2 token leak. The security level of the
resulting connection is GRPC_PRIVACY_AND_INTEGRITY. */
GRPCAPI grpc_channel_credentials* grpc_google_default_credentials_create(void);
/** Callback for getting the SSL roots override from the application.
@ -208,6 +209,7 @@ typedef struct {
/** Deprecated in favor of grpc_ssl_server_credentials_create_ex. It will be
removed after all of its call sites are migrated to
grpc_ssl_server_credentials_create_ex. Creates an SSL credentials object.
The security level of the resulting connection is GRPC_PRIVACY_AND_INTEGRITY.
- pem_root_certs is the NULL-terminated string containing the PEM encoding
of the server root certificates. If this parameter is NULL, the
implementation will first try to dereference the file pointed by the
@ -239,6 +241,7 @@ GRPCAPI grpc_channel_credentials* grpc_ssl_credentials_create(
const verify_peer_options* verify_options, void* reserved);
/* Creates an SSL credentials object.
The security level of the resulting connection is GRPC_PRIVACY_AND_INTEGRITY.
- pem_root_certs is the NULL-terminated string containing the PEM encoding
of the server root certificates. If this parameter is NULL, the
implementation will first try to dereference the file pointed by the
@ -281,7 +284,8 @@ typedef struct grpc_call_credentials grpc_call_credentials;
The creator of the credentials object is responsible for its release. */
GRPCAPI void grpc_call_credentials_release(grpc_call_credentials* creds);
/** Creates a composite channel credentials object. */
/** Creates a composite channel credentials object. The security level of
* resulting connection is determined by channel_creds. */
GRPCAPI grpc_channel_credentials* grpc_composite_channel_credentials_create(
grpc_channel_credentials* channel_creds, grpc_call_credentials* call_creds,
void* reserved);
@ -431,9 +435,11 @@ typedef struct {
const char* type;
} grpc_metadata_credentials_plugin;
/** Creates a credentials object from a plugin. */
/** Creates a credentials object from a plugin with a specified minimum security
* level. */
GRPCAPI grpc_call_credentials* grpc_metadata_credentials_create_from_plugin(
grpc_metadata_credentials_plugin plugin, void* reserved);
grpc_metadata_credentials_plugin plugin,
grpc_security_level min_security_level, void* reserved);
/** --- Secure channel creation. --- */
@ -653,8 +659,9 @@ GRPCAPI void grpc_alts_credentials_options_destroy(
grpc_alts_credentials_options* options);
/**
* This method creates an ALTS channel credential object. It is used for
* experimental purpose for now and subject to change.
* This method creates an ALTS channel credential object. The security
* level of the resulting connection is GRPC_PRIVACY_AND_INTEGRITY.
* It is used for experimental purpose for now and subject to change.
*
* - options: grpc ALTS credentials options instance for client.
*
@ -677,8 +684,10 @@ GRPCAPI grpc_server_credentials* grpc_alts_server_credentials_create(
/** --- Local channel/server credentials --- **/
/**
* This method creates a local channel credential object. It is used for
* experimental purpose for now and subject to change.
* This method creates a local channel credential object. The security level
* of the resulting connection is GRPC_PRIVACY_AND_INTEGRITY for UDS and
* GRPC_SECURITY_NONE for LOCAL_TCP. It is used for experimental purpose
* for now and subject to change.
*
* - type: local connection type
*
@ -731,6 +740,19 @@ GRPCAPI int grpc_tls_credentials_options_set_cert_request_type(
grpc_tls_credentials_options* options,
grpc_ssl_client_certificate_request_type type);
/** Set grpc_tls_server_verification_option field in credentials options
with the provided server_verification_option. options should not be NULL.
This should be called only on the client side.
If grpc_tls_server_verification_option is not
GRPC_TLS_SERVER_VERIFICATION, use of a customer server
authorization check (grpc_tls_server_authorization_check_config)
will be mandatory.
It returns 1 on success and 0 on failure. It is used for
experimental purpose for now and subject to change. */
GRPCAPI int grpc_tls_credentials_options_set_server_verification_option(
grpc_tls_credentials_options* options,
grpc_tls_server_verification_option server_verification_option);
/** Set grpc_tls_key_materials_config field in credentials options
with the provided config struct whose ownership is transferred.
Both parameters should not be NULL.
@ -902,6 +924,7 @@ struct grpc_tls_server_authorization_check_arg {
int success;
const char* target_name;
const char* peer_cert;
const char* peer_cert_full_chain;
grpc_status_code status;
const char* error_details;
grpc_tls_server_authorization_check_config* config;
@ -940,7 +963,8 @@ grpc_tls_server_authorization_check_config_create(
/**
* This method creates a TLS channel credential object.
* It takes ownership of the options parameter.
* It takes ownership of the options parameter. The security level
* of the resulting connection is GRPC_PRIVACY_AND_INTEGRITY.
*
* - options: grpc TLS credentials options instance.
*

@ -29,7 +29,9 @@ extern "C" {
#define GRPC_X509_CN_PROPERTY_NAME "x509_common_name"
#define GRPC_X509_SAN_PROPERTY_NAME "x509_subject_alternative_name"
#define GRPC_X509_PEM_CERT_PROPERTY_NAME "x509_pem_cert"
#define GRPC_X509_PEM_CERT_CHAIN_PROPERTY_NAME "x509_pem_cert_chain"
#define GRPC_SSL_SESSION_REUSED_PROPERTY "ssl_session_reused"
#define GRPC_TRANSPORT_SECURITY_LEVEL_PROPERTY_NAME "security_level"
/** Environment variable that points to the default SSL roots file. This file
must be a PEM encoded file with all the roots such as the one that can be
@ -105,6 +107,31 @@ typedef enum {
GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY
} grpc_ssl_client_certificate_request_type;
/* Security levels of grpc transport security. It represents an inherent
* property of a backend connection and is determined by a channel credential
* used to create the connection. */
typedef enum {
GRPC_SECURITY_MIN,
GRPC_SECURITY_NONE = GRPC_SECURITY_MIN,
GRPC_INTEGRITY_ONLY,
GRPC_PRIVACY_AND_INTEGRITY,
GRPC_SECURITY_MAX = GRPC_PRIVACY_AND_INTEGRITY,
} grpc_security_level;
typedef enum {
/** Default option: performs server certificate verification and hostname
verification. */
GRPC_TLS_SERVER_VERIFICATION,
/** Performs server certificate verification, but skips hostname verification
Client is responsible for verifying server's identity via
server authorization check callback. */
GRPC_TLS_SKIP_HOSTNAME_VERIFICATION,
/** Skips both server certificate and hostname verification.
Client is responsible for verifying server's identity and
server's certificate via server authorization check callback. */
GRPC_TLS_SKIP_ALL_SERVER_VERIFICATION
} grpc_tls_server_verification_option;
/**
* Type of local connections for which local channel/server credentials will be
* applied. It supports UDS and local TCP connections.

@ -323,6 +323,20 @@ typedef struct {
"grpc.experimental.tcp_min_read_chunk_size"
#define GRPC_ARG_TCP_MAX_READ_CHUNK_SIZE \
"grpc.experimental.tcp_max_read_chunk_size"
/* TCP TX Zerocopy enable state: zero is disabled, non-zero is enabled. By
default, it is disabled. */
#define GRPC_ARG_TCP_TX_ZEROCOPY_ENABLED \
"grpc.experimental.tcp_tx_zerocopy_enabled"
/* TCP TX Zerocopy send threshold: only zerocopy if >= this many bytes sent. By
default, this is set to 16KB. */
#define GRPC_ARG_TCP_TX_ZEROCOPY_SEND_BYTES_THRESHOLD \
"grpc.experimental.tcp_tx_zerocopy_send_bytes_threshold"
/* TCP TX Zerocopy max simultaneous sends: limit for maximum number of pending
calls to tcp_write() using zerocopy. A tcp_write() is considered pending
until the kernel performs the zerocopy-done callback for all sendmsg() calls
issued by the tcp_write(). By default, this is set to 4. */
#define GRPC_ARG_TCP_TX_ZEROCOPY_MAX_SIMULT_SENDS \
"grpc.experimental.tcp_tx_zerocopy_max_simultaneous_sends"
/* Timeout in milliseconds to use for calls to the grpclb load balancer.
If 0 or unset, the balancer calls will have no deadline. */
#define GRPC_ARG_GRPCLB_CALL_TIMEOUT_MS "grpc.grpclb_call_timeout_ms"
@ -346,6 +360,11 @@ typedef struct {
of that priority fail to connect. If 0, failover happens immediately. Default
value is 10 seconds. */
#define GRPC_ARG_XDS_FAILOVER_TIMEOUT_MS "grpc.xds_failover_timeout_ms"
/* Timeout in milliseconds to wait for a resource to be returned from
* the xds server before assuming that it does not exist.
* The default is 15 seconds. */
#define GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS \
"grpc.xds_resource_does_not_exist_timeout_ms"
/** If non-zero, grpc server's cronet compression workaround will be enabled */
#define GRPC_ARG_WORKAROUND_CRONET_COMPRESSION \
"grpc.workaround.cronet_compression"

@ -31,7 +31,7 @@
* Defines GRPC_USE_ABSL to use Abseil Common Libraries (C++)
*/
#ifndef GRPC_USE_ABSL
#define GRPC_USE_ABSL 0
#define GRPC_USE_ABSL 1
#endif
/* Get windows.h included everywhere (we need it) */

@ -150,11 +150,6 @@ class CallbackWithSuccessTag
CallbackWithSuccessTag() : call_(nullptr) {}
CallbackWithSuccessTag(grpc_call* call, std::function<void(bool)> f,
CompletionQueueTag* ops, bool can_inline) {
Set(call, f, ops, can_inline);
}
CallbackWithSuccessTag(const CallbackWithSuccessTag&) = delete;
CallbackWithSuccessTag& operator=(const CallbackWithSuccessTag&) = delete;

@ -209,18 +209,18 @@ class ClientBidiReactor {
/// Initiate a write operation (or post it for later initiation if StartCall
/// has not yet been invoked).
///
/// \param[in] req The message to be written. The library takes temporary
/// ownership until OnWriteDone, at which point the application
/// regains ownership of msg.
/// \param[in] req The message to be written. The library does not take
/// ownership but the caller must ensure that the message is
/// not deleted or modified until OnWriteDone is called.
void StartWrite(const Request* req) {
StartWrite(req, ::grpc::WriteOptions());
}
/// Initiate/post a write operation with specified options.
///
/// \param[in] req The message to be written. The library takes temporary
/// ownership until OnWriteDone, at which point the application
/// regains ownership of msg.
/// \param[in] req The message to be written. The library does not take
/// ownership but the caller must ensure that the message is
/// not deleted or modified until OnWriteDone is called.
/// \param[in] options The WriteOptions to use for writing this message
void StartWrite(const Request* req, ::grpc::WriteOptions options) {
stream_->Write(req, std::move(options));
@ -231,9 +231,9 @@ class ClientBidiReactor {
/// Note that calling this means that no more calls to StartWrite,
/// StartWriteLast, or StartWritesDone are allowed.
///
/// \param[in] req The message to be written. The library takes temporary
/// ownership until OnWriteDone, at which point the application
/// regains ownership of msg.
/// \param[in] req The message to be written. The library does not take
/// ownership but the caller must ensure that the message is
/// not deleted or modified until OnWriteDone is called.
/// \param[in] options The WriteOptions to use for writing this message
void StartWriteLast(const Request* req, ::grpc::WriteOptions options) {
StartWrite(req, std::move(options.set_last_message()));

@ -49,7 +49,7 @@ Status GenericSerialize(const grpc::protobuf::MessageLite& msg, ByteBuffer* bb,
"ProtoBufferWriter must be a subclass of "
"::protobuf::io::ZeroCopyOutputStream");
*own_buffer = true;
int byte_size = msg.ByteSize();
int byte_size = msg.ByteSizeLong();
if ((size_t)byte_size <= GRPC_SLICE_INLINED_SIZE) {
Slice slice(byte_size);
// We serialize directly into the allocated slices memory

@ -277,18 +277,18 @@ class ServerBidiReactor : public internal::ServerReactor {
/// Initiate a write operation.
///
/// \param[in] resp The message to be written. The library takes temporary
/// ownership until OnWriteDone, at which point the
/// application regains ownership of resp.
/// \param[in] resp The message to be written. The library does not take
/// ownership but the caller must ensure that the message is
/// not deleted or modified until OnWriteDone is called.
void StartWrite(const Response* resp) {
StartWrite(resp, ::grpc::WriteOptions());
}
/// Initiate a write operation with specified options.
///
/// \param[in] resp The message to be written. The library takes temporary
/// ownership until OnWriteDone, at which point the
/// application regains ownership of resp.
/// \param[in] resp The message to be written. The library does not take
/// ownership but the caller must ensure that the message is
/// not deleted or modified until OnWriteDone is called.
/// \param[in] options The WriteOptions to use for writing this message
void StartWrite(const Response* resp, ::grpc::WriteOptions options) {
ServerCallbackReaderWriter<Request, Response>* stream =
@ -313,9 +313,9 @@ class ServerBidiReactor : public internal::ServerReactor {
/// available. An RPC can either have StartWriteAndFinish or Finish, but not
/// both.
///
/// \param[in] resp The message to be written. The library takes temporary
/// ownership until OnWriteDone, at which point the
/// application regains ownership of resp.
/// \param[in] resp The message to be written. The library does not take
/// ownership but the caller must ensure that the message is
/// not deleted or modified until OnDone is called.
/// \param[in] options The WriteOptions to use for writing this message
/// \param[in] s The status outcome of this RPC
void StartWriteAndFinish(const Response* resp, ::grpc::WriteOptions options,
@ -340,9 +340,9 @@ class ServerBidiReactor : public internal::ServerReactor {
/// allow the library to schedule the actual write coalesced with the writing
/// of trailing metadata (which takes place on a Finish call).
///
/// \param[in] resp The message to be written. The library takes temporary
/// ownership until OnWriteDone, at which point the
/// application regains ownership of resp.
/// \param[in] resp The message to be written. The library does not take
/// ownership but the caller must ensure that the message is
/// not deleted or modified until OnWriteDone is called.
/// \param[in] options The WriteOptions to use for writing this message
void StartWriteLast(const Response* resp, ::grpc::WriteOptions options) {
StartWrite(resp, std::move(options.set_last_message()));

@ -20,8 +20,10 @@
#define GRPCPP_IMPL_CODEGEN_SERVER_CONTEXT_IMPL_H
#include <atomic>
#include <cassert>
#include <map>
#include <memory>
#include <type_traits>
#include <vector>
#include <grpc/impl/codegen/port_platform.h>
@ -301,9 +303,20 @@ class ServerContextBase {
///
/// WARNING: This is experimental API and could be changed or removed.
::grpc_impl::ServerUnaryReactor* DefaultReactor() {
auto reactor = &default_reactor_;
// Short-circuit the case where a default reactor was already set up by
// the TestPeer.
if (test_unary_ != nullptr) {
return reinterpret_cast<Reactor*>(&default_reactor_);
}
new (&default_reactor_) Reactor;
#ifndef NDEBUG
bool old = false;
assert(default_reactor_used_.compare_exchange_strong(
old, true, std::memory_order_relaxed));
#else
default_reactor_used_.store(true, std::memory_order_relaxed);
return reactor;
#endif
return reinterpret_cast<Reactor*>(&default_reactor_);
}
/// Constructors for use by derived classes
@ -445,7 +458,7 @@ class ServerContextBase {
public:
TestServerCallbackUnary(ServerContextBase* ctx,
std::function<void(::grpc::Status)> func)
: reactor_(&ctx->default_reactor_), func_(std::move(func)) {
: reactor_(ctx->DefaultReactor()), func_(std::move(func)) {
this->BindReactor(reactor_);
}
void Finish(::grpc::Status s) override {
@ -472,7 +485,8 @@ class ServerContextBase {
const std::function<void(::grpc::Status s)> func_;
};
Reactor default_reactor_;
typename std::aligned_storage<sizeof(Reactor), alignof(Reactor)>::type
default_reactor_;
std::atomic_bool default_reactor_used_{false};
std::unique_ptr<TestServerCallbackUnary> test_unary_;
};

@ -193,7 +193,8 @@ class ClientReader final : public ClientReaderInterface<R> {
}
bool NextMessageSize(uint32_t* sz) override {
*sz = call_.max_receive_message_size();
int result = call_.max_receive_message_size();
*sz = (result > 0) ? result : UINT32_MAX;
return true;
}
@ -463,7 +464,8 @@ class ClientReaderWriter final : public ClientReaderWriterInterface<W, R> {
}
bool NextMessageSize(uint32_t* sz) override {
*sz = call_.max_receive_message_size();
int result = call_.max_receive_message_size();
*sz = (result > 0) ? result : UINT32_MAX;
return true;
}
@ -597,7 +599,8 @@ class ServerReader final : public ServerReaderInterface<R> {
}
bool NextMessageSize(uint32_t* sz) override {
*sz = call_->max_receive_message_size();
int result = call_->max_receive_message_size();
*sz = (result > 0) ? result : UINT32_MAX;
return true;
}
@ -724,7 +727,8 @@ class ServerReaderWriterBody final {
}
bool NextMessageSize(uint32_t* sz) {
*sz = call_->max_receive_message_size();
int result = call_->max_receive_message_size();
*sz = (result > 0) ? result : UINT32_MAX;
return true;
}

@ -0,0 +1,67 @@
/*
*
* Copyright 2019 gRPC authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#ifndef GRPCPP_SECURITY_ALTS_CONTEXT_H
#define GRPCPP_SECURITY_ALTS_CONTEXT_H
#include <grpc/grpc_security_constants.h>
#include <grpcpp/security/auth_context.h>
#include <memory>
struct grpc_gcp_AltsContext;
namespace grpc {
namespace experimental {
// AltsContext is a wrapper class for grpc_gcp_AltsContext.
class AltsContext {
public:
struct RpcProtocolVersions {
struct Version {
int major_version;
int minor_version;
};
Version max_rpc_version;
Version min_rpc_version;
};
explicit AltsContext(const grpc_gcp_AltsContext* ctx);
AltsContext& operator=(const AltsContext&) = default;
AltsContext(const AltsContext&) = default;
grpc::string application_protocol() const;
grpc::string record_protocol() const;
grpc::string peer_service_account() const;
grpc::string local_service_account() const;
grpc_security_level security_level() const;
RpcProtocolVersions peer_rpc_versions() const;
private:
// TODO(ZhenLian): Also plumb field peer_attributes when it is in use
grpc::string application_protocol_;
grpc::string record_protocol_;
grpc::string peer_service_account_;
grpc::string local_service_account_;
grpc_security_level security_level_ = GRPC_SECURITY_NONE;
RpcProtocolVersions peer_rpc_versions_ = {{0, 0}, {0, 0}};
};
} // namespace experimental
} // namespace grpc
#endif // GRPCPP_SECURITY_ALTS_CONTEXT_H

@ -0,0 +1,50 @@
/*
*
* Copyright 2019 gRPC authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#ifndef GRPCPP_SECURITY_ALTS_UTIL_H
#define GRPCPP_SECURITY_ALTS_UTIL_H
#include <grpc/grpc_security_constants.h>
#include <grpcpp/impl/codegen/status.h>
#include <grpcpp/security/alts_context.h>
#include <grpcpp/security/auth_context.h>
#include <memory>
struct grpc_gcp_AltsContext;
namespace grpc {
namespace experimental {
// GetAltsContextFromAuthContext helps to get the AltsContext from AuthContext.
// If ALTS is not the transport security protocol used to establish the
// connection, this function will return nullptr.
std::unique_ptr<AltsContext> GetAltsContextFromAuthContext(
const std::shared_ptr<const AuthContext>& auth_context);
// This utility function performs ALTS client authorization check on server
// side, i.e., checks if the client identity matches one of the expected service
// accounts. It returns OK if client is authorized and an error otherwise.
grpc::Status AltsClientAuthzCheck(
const std::shared_ptr<const AuthContext>& auth_context,
const std::vector<std::string>& expected_service_accounts);
} // namespace experimental
} // namespace grpc
#endif // GRPCPP_SECURITY_ALTS_UTIL_H

@ -321,6 +321,10 @@ grpc::Status StsCredentialsOptionsFromEnv(StsCredentialsOptions* options);
std::shared_ptr<CallCredentials> StsCredentials(
const StsCredentialsOptions& options);
std::shared_ptr<CallCredentials> MetadataCredentialsFromPlugin(
std::unique_ptr<MetadataCredentialsPlugin> plugin,
grpc_security_level min_security_level);
/// Options used to build AltsCredentials.
struct AltsCredentialsOptions {
/// service accounts of target endpoint that will be acceptable

@ -193,6 +193,7 @@ class TlsServerAuthorizationCheckArg {
int success() const;
grpc::string target_name() const;
grpc::string peer_cert() const;
grpc::string peer_cert_full_chain() const;
grpc_status_code status() const;
grpc::string error_details() const;
@ -206,6 +207,7 @@ class TlsServerAuthorizationCheckArg {
void set_success(int success);
void set_target_name(const grpc::string& target_name);
void set_peer_cert(const grpc::string& peer_cert);
void set_peer_cert_full_chain(const grpc::string& peer_cert_full_chain);
void set_status(grpc_status_code status);
void set_error_details(const grpc::string& error_details);
@ -287,6 +289,7 @@ class TlsCredentialsOptions {
public:
TlsCredentialsOptions(
grpc_ssl_client_certificate_request_type cert_request_type,
grpc_tls_server_verification_option server_verification_option,
std::shared_ptr<TlsKeyMaterialsConfig> key_materials_config,
std::shared_ptr<TlsCredentialReloadConfig> credential_reload_config,
std::shared_ptr<TlsServerAuthorizationCheckConfig>
@ -297,6 +300,9 @@ class TlsCredentialsOptions {
grpc_ssl_client_certificate_request_type cert_request_type() const {
return cert_request_type_;
}
grpc_tls_server_verification_option server_verification_option() const {
return server_verification_option_;
}
std::shared_ptr<TlsKeyMaterialsConfig> key_materials_config() const {
return key_materials_config_;
}
@ -317,6 +323,9 @@ class TlsCredentialsOptions {
* goes unused when creating channel credentials, and the user can set it to
* GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE. **/
grpc_ssl_client_certificate_request_type cert_request_type_;
/** The server_verification_option_ flag is only relevant when the
* TlsCredentialsOptions are used to instantiate client credentials; **/
grpc_tls_server_verification_option server_verification_option_;
std::shared_ptr<TlsKeyMaterialsConfig> key_materials_config_;
std::shared_ptr<TlsCredentialReloadConfig> credential_reload_config_;
std::shared_ptr<TlsServerAuthorizationCheckConfig>

@ -163,9 +163,6 @@ class Server : public grpc::ServerInterface, private grpc::GrpcLibraryCodegen {
///
/// Server constructors. To be used by \a ServerBuilder only.
///
/// \param max_message_size Maximum message length that the channel can
/// receive.
///
/// \param args The channel args
///
/// \param sync_server_cqs The completion queues to use if the server is a
@ -182,7 +179,7 @@ class Server : public grpc::ServerInterface, private grpc::GrpcLibraryCodegen {
///
/// \param sync_cq_timeout_msec The timeout to use when calling AsyncNext() on
/// server completion queues passed via sync_server_cqs param.
Server(int max_message_size, ChannelArguments* args,
Server(ChannelArguments* args,
std::shared_ptr<std::vector<std::unique_ptr<ServerCompletionQueue>>>
sync_server_cqs,
int min_pollers, int max_pollers, int sync_cq_timeout_msec,
@ -306,7 +303,7 @@ class Server : public grpc::ServerInterface, private grpc::GrpcLibraryCodegen {
std::unique_ptr<grpc::experimental::ServerInterceptorFactoryInterface>>
interceptor_creators_;
const int max_receive_message_size_;
int max_receive_message_size_;
/// The following completion queues are ONLY used in case of Sync API
/// i.e. if the server has any services with sync methods. The server uses

@ -29,7 +29,9 @@ namespace testing {
/// DefaultReactor. It is intended for allow unit-testing of a callback API
/// service via direct invocation of the service methods rather than through
/// RPCs. It is only applicable for unary RPC methods that use the
/// DefaultReactor rather than any user-defined reactor.
/// DefaultReactor rather than any user-defined reactor. If it is used, it must
/// be created before the RPC is invoked so that it can bind the reactor into a
/// test mode rather than letting it follow the normal paths.
class DefaultReactorTestPeer {
public:
explicit DefaultReactorTestPeer(experimental::CallbackServerContext* ctx)
@ -40,7 +42,8 @@ class DefaultReactorTestPeer {
ctx->SetupTestDefaultReactor(std::move(finish_func));
}
::grpc::experimental::ServerUnaryReactor* reactor() const {
return &ctx_->default_reactor_;
return reinterpret_cast<experimental::ServerUnaryReactor*>(
&ctx_->default_reactor_);
}
bool test_status_set() const { return ctx_->test_status_set(); }
Status test_status() const { return ctx_->test_status(); }

File diff suppressed because it is too large Load Diff

@ -24,5 +24,7 @@ inputs =
src/python/grpcio/grpc/experimental
src/python/grpcio_tests/tests_aio
disable =
import-error
# NOTE(lidiz)
# import-error: C extension triggers import-error.
# module-attr: pytype cannot understand the namespace packages by Google.
disable = "import-error,module-attr"

@ -38,6 +38,7 @@ egg_info.manifest_maker.template = 'PYTHON-MANIFEST.in'
PY3 = sys.version_info.major == 3
PYTHON_STEM = os.path.join('src', 'python', 'grpcio')
CORE_INCLUDE = ('include', '.',)
ABSL_INCLUDE = (os.path.join('third_party', 'abseil-cpp'),)
ADDRESS_SORTING_INCLUDE = (os.path.join('third_party', 'address_sorting', 'include'),)
CARES_INCLUDE = (
os.path.join('third_party', 'cares'),
@ -50,7 +51,7 @@ if 'linux' in sys.platform:
CARES_INCLUDE += (os.path.join('third_party', 'cares', 'config_linux'),)
if 'openbsd' in sys.platform:
CARES_INCLUDE += (os.path.join('third_party', 'cares', 'config_openbsd'),)
SSL_INCLUDE = (os.path.join('third_party', 'boringssl', 'include'),)
SSL_INCLUDE = (os.path.join('third_party', 'boringssl-with-bazel', 'src', 'include'),)
UPB_INCLUDE = (os.path.join('third_party', 'upb'),)
UPB_GRPC_GENERATED_INCLUDE = (os.path.join('src', 'core', 'ext', 'upb-generated'),)
ZLIB_INCLUDE = (os.path.join('third_party', 'zlib'),)
@ -191,11 +192,9 @@ if EXTRA_ENV_LINK_ARGS is None:
EXTRA_ENV_LINK_ARGS += ' -latomic'
elif "win32" in sys.platform and sys.version_info < (3, 5):
msvcr = cygwinccompiler.get_msvcr()[0]
# TODO(atash) sift through the GCC specs to see if libstdc++ can have any
# influence on the linkage outcome on MinGW for non-C++ programs.
EXTRA_ENV_LINK_ARGS += (
' -static-libgcc -static-libstdc++ -mcrtdll={msvcr}'
' -static'.format(msvcr=msvcr))
' -static -lshlwapi'.format(msvcr=msvcr))
if "linux" in sys.platform:
EXTRA_ENV_LINK_ARGS += ' -Wl,-wrap,memcpy -static-libgcc'
@ -228,6 +227,7 @@ if BUILD_WITH_SYSTEM_CARES:
EXTENSION_INCLUDE_DIRECTORIES = (
(PYTHON_STEM,) +
CORE_INCLUDE +
ABSL_INCLUDE +
ADDRESS_SORTING_INCLUDE +
CARES_INCLUDE +
SSL_INCLUDE +

@ -17,10 +17,10 @@
import os
import yaml
BUILDS_YAML_PATH = os.path.join(
os.path.dirname(os.path.abspath(__file__)), 'preprocessed_builds.yaml')
BUILDS_YAML_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)),
'preprocessed_builds.yaml')
with open(BUILDS_YAML_PATH) as f:
builds = yaml.load(f)
builds = yaml.load(f)
for build in builds:
build['build'] = 'private'

File diff suppressed because it is too large Load Diff

@ -16,12 +16,16 @@
import collections
import os
import re
import subprocess
import xml.etree.ElementTree as ET
import yaml
ABSEIL_PATH = "third_party/abseil-cpp"
OUTPUT_PATH = "src/abseil-cpp/preprocessed_builds.yaml"
CAPITAL_WORD = re.compile("[A-Z]+")
ABSEIL_CMAKE_RULE_BEGIN = re.compile("^absl_cc_.*\(", re.MULTILINE)
ABSEIL_CMAKE_RULE_END = re.compile("^\)", re.MULTILINE)
# Rule object representing the rule of Bazel BUILD.
Rule = collections.namedtuple(
@ -49,7 +53,7 @@ def normalize_paths(paths):
return [path.lstrip("/").replace(":", "/") for path in paths]
def parse_rule(elem, package):
def parse_bazel_rule(elem, package):
"""Returns a rule from bazel XML rule."""
return Rule(
type=elem.attrib["class"],
@ -63,38 +67,103 @@ def parse_rule(elem, package):
testonly=get_elem_value(elem, "testonly") or False)
def read_build(package):
def read_bazel_build(package):
"""Runs bazel query on given package file and returns all cc rules."""
result = subprocess.check_output(
["bazel", "query", package + ":all", "--output", "xml"])
root = ET.fromstring(result)
return [
parse_rule(elem, package)
parse_bazel_rule(elem, package)
for elem in root
if elem.tag == "rule" and elem.attrib["class"].startswith("cc_")
]
def collect_rules(root_path):
"""Collects and returns all rules from root path recursively."""
def collect_bazel_rules(root_path):
"""Collects and returns all bazel rules from root path recursively."""
rules = []
for cur, _, _ in os.walk(root_path):
build_path = os.path.join(cur, "BUILD.bazel")
if os.path.exists(build_path):
rules.extend(read_build("//" + cur))
rules.extend(read_bazel_build("//" + cur))
return rules
def parse_cmake_rule(rule, package):
"""Returns a rule from absl cmake rule.
Reference: https://github.com/abseil/abseil-cpp/blob/master/CMake/AbseilHelpers.cmake
"""
kv = {}
bucket = None
lines = rule.splitlines()
for line in lines[1:-1]:
if CAPITAL_WORD.match(line.strip()):
bucket = kv.setdefault(line.strip(), [])
else:
if bucket is not None:
bucket.append(line.strip())
else:
raise ValueError("Illegal syntax: {}".format(rule))
return Rule(
type=lines[0].rstrip("("),
name="absl::" + kv["NAME"][0],
package=package,
srcs=[package + "/" + f.strip('"') for f in kv.get("SRCS", [])],
hdrs=[package + "/" + f.strip('"') for f in kv.get("HDRS", [])],
textual_hdrs=[],
deps=kv.get("DEPS", []),
visibility="PUBLIC" in kv,
testonly="TESTONLY" in kv,
)
def read_cmake_build(build_path, package):
"""Parses given CMakeLists.txt file and returns all cc rules."""
rules = []
with open(build_path, "r") as f:
src = f.read()
for begin_mo in ABSEIL_CMAKE_RULE_BEGIN.finditer(src):
end_mo = ABSEIL_CMAKE_RULE_END.search(src[begin_mo.start(0):])
expr = src[begin_mo.start(0):begin_mo.start(0) + end_mo.start(0) + 1]
rules.append(parse_cmake_rule(expr, package))
return rules
def collect_cmake_rules(root_path):
"""Collects and returns all cmake rules from root path recursively."""
rules = []
for cur, _, _ in os.walk(root_path):
build_path = os.path.join(cur, "CMakeLists.txt")
if os.path.exists(build_path):
rules.extend(read_cmake_build(build_path, cur))
return rules
def pairing_bazel_and_cmake_rules(bazel_rules, cmake_rules):
"""Returns a pair map between bazel rules and cmake rules based on
the similarity of the file list in the rule. This is because
cmake build and bazel build of abseil are not identical.
"""
pair_map = {}
for rule in bazel_rules:
best_crule, best_similarity = None, 0
for crule in cmake_rules:
similarity = len(
set(rule.srcs + rule.hdrs + rule.textual_hdrs).intersection(
set(crule.srcs + crule.hdrs + crule.textual_hdrs)))
if similarity > best_similarity:
best_crule, best_similarity = crule, similarity
if best_crule:
pair_map[(rule.package, rule.name)] = best_crule.name
return pair_map
def resolve_hdrs(files):
return [
ABSEIL_PATH + "/" + f for f in files if f.endswith((".h", ".inc"))
]
return [ABSEIL_PATH + "/" + f for f in files if f.endswith((".h", ".inc"))]
def resolve_srcs(files):
return [
ABSEIL_PATH + "/" + f for f in files if f.endswith(".cc")
]
return [ABSEIL_PATH + "/" + f for f in files if f.endswith(".cc")]
def resolve_deps(targets):
@ -103,15 +172,26 @@ def resolve_deps(targets):
def generate_builds(root_path):
"""Generates builds from all BUILD files under absl directory."""
rules = filter(lambda r: r.type == "cc_library" and not r.testonly,
collect_rules(root_path))
bazel_rules = list(
filter(lambda r: r.type == "cc_library" and not r.testonly,
collect_bazel_rules(root_path)))
cmake_rules = list(
filter(lambda r: r.type == "absl_cc_library" and not r.testonly,
collect_cmake_rules(root_path)))
pair_map = pairing_bazel_and_cmake_rules(bazel_rules, cmake_rules)
builds = []
for rule in sorted(rules, key=lambda r: r.package[2:] + ":" + r.name):
for rule in sorted(bazel_rules, key=lambda r: r.package[2:] + ":" + r.name):
p = {
"name": rule.package[2:] + ":" + rule.name,
"headers": sorted(resolve_hdrs(rule.srcs + rule.hdrs + rule.textual_hdrs)),
"src": sorted(resolve_srcs(rule.srcs + rule.hdrs + rule.textual_hdrs)),
"deps": sorted(resolve_deps(rule.deps)),
"name":
rule.package[2:] + ":" + rule.name,
"cmake_target":
pair_map.get((rule.package, rule.name)) or "",
"headers":
sorted(resolve_hdrs(rule.srcs + rule.hdrs + rule.textual_hdrs)),
"src":
sorted(resolve_srcs(rule.srcs + rule.hdrs + rule.textual_hdrs)),
"deps":
sorted(resolve_deps(rule.deps)),
}
builds.append(p)
return builds

@ -14,6 +14,7 @@ add_subdirectory(${GRPC_SRC_DIR} ${GRPC_BUILD_DIR})
#include_directories(${GRPC_SRC_DIR}/include)
include_directories(${GRPC_SRC_DIR})
include_directories(${_gRPC_ABSL_INCLUDE_DIR})
set(GRPC_PROTO_GENS_DIR ${CMAKE_BINARY_DIR}/gens)
file(MAKE_DIRECTORY ${GRPC_PROTO_GENS_DIR})

@ -20,20 +20,27 @@ import sys
import glob
import yaml
os.chdir(os.path.dirname(sys.argv[0])+'/../..')
os.chdir(os.path.dirname(sys.argv[0]) + '/../..')
out = {}
out['libs'] = [{
'name': 'benchmark',
'build': 'private',
'language': 'c++',
'secure': False,
'defaults': 'benchmark',
'src': sorted(glob.glob('third_party/benchmark/src/*.cc')),
'headers': sorted(
glob.glob('third_party/benchmark/src/*.h') +
glob.glob('third_party/benchmark/include/benchmark/*.h')),
'name':
'benchmark',
'build':
'private',
'language':
'c++',
'secure':
False,
'defaults':
'benchmark',
'src':
sorted(glob.glob('third_party/benchmark/src/*.cc')),
'headers':
sorted(
glob.glob('third_party/benchmark/src/*.h') +
glob.glob('third_party/benchmark/include/benchmark/*.h')),
}]
print(yaml.dump(out))

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

@ -21,122 +21,128 @@ import yaml
sys.dont_write_bytecode = True
boring_ssl_root = os.path.abspath(os.path.join(
os.path.dirname(sys.argv[0]),
'../../third_party/boringssl'))
boring_ssl_root = os.path.abspath(
os.path.join(os.path.dirname(sys.argv[0]),
'../../third_party/boringssl-with-bazel/src'))
sys.path.append(os.path.join(boring_ssl_root, 'util'))
try:
import generate_build_files
import generate_build_files
except ImportError:
print(yaml.dump({}))
sys.exit()
print(yaml.dump({}))
sys.exit()
def map_dir(filename):
if filename[0:4] == 'src/':
return 'third_party/boringssl/' + filename[4:]
else:
return 'src/boringssl/' + filename
return 'third_party/boringssl-with-bazel/' + filename
def map_testarg(arg):
if '/' in arg:
return 'third_party/boringssl/' + arg
else:
return arg
class Grpc(object):
"""Implements a "platform" in the sense of boringssl's generate_build_files.py"""
yaml = None
yaml = None
def WriteFiles(self, files, asm_outputs):
test_binaries = ['ssl_test', 'crypto_test']
def WriteFiles(self, files, asm_outputs):
test_binaries = ['ssl_test', 'crypto_test']
self.yaml = {
'#': 'generated with tools/buildgen/gen_boring_ssl_build_yaml.py',
'raw_boringssl_build_output_for_debugging': {
'files': files,
'asm_outputs': asm_outputs,
},
'libs': [
{
'name': 'boringssl',
'build': 'private',
'language': 'c',
'secure': False,
'src': sorted(
map_dir(f)
for f in files['ssl'] + files['crypto']
),
'headers': sorted(
map_dir(f)
# We want to include files['fips_fragments'], but not build them as objects.
# See https://boringssl-review.googlesource.com/c/boringssl/+/16946
for f in files['ssl_headers'] + files['ssl_internal_headers'] + files['crypto_headers'] + files['crypto_internal_headers'] + files['fips_fragments']
),
'boringssl': True,
'defaults': 'boringssl',
},
{
'name': 'boringssl_test_util',
'build': 'private',
'language': 'c++',
'secure': False,
'boringssl': True,
'defaults': 'boringssl',
'src': [
map_dir(f)
for f in sorted(files['test_support'])
self.yaml = {
'#':
'generated with src/boringssl/gen_build_yaml.py',
'raw_boringssl_build_output_for_debugging': {
'files': files,
'asm_outputs': asm_outputs,
},
'libs': [
{
'name':
'boringssl',
'build':
'private',
'language':
'c',
'secure':
False,
'src':
sorted(
map_dir(f) for f in files['ssl'] + files['crypto']),
'headers':
sorted(
map_dir(f)
# We want to include files['fips_fragments'], but not build them as objects.
# See https://boringssl-review.googlesource.com/c/boringssl/+/16946
for f in files['ssl_headers'] +
files['ssl_internal_headers'] +
files['crypto_headers'] +
files['crypto_internal_headers'] +
files['fips_fragments']),
'boringssl':
True,
'defaults':
'boringssl',
},
{
'name': 'boringssl_test_util',
'build': 'private',
'language': 'c++',
'secure': False,
'boringssl': True,
'defaults': 'boringssl',
'src': [map_dir(f) for f in sorted(files['test_support'])],
}
],
}
],
'targets': [
{
'name': 'boringssl_%s' % test,
'build': 'test',
'run': False,
'secure': False,
'language': 'c++',
'src': sorted(map_dir(f) for f in files[test]),
'vs_proj_dir': 'test/boringssl',
'boringssl': True,
'defaults': 'boringssl',
'deps': [
'boringssl_test_util',
'boringssl',
]
}
for test in test_binaries
],
'tests': [
{
'name': 'boringssl_%s' % test,
'args': [],
'exclude_configs': ['asan', 'ubsan'],
'ci_platforms': ['linux', 'mac', 'posix', 'windows'],
'platforms': ['linux', 'mac', 'posix', 'windows'],
'flaky': False,
'gtest': True,
'language': 'c++',
'boringssl': True,
'defaults': 'boringssl',
'cpu_cost': 1.0
}
for test in test_binaries
]
}
'targets': [{
'name': 'boringssl_%s' % test,
'build': 'test',
'run': False,
'secure': False,
'language': 'c++',
'src': sorted(map_dir(f) for f in files[test]),
'vs_proj_dir': 'test/boringssl',
'boringssl': True,
'defaults': 'boringssl',
'deps': [
'boringssl_test_util',
'boringssl',
]
} for test in test_binaries],
'tests': [{
'name': 'boringssl_%s' % test,
'args': [],
'exclude_configs': ['asan', 'ubsan'],
'ci_platforms': ['linux', 'mac', 'posix', 'windows'],
'platforms': ['linux', 'mac', 'posix', 'windows'],
'flaky': False,
'gtest': True,
'language': 'c++',
'boringssl': True,
'defaults': 'boringssl',
'cpu_cost': 1.0
} for test in test_binaries]
}
os.chdir(os.path.dirname(sys.argv[0]))
os.mkdir('src')
try:
for f in os.listdir(boring_ssl_root):
os.symlink(os.path.join(boring_ssl_root, f),
os.path.join('src', f))
for f in os.listdir(boring_ssl_root):
os.symlink(os.path.join(boring_ssl_root, f), os.path.join('src', f))
g = Grpc()
generate_build_files.main([g])
grpc_platform = Grpc()
# We use a hack to run boringssl's util/generate_build_files.py as part of this script.
# The call will populate "grpc_platform" with boringssl's source file metadata.
# As a side effect this script generates err_data.c and crypto_test_data.cc (requires golang)
# Both of these files are already available under third_party/boringssl-with-bazel
# so we don't need to generate them again, but there's no option to disable that behavior.
# - crypto_test_data.cc is required to run boringssl_crypto_test but we already
# use the copy under third_party/boringssl-with-bazel so we just delete it
# - err_data.c is already under third_party/boringssl-with-bazel so we just delete it
generate_build_files.main([grpc_platform])
print(yaml.dump(g.yaml))
print(yaml.dump(grpc_platform.yaml))
finally:
shutil.rmtree('src')
# we don't want err_data.c and crypto_test_data.cc (see comment above)
if os.path.exists('err_data.c'):
os.remove('err_data.c')
if os.path.exists('crypto_test_data.cc'):
os.remove('crypto_test_data.cc')
shutil.rmtree('src')

@ -19,124 +19,130 @@ import os
import sys
import yaml
os.chdir(os.path.dirname(sys.argv[0])+'/../..')
os.chdir(os.path.dirname(sys.argv[0]) + '/../..')
out = {}
try:
def gen_ares_build(x):
subprocess.call("third_party/cares/cares/buildconf", shell=True)
subprocess.call("third_party/cares/cares/configure", shell=True)
def config_platform(x):
if 'darwin' in sys.platform:
return 'src/cares/cares/config_darwin/ares_config.h'
if 'freebsd' in sys.platform:
return 'src/cares/cares/config_freebsd/ares_config.h'
if 'linux' in sys.platform:
return 'src/cares/cares/config_linux/ares_config.h'
if 'openbsd' in sys.platform:
return 'src/cares/cares/config_openbsd/ares_config.h'
if not os.path.isfile('third_party/cares/cares/ares_config.h'):
gen_ares_build(x)
return 'third_party/cares/cares/ares_config.h'
def gen_ares_build(x):
subprocess.call("third_party/cares/cares/buildconf", shell=True)
subprocess.call("third_party/cares/cares/configure", shell=True)
def ares_build(x):
if os.path.isfile('src/cares/cares/ares_build.h'):
return 'src/cares/cares/ares_build.h'
if not os.path.isfile('third_party/cares/cares/ares_build.h'):
gen_ares_build(x)
return 'third_party/cares/cares/ares_build.h'
def config_platform(x):
if 'darwin' in sys.platform:
return 'src/cares/cares/config_darwin/ares_config.h'
if 'freebsd' in sys.platform:
return 'src/cares/cares/config_freebsd/ares_config.h'
if 'linux' in sys.platform:
return 'src/cares/cares/config_linux/ares_config.h'
if 'openbsd' in sys.platform:
return 'src/cares/cares/config_openbsd/ares_config.h'
if not os.path.isfile('third_party/cares/cares/ares_config.h'):
gen_ares_build(x)
return 'third_party/cares/cares/ares_config.h'
out['libs'] = [{
'name': 'ares',
'defaults': 'ares',
'build': 'private',
'language': 'c',
'secure': False,
'src': [
"third_party/cares/cares/ares__close_sockets.c",
"third_party/cares/cares/ares__get_hostent.c",
"third_party/cares/cares/ares__read_line.c",
"third_party/cares/cares/ares__timeval.c",
"third_party/cares/cares/ares_cancel.c",
"third_party/cares/cares/ares_create_query.c",
"third_party/cares/cares/ares_data.c",
"third_party/cares/cares/ares_destroy.c",
"third_party/cares/cares/ares_expand_name.c",
"third_party/cares/cares/ares_expand_string.c",
"third_party/cares/cares/ares_fds.c",
"third_party/cares/cares/ares_free_hostent.c",
"third_party/cares/cares/ares_free_string.c",
"third_party/cares/cares/ares_getenv.c",
"third_party/cares/cares/ares_gethostbyaddr.c",
"third_party/cares/cares/ares_gethostbyname.c",
"third_party/cares/cares/ares_getnameinfo.c",
"third_party/cares/cares/ares_getopt.c",
"third_party/cares/cares/ares_getsock.c",
"third_party/cares/cares/ares_init.c",
"third_party/cares/cares/ares_library_init.c",
"third_party/cares/cares/ares_llist.c",
"third_party/cares/cares/ares_mkquery.c",
"third_party/cares/cares/ares_nowarn.c",
"third_party/cares/cares/ares_options.c",
"third_party/cares/cares/ares_parse_a_reply.c",
"third_party/cares/cares/ares_parse_aaaa_reply.c",
"third_party/cares/cares/ares_parse_mx_reply.c",
"third_party/cares/cares/ares_parse_naptr_reply.c",
"third_party/cares/cares/ares_parse_ns_reply.c",
"third_party/cares/cares/ares_parse_ptr_reply.c",
"third_party/cares/cares/ares_parse_soa_reply.c",
"third_party/cares/cares/ares_parse_srv_reply.c",
"third_party/cares/cares/ares_parse_txt_reply.c",
"third_party/cares/cares/ares_platform.c",
"third_party/cares/cares/ares_process.c",
"third_party/cares/cares/ares_query.c",
"third_party/cares/cares/ares_search.c",
"third_party/cares/cares/ares_send.c",
"third_party/cares/cares/ares_strcasecmp.c",
"third_party/cares/cares/ares_strdup.c",
"third_party/cares/cares/ares_strerror.c",
"third_party/cares/cares/ares_strsplit.c",
"third_party/cares/cares/ares_timeout.c",
"third_party/cares/cares/ares_version.c",
"third_party/cares/cares/ares_writev.c",
"third_party/cares/cares/bitncmp.c",
"third_party/cares/cares/inet_net_pton.c",
"third_party/cares/cares/inet_ntop.c",
"third_party/cares/cares/windows_port.c",
],
'headers': [
"third_party/cares/cares/ares.h",
"third_party/cares/cares/ares_data.h",
"third_party/cares/cares/ares_dns.h",
"third_party/cares/cares/ares_getenv.h",
"third_party/cares/cares/ares_getopt.h",
"third_party/cares/cares/ares_inet_net_pton.h",
"third_party/cares/cares/ares_iphlpapi.h",
"third_party/cares/cares/ares_ipv6.h",
"third_party/cares/cares/ares_library_init.h",
"third_party/cares/cares/ares_llist.h",
"third_party/cares/cares/ares_nowarn.h",
"third_party/cares/cares/ares_platform.h",
"third_party/cares/cares/ares_private.h",
"third_party/cares/cares/ares_rules.h",
"third_party/cares/cares/ares_setup.h",
"third_party/cares/cares/ares_strcasecmp.h",
"third_party/cares/cares/ares_strdup.h",
"third_party/cares/cares/ares_strsplit.h",
"third_party/cares/cares/ares_version.h",
"third_party/cares/cares/bitncmp.h",
"third_party/cares/cares/config-win32.h",
"third_party/cares/cares/setup_once.h",
"third_party/cares/ares_build.h",
"third_party/cares/config_darwin/ares_config.h",
"third_party/cares/config_freebsd/ares_config.h",
"third_party/cares/config_linux/ares_config.h",
"third_party/cares/config_openbsd/ares_config.h"
],
}]
def ares_build(x):
if os.path.isfile('src/cares/cares/ares_build.h'):
return 'src/cares/cares/ares_build.h'
if not os.path.isfile('third_party/cares/cares/ares_build.h'):
gen_ares_build(x)
return 'third_party/cares/cares/ares_build.h'
out['libs'] = [{
'name':
'ares',
'defaults':
'ares',
'build':
'private',
'language':
'c',
'secure':
False,
'src': [
"third_party/cares/cares/ares__close_sockets.c",
"third_party/cares/cares/ares__get_hostent.c",
"third_party/cares/cares/ares__read_line.c",
"third_party/cares/cares/ares__timeval.c",
"third_party/cares/cares/ares_cancel.c",
"third_party/cares/cares/ares_create_query.c",
"third_party/cares/cares/ares_data.c",
"third_party/cares/cares/ares_destroy.c",
"third_party/cares/cares/ares_expand_name.c",
"third_party/cares/cares/ares_expand_string.c",
"third_party/cares/cares/ares_fds.c",
"third_party/cares/cares/ares_free_hostent.c",
"third_party/cares/cares/ares_free_string.c",
"third_party/cares/cares/ares_getenv.c",
"third_party/cares/cares/ares_gethostbyaddr.c",
"third_party/cares/cares/ares_gethostbyname.c",
"third_party/cares/cares/ares_getnameinfo.c",
"third_party/cares/cares/ares_getopt.c",
"third_party/cares/cares/ares_getsock.c",
"third_party/cares/cares/ares_init.c",
"third_party/cares/cares/ares_library_init.c",
"third_party/cares/cares/ares_llist.c",
"third_party/cares/cares/ares_mkquery.c",
"third_party/cares/cares/ares_nowarn.c",
"third_party/cares/cares/ares_options.c",
"third_party/cares/cares/ares_parse_a_reply.c",
"third_party/cares/cares/ares_parse_aaaa_reply.c",
"third_party/cares/cares/ares_parse_mx_reply.c",
"third_party/cares/cares/ares_parse_naptr_reply.c",
"third_party/cares/cares/ares_parse_ns_reply.c",
"third_party/cares/cares/ares_parse_ptr_reply.c",
"third_party/cares/cares/ares_parse_soa_reply.c",
"third_party/cares/cares/ares_parse_srv_reply.c",
"third_party/cares/cares/ares_parse_txt_reply.c",
"third_party/cares/cares/ares_platform.c",
"third_party/cares/cares/ares_process.c",
"third_party/cares/cares/ares_query.c",
"third_party/cares/cares/ares_search.c",
"third_party/cares/cares/ares_send.c",
"third_party/cares/cares/ares_strcasecmp.c",
"third_party/cares/cares/ares_strdup.c",
"third_party/cares/cares/ares_strerror.c",
"third_party/cares/cares/ares_strsplit.c",
"third_party/cares/cares/ares_timeout.c",
"third_party/cares/cares/ares_version.c",
"third_party/cares/cares/ares_writev.c",
"third_party/cares/cares/bitncmp.c",
"third_party/cares/cares/inet_net_pton.c",
"third_party/cares/cares/inet_ntop.c",
"third_party/cares/cares/windows_port.c",
],
'headers': [
"third_party/cares/cares/ares.h",
"third_party/cares/cares/ares_data.h",
"third_party/cares/cares/ares_dns.h",
"third_party/cares/cares/ares_getenv.h",
"third_party/cares/cares/ares_getopt.h",
"third_party/cares/cares/ares_inet_net_pton.h",
"third_party/cares/cares/ares_iphlpapi.h",
"third_party/cares/cares/ares_ipv6.h",
"third_party/cares/cares/ares_library_init.h",
"third_party/cares/cares/ares_llist.h",
"third_party/cares/cares/ares_nowarn.h",
"third_party/cares/cares/ares_platform.h",
"third_party/cares/cares/ares_private.h",
"third_party/cares/cares/ares_rules.h",
"third_party/cares/cares/ares_setup.h",
"third_party/cares/cares/ares_strcasecmp.h",
"third_party/cares/cares/ares_strdup.h",
"third_party/cares/cares/ares_strsplit.h",
"third_party/cares/cares/ares_version.h",
"third_party/cares/cares/bitncmp.h",
"third_party/cares/cares/config-win32.h",
"third_party/cares/cares/setup_once.h",
"third_party/cares/ares_build.h",
"third_party/cares/config_darwin/ares_config.h",
"third_party/cares/config_freebsd/ares_config.h",
"third_party/cares/config_linux/ares_config.h",
"third_party/cares/config_openbsd/ares_config.h"
],
}]
except:
pass
pass
print yaml.dump(out)

@ -1594,7 +1594,8 @@ void ChannelData::CreateResolvingLoadBalancingPolicyLocked() {
// Instantiate resolving LB policy.
LoadBalancingPolicy::Args lb_args;
lb_args.combiner = combiner_;
lb_args.channel_control_helper = MakeUnique<ClientChannelControlHelper>(this);
lb_args.channel_control_helper =
grpc_core::MakeUnique<ClientChannelControlHelper>(this);
lb_args.args = channel_args_;
grpc_core::UniquePtr<char> target_uri(gpr_strdup(target_uri_.get()));
resolving_lb_policy_.reset(new ResolvingLoadBalancingPolicy(
@ -1728,11 +1729,11 @@ bool ChannelData::ProcessResolverResultLocked(
((service_config == nullptr) !=
(chand->saved_service_config_ == nullptr)) ||
(service_config != nullptr &&
strcmp(service_config->service_config_json(),
chand->saved_service_config_->service_config_json()) != 0);
service_config->json_string() !=
chand->saved_service_config_->json_string());
if (service_config_changed) {
service_config_json.reset(gpr_strdup(
service_config != nullptr ? service_config->service_config_json()
service_config != nullptr ? service_config->json_string().c_str()
: ""));
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
gpr_log(GPR_INFO,
@ -1870,7 +1871,7 @@ void ChannelData::StartTransportOpLocked(void* arg, grpc_error* /*ignored*/) {
MemoryOrder::RELEASE);
chand->UpdateStateAndPickerLocked(
GRPC_CHANNEL_SHUTDOWN, "shutdown from API",
MakeUnique<LoadBalancingPolicy::TransientFailurePicker>(
grpc_core::MakeUnique<LoadBalancingPolicy::TransientFailurePicker>(
GRPC_ERROR_REF(op->disconnect_with_error)));
}
}

@ -47,64 +47,48 @@ void SubchannelNode::SetChildSocket(RefCountedPtr<SocketNode> socket) {
child_socket_ = std::move(socket);
}
void SubchannelNode::PopulateConnectivityState(grpc_json* json) {
Json SubchannelNode::RenderJson() {
// Create and fill the data child.
grpc_connectivity_state state =
connectivity_state_.Load(MemoryOrder::RELAXED);
json = grpc_json_create_child(nullptr, json, "state", nullptr,
GRPC_JSON_OBJECT, false);
grpc_json_create_child(nullptr, json, "state", ConnectivityStateName(state),
GRPC_JSON_STRING, false);
}
Json::Object data = {
{"state",
Json::Object{
{"state", ConnectivityStateName(state)},
}},
{"target", target_},
};
grpc_json* SubchannelNode::RenderJson() {
grpc_json* top_level_json = grpc_json_create(GRPC_JSON_OBJECT);
grpc_json* json = top_level_json;
grpc_json* json_iterator = nullptr;
json_iterator = grpc_json_create_child(json_iterator, json, "ref", nullptr,
GRPC_JSON_OBJECT, false);
json = json_iterator;
json_iterator = nullptr;
json_iterator = grpc_json_add_number_string_child(json, json_iterator,
"subchannelId", uuid());
// reset json iterators to top level object
json = top_level_json;
json_iterator = nullptr;
// create and fill the data child.
grpc_json* data = grpc_json_create_child(json_iterator, json, "data", nullptr,
GRPC_JSON_OBJECT, false);
json = data;
json_iterator = nullptr;
PopulateConnectivityState(json);
GPR_ASSERT(!target_.empty());
grpc_json_create_child(nullptr, json, "target", target_.c_str(),
GRPC_JSON_STRING, false);
// fill in the channel trace if applicable
grpc_json* trace_json = trace_.RenderJson();
if (trace_json != nullptr) {
trace_json->key = "trace"; // this object is named trace in channelz.proto
grpc_json_link_child(json, trace_json, nullptr);
// Fill in the channel trace if applicable
Json trace_json = trace_.RenderJson();
if (trace_json.type() != Json::Type::JSON_NULL) {
data["trace"] = std::move(trace_json);
}
// ask CallCountingHelper to populate trace and call count data.
call_counter_.PopulateCallCounts(json);
json = top_level_json;
// populate the child socket.
// Ask CallCountingHelper to populate call count data.
call_counter_.PopulateCallCounts(&data);
// Construct top-level object.
Json::Object object{
{"ref",
Json::Object{
{"subchannelId", std::to_string(uuid())},
}},
{"data", std::move(data)},
};
// Populate the child socket.
RefCountedPtr<SocketNode> child_socket;
{
MutexLock lock(&socket_mu_);
child_socket = child_socket_;
}
if (child_socket != nullptr && child_socket->uuid() != 0) {
grpc_json* array_parent = grpc_json_create_child(
nullptr, json, "socketRef", nullptr, GRPC_JSON_ARRAY, false);
json_iterator = grpc_json_create_child(json_iterator, array_parent, nullptr,
nullptr, GRPC_JSON_OBJECT, false);
grpc_json* sibling_iterator = grpc_json_add_number_string_child(
json_iterator, nullptr, "socketId", child_socket->uuid());
grpc_json_create_child(sibling_iterator, json_iterator, "name",
child_socket->name().c_str(), GRPC_JSON_STRING,
false);
object["socketRef"] = Json::Array{
Json::Object{
{"socketId", std::to_string(child_socket->uuid())},
{"name", child_socket->name()},
},
};
}
return top_level_json;
return object;
}
} // namespace channelz

@ -47,7 +47,7 @@ class SubchannelNode : public BaseNode {
// subchannel unrefs the transport.
void SetChildSocket(RefCountedPtr<SocketNode> socket);
grpc_json* RenderJson() override;
Json RenderJson() override;
// proxy methods to composed classes.
void AddTraceEvent(ChannelTrace::Severity severity, const grpc_slice& data) {
@ -64,8 +64,6 @@ class SubchannelNode : public BaseNode {
void RecordCallSucceeded() { call_counter_.RecordCallSucceeded(); }
private:
void PopulateConnectivityState(grpc_json* json);
Atomic<grpc_connectivity_state> connectivity_state_{GRPC_CHANNEL_IDLE};
Mutex socket_mu_;
RefCountedPtr<SocketNode> child_socket_;

@ -385,5 +385,5 @@ void grpc_http_connect_register_handshaker_factory() {
using namespace grpc_core;
HandshakerRegistry::RegisterHandshakerFactory(
true /* at_start */, HANDSHAKER_CLIENT,
MakeUnique<HttpConnectHandshakerFactory>());
grpc_core::MakeUnique<HttpConnectHandshakerFactory>());
}

@ -47,6 +47,7 @@ namespace {
*/
char* GetHttpProxyServer(char** user_cred) {
GPR_ASSERT(user_cred != nullptr);
grpc_uri* uri = nullptr;
char* proxy_name = nullptr;
char** authority_strs = nullptr;
size_t authority_nstrs;
@ -58,7 +59,9 @@ char* GetHttpProxyServer(char** user_cred) {
if (uri_str == nullptr) uri_str = gpr_getenv("https_proxy");
if (uri_str == nullptr) uri_str = gpr_getenv("http_proxy");
if (uri_str == nullptr) return nullptr;
grpc_uri* uri = grpc_uri_parse(uri_str, false /* suppress_errors */);
// an emtpy value means "don't use proxy"
if (uri_str[0] == '\0') goto done;
uri = grpc_uri_parse(uri_str, false /* suppress_errors */);
if (uri == nullptr || uri->authority == nullptr) {
gpr_log(GPR_ERROR, "cannot parse value of 'http_proxy' env var");
goto done;

@ -44,7 +44,7 @@ LoadBalancingPolicy::~LoadBalancingPolicy() {
void LoadBalancingPolicy::Orphan() {
ShutdownLocked();
Unref();
Unref(DEBUG_LOCATION, "Orphan");
}
//
@ -104,7 +104,8 @@ LoadBalancingPolicy::PickResult LoadBalancingPolicy::QueuePicker::Pick(
// ExitIdleLocked().
if (!exit_idle_called_) {
exit_idle_called_ = true;
parent_->Ref().release(); // ref held by closure.
// Ref held by closure.
parent_->Ref(DEBUG_LOCATION, "QueuePicker::CallExitIdle").release();
parent_->combiner()->Run(
GRPC_CLOSURE_CREATE(&CallExitIdle, parent_.get(), nullptr),
GRPC_ERROR_NONE);
@ -118,7 +119,7 @@ void LoadBalancingPolicy::QueuePicker::CallExitIdle(void* arg,
grpc_error* /*error*/) {
LoadBalancingPolicy* parent = static_cast<LoadBalancingPolicy*>(arg);
parent->ExitIdleLocked();
parent->Unref();
parent->Unref(DEBUG_LOCATION, "QueuePicker::CallExitIdle");
}
//

@ -121,10 +121,9 @@ namespace {
constexpr char kGrpclb[] = "grpclb";
class ParsedGrpcLbConfig : public LoadBalancingPolicy::Config {
class GrpcLbConfig : public LoadBalancingPolicy::Config {
public:
explicit ParsedGrpcLbConfig(
RefCountedPtr<LoadBalancingPolicy::Config> child_policy)
explicit GrpcLbConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy)
: child_policy_(std::move(child_policy)) {}
const char* name() const override { return kGrpclb; }
@ -715,8 +714,9 @@ void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
client_stats = parent_->lb_calld_->client_stats()->Ref();
}
parent_->channel_control_helper()->UpdateState(
state, MakeUnique<Picker>(parent_.get(), parent_->serverlist_,
std::move(picker), std::move(client_stats)));
state, grpc_core::MakeUnique<Picker>(parent_.get(), parent_->serverlist_,
std::move(picker),
std::move(client_stats)));
}
void GrpcLb::Helper::RequestReresolution() {
@ -1446,8 +1446,7 @@ void GrpcLb::ResetBackoffLocked() {
void GrpcLb::UpdateLocked(UpdateArgs args) {
const bool is_initial_update = lb_channel_ == nullptr;
auto* grpclb_config =
static_cast<const ParsedGrpcLbConfig*>(args.config.get());
auto* grpclb_config = static_cast<const GrpcLbConfig*>(args.config.get());
if (grpclb_config != nullptr) {
child_policy_config_ = grpclb_config->child_policy();
} else {
@ -1884,33 +1883,27 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
const char* name() const override { return kGrpclb; }
RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
const grpc_json* json, grpc_error** error) const override {
const Json& json, grpc_error** error) const override {
GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
if (json == nullptr) {
return RefCountedPtr<LoadBalancingPolicy::Config>(
new ParsedGrpcLbConfig(nullptr));
if (json.type() == Json::Type::JSON_NULL) {
return MakeRefCounted<GrpcLbConfig>(nullptr);
}
InlinedVector<grpc_error*, 2> error_list;
std::vector<grpc_error*> error_list;
RefCountedPtr<LoadBalancingPolicy::Config> child_policy;
for (const grpc_json* field = json->child; field != nullptr;
field = field->next) {
if (field->key == nullptr) continue;
if (strcmp(field->key, "childPolicy") == 0) {
if (child_policy != nullptr) {
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
"field:childPolicy error:Duplicate entry"));
}
grpc_error* parse_error = GRPC_ERROR_NONE;
child_policy = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
field, &parse_error);
if (parse_error != GRPC_ERROR_NONE) {
error_list.push_back(parse_error);
}
auto it = json.object_value().find("childPolicy");
if (it != json.object_value().end()) {
grpc_error* parse_error = GRPC_ERROR_NONE;
child_policy = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
it->second, &parse_error);
if (parse_error != GRPC_ERROR_NONE) {
std::vector<grpc_error*> child_errors;
child_errors.push_back(parse_error);
error_list.push_back(
GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
}
}
if (error_list.empty()) {
return RefCountedPtr<LoadBalancingPolicy::Config>(
new ParsedGrpcLbConfig(std::move(child_policy)));
return MakeRefCounted<GrpcLbConfig>(std::move(child_policy));
} else {
*error = GRPC_ERROR_CREATE_FROM_VECTOR("GrpcLb Parser", &error_list);
return nullptr;

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save