diff --git a/BUILD b/BUILD index e46356a81b7..ba44e050caf 100644 --- a/BUILD +++ b/BUILD @@ -182,7 +182,6 @@ cc_library( "src/core/support/thd_internal.h", "src/core/support/time_precise.h", "src/core/census/aggregation.h", - "src/core/census/context.h", "src/core/census/rpc_metric_id.h", "src/core/httpcli/httpcli_security_connector.c", "src/core/security/base64.c", @@ -379,7 +378,6 @@ cc_library( "src/core/census/initialize.c", "src/core/census/operation.c", "src/core/census/placeholders.c", - "src/core/census/tag_set.c", "src/core/census/tracing.c", ], hdrs = [ @@ -580,7 +578,6 @@ cc_library( "src/core/transport/transport.h", "src/core/transport/transport_impl.h", "src/core/census/aggregation.h", - "src/core/census/context.h", "src/core/census/rpc_metric_id.h", "src/core/surface/init_unsecure.c", "src/core/profiling/basic_timers.c", @@ -757,7 +754,6 @@ cc_library( "src/core/census/initialize.c", "src/core/census/operation.c", "src/core/census/placeholders.c", - "src/core/census/tag_set.c", "src/core/census/tracing.c", ], hdrs = [ @@ -1405,7 +1401,6 @@ objc_library( "src/core/census/initialize.c", "src/core/census/operation.c", "src/core/census/placeholders.c", - "src/core/census/tag_set.c", "src/core/census/tracing.c", ], hdrs = [ @@ -1602,7 +1597,6 @@ objc_library( "src/core/support/thd_internal.h", "src/core/support/time_precise.h", "src/core/census/aggregation.h", - "src/core/census/context.h", "src/core/census/rpc_metric_id.h", ], includes = [ diff --git a/Makefile b/Makefile index 442e154eea7..16e6b32eba0 100644 --- a/Makefile +++ b/Makefile @@ -239,15 +239,21 @@ ifeq ($(origin LD), default) LD = $(LD_$(CONFIG)) endif LDXX ?= $(LDXX_$(CONFIG)) +ifeq ($(SYSTEM),Linux) ifeq ($(origin AR), default) -AR = ar +AR = ar rcs endif -ifeq ($(SYSTEM),Linux) STRIP ?= strip --strip-unneeded else ifeq ($(SYSTEM),Darwin) +ifeq ($(origin AR), default) +AR = libtool -o +endif STRIP ?= strip -x else +ifeq ($(origin AR), default) +AR = ar rcs +endif STRIP ?= strip endif endif @@ -542,6 +548,7 @@ endif ifeq ($(EMBED_ZLIB),true) ZLIB_DEP = $(LIBDIR)/$(CONFIG)/libz.a ZLIB_MERGE_LIBS = $(LIBDIR)/$(CONFIG)/libz.a +ZLIB_MERGE_OBJS = $(LIBZ_OBJS) CPPFLAGS += -Ithird_party/zlib LDFLAGS += -L$(LIBDIR)/$(CONFIG)/zlib else @@ -584,6 +591,7 @@ ifeq ($(NO_SECURE),false) ifeq ($(EMBED_OPENSSL),true) OPENSSL_DEP += $(LIBDIR)/$(CONFIG)/libboringssl.a OPENSSL_MERGE_LIBS += $(LIBDIR)/$(CONFIG)/libboringssl.a +OPENSSL_MERGE_OBJS += $(LIBBORINGSSL_OBJS) # need to prefix these to ensure overriding system libraries CPPFLAGS := -Ithird_party/boringssl/include $(CPPFLAGS) else # EMBED_OPENSSL=false @@ -823,6 +831,7 @@ algorithm_test: $(BINDIR)/$(CONFIG)/algorithm_test alloc_test: $(BINDIR)/$(CONFIG)/alloc_test alpn_test: $(BINDIR)/$(CONFIG)/alpn_test bin_encoder_test: $(BINDIR)/$(CONFIG)/bin_encoder_test +census_context_test: $(BINDIR)/$(CONFIG)/census_context_test channel_create_test: $(BINDIR)/$(CONFIG)/channel_create_test chttp2_hpack_encoder_test: $(BINDIR)/$(CONFIG)/chttp2_hpack_encoder_test chttp2_status_conversion_test: $(BINDIR)/$(CONFIG)/chttp2_status_conversion_test @@ -900,7 +909,6 @@ set_initial_connect_string_test: $(BINDIR)/$(CONFIG)/set_initial_connect_string_ sockaddr_resolver_test: $(BINDIR)/$(CONFIG)/sockaddr_resolver_test sockaddr_utils_test: $(BINDIR)/$(CONFIG)/sockaddr_utils_test socket_utils_test: $(BINDIR)/$(CONFIG)/socket_utils_test -tag_set_test: $(BINDIR)/$(CONFIG)/tag_set_test tcp_client_posix_test: $(BINDIR)/$(CONFIG)/tcp_client_posix_test tcp_posix_test: $(BINDIR)/$(CONFIG)/tcp_posix_test tcp_server_posix_test: $(BINDIR)/$(CONFIG)/tcp_server_posix_test @@ -1130,6 +1138,7 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/alloc_test \ $(BINDIR)/$(CONFIG)/alpn_test \ $(BINDIR)/$(CONFIG)/bin_encoder_test \ + $(BINDIR)/$(CONFIG)/census_context_test \ $(BINDIR)/$(CONFIG)/channel_create_test \ $(BINDIR)/$(CONFIG)/chttp2_hpack_encoder_test \ $(BINDIR)/$(CONFIG)/chttp2_status_conversion_test \ @@ -1200,7 +1209,6 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/sockaddr_resolver_test \ $(BINDIR)/$(CONFIG)/sockaddr_utils_test \ $(BINDIR)/$(CONFIG)/socket_utils_test \ - $(BINDIR)/$(CONFIG)/tag_set_test \ $(BINDIR)/$(CONFIG)/tcp_client_posix_test \ $(BINDIR)/$(CONFIG)/tcp_posix_test \ $(BINDIR)/$(CONFIG)/tcp_server_posix_test \ @@ -1363,6 +1371,8 @@ test_c: buildtests_c $(Q) $(BINDIR)/$(CONFIG)/alpn_test || ( echo test alpn_test failed ; exit 1 ) $(E) "[RUN] Testing bin_encoder_test" $(Q) $(BINDIR)/$(CONFIG)/bin_encoder_test || ( echo test bin_encoder_test failed ; exit 1 ) + $(E) "[RUN] Testing census_context_test" + $(Q) $(BINDIR)/$(CONFIG)/census_context_test || ( echo test census_context_test failed ; exit 1 ) $(E) "[RUN] Testing channel_create_test" $(Q) $(BINDIR)/$(CONFIG)/channel_create_test || ( echo test channel_create_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_hpack_encoder_test" @@ -1497,8 +1507,6 @@ test_c: buildtests_c $(Q) $(BINDIR)/$(CONFIG)/sockaddr_utils_test || ( echo test sockaddr_utils_test failed ; exit 1 ) $(E) "[RUN] Testing socket_utils_test" $(Q) $(BINDIR)/$(CONFIG)/socket_utils_test || ( echo test socket_utils_test failed ; exit 1 ) - $(E) "[RUN] Testing tag_set_test" - $(Q) $(BINDIR)/$(CONFIG)/tag_set_test || ( echo test tag_set_test failed ; exit 1 ) $(E) "[RUN] Testing tcp_client_posix_test" $(Q) $(BINDIR)/$(CONFIG)/tcp_client_posix_test || ( echo test tcp_client_posix_test failed ; exit 1 ) $(E) "[RUN] Testing tcp_posix_test" @@ -2091,7 +2099,7 @@ else $(Q) $(INSTALL) $(BINDIR)/$(CONFIG)/grpc_ruby_plugin $(prefix)/bin/grpc_ruby_plugin endif -install-pkg-config_c: pr pc_c pc_c_unsecure pc_c_zookeeper +install-pkg-config_c: pc_c pc_c_unsecure pc_c_zookeeper $(E) "[INSTALL] Installing C pkg-config files" $(Q) $(INSTALL) -d $(prefix)/lib/pkgconfig $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/pkgconfig/grpc.pc $(prefix)/lib/pkgconfig/grpc.pc @@ -2335,7 +2343,6 @@ LIBGRPC_SRC = \ src/core/census/initialize.c \ src/core/census/operation.c \ src/core/census/placeholders.c \ - src/core/census/tag_set.c \ src/core/census/tracing.c \ PUBLIC_HEADERS_C += \ @@ -2409,34 +2416,11 @@ $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc$(SHARED_VERSION).$(SHARED_EXT): openssl else -$(LIBDIR)/$(CONFIG)/libgrpc.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_OBJS) +$(LIBDIR)/$(CONFIG)/libgrpc.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_OBJS) $(ZLIB_MERGE_OBJS) $(OPENSSL_MERGE_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBGRPC_OBJS) - $(Q) rm -rf $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc - $(Q) ( mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc/grpc ; \ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc/grpc ; \ - $(AR) x $(LIBDIR)/$(CONFIG)/libgrpc.a ) - $(Q) for l in $(ZLIB_MERGE_LIBS) ; do ( \ - mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc/zlib ; \ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc/zlib ; \ - $(AR) x $${l} ) ; done - $(Q) for l in $(ZLIB_MERGE_LIBS) ; do ( \ - mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc/zlib ; \ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc/zlib ; \ - $(AR) x $${l} ) ; done - $(Q) for l in $(OPENSSL_MERGE_LIBS) ; do ( \ - mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc/ssl ; \ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc/ssl ; \ - $(AR) x $${l} ) ; done - $(Q) for l in $(OPENSSL_MERGE_LIBS) ; do ( \ - mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc/ssl ; \ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc/ssl ; \ - $(AR) x $${l} ) ; done - $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc.a $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc/*/__.SYMDEF* - $(Q) ar rcs $(LIBDIR)/$(CONFIG)/libgrpc.a $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc/*/* - $(Q) rm -rf $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBGRPC_OBJS) $(ZLIB_MERGE_OBJS) $(OPENSSL_MERGE_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc.a endif @@ -2500,11 +2484,11 @@ $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a: openssl_dep_error else -$(LIBDIR)/$(CONFIG)/libgrpc_test_util.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_TEST_UTIL_OBJS) +$(LIBDIR)/$(CONFIG)/libgrpc_test_util.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_TEST_UTIL_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBGRPC_TEST_UTIL_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBGRPC_TEST_UTIL_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a endif @@ -2537,11 +2521,11 @@ PUBLIC_HEADERS_C += \ LIBGRPC_TEST_UTIL_UNSECURE_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_TEST_UTIL_UNSECURE_SRC)))) -$(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a: $(ZLIB_DEP) $(LIBGRPC_TEST_UTIL_UNSECURE_OBJS) +$(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a: $(ZLIB_DEP) $(LIBGRPC_TEST_UTIL_UNSECURE_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBGRPC_TEST_UTIL_UNSECURE_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBGRPC_TEST_UTIL_UNSECURE_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a endif @@ -2730,7 +2714,6 @@ LIBGRPC_UNSECURE_SRC = \ src/core/census/initialize.c \ src/core/census/operation.c \ src/core/census/placeholders.c \ - src/core/census/tag_set.c \ src/core/census/tracing.c \ PUBLIC_HEADERS_C += \ @@ -2792,26 +2775,11 @@ PUBLIC_HEADERS_C += \ LIBGRPC_UNSECURE_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_UNSECURE_SRC)))) -$(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a: $(ZLIB_DEP) $(LIBGRPC_UNSECURE_OBJS) +$(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a: $(ZLIB_DEP) $(LIBGRPC_UNSECURE_OBJS) $(ZLIB_MERGE_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBGRPC_UNSECURE_OBJS) - $(Q) rm -rf $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc_unsecure - $(Q) ( mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc_unsecure/grpc ; \ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc_unsecure/grpc ; \ - $(AR) x $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a ) - $(Q) for l in $(ZLIB_MERGE_LIBS) ; do ( \ - mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc_unsecure/zlib ; \ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc_unsecure/zlib ; \ - $(AR) x $${l} ) ; done - $(Q) for l in $(ZLIB_MERGE_LIBS) ; do ( \ - mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc_unsecure/zlib ; \ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc_unsecure/zlib ; \ - $(AR) x $${l} ) ; done - $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc_unsecure/*/__.SYMDEF* - $(Q) ar rcs $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc_unsecure/*/* - $(Q) rm -rf $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc_unsecure + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBGRPC_UNSECURE_OBJS) $(ZLIB_MERGE_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a endif @@ -2850,11 +2818,11 @@ PUBLIC_HEADERS_C += \ LIBGRPC_ZOOKEEPER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_ZOOKEEPER_SRC)))) -$(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a: $(ZLIB_DEP) $(LIBGRPC_ZOOKEEPER_OBJS) +$(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a: $(ZLIB_DEP) $(LIBGRPC_ZOOKEEPER_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a $(LIBGRPC_ZOOKEEPER_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a $(LIBGRPC_ZOOKEEPER_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a endif @@ -2901,11 +2869,11 @@ $(LIBDIR)/$(CONFIG)/libreconnect_server.a: openssl_dep_error else -$(LIBDIR)/$(CONFIG)/libreconnect_server.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBRECONNECT_SERVER_OBJS) +$(LIBDIR)/$(CONFIG)/libreconnect_server.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBRECONNECT_SERVER_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libreconnect_server.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(LIBRECONNECT_SERVER_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(LIBRECONNECT_SERVER_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libreconnect_server.a endif @@ -2939,11 +2907,11 @@ $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a: openssl_dep_error else -$(LIBDIR)/$(CONFIG)/libtest_tcp_server.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBTEST_TCP_SERVER_OBJS) +$(LIBDIR)/$(CONFIG)/libtest_tcp_server.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBTEST_TCP_SERVER_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(LIBTEST_TCP_SERVER_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(LIBTEST_TCP_SERVER_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a endif @@ -3093,26 +3061,11 @@ $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++$(SHARED_VERSION).$(SHARED_EXT): proto else -$(LIBDIR)/$(CONFIG)/libgrpc++.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_OBJS) +$(LIBDIR)/$(CONFIG)/libgrpc++.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_OBJS) $(ZLIB_MERGE_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBGRPC++_OBJS) - $(Q) rm -rf $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++ - $(Q) ( mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++/grpc ; \ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++/grpc ; \ - $(AR) x $(LIBDIR)/$(CONFIG)/libgrpc++.a ) - $(Q) for l in $(ZLIB_MERGE_LIBS) ; do ( \ - mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++/zlib ; \ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++/zlib ; \ - $(AR) x $${l} ) ; done - $(Q) for l in $(ZLIB_MERGE_LIBS) ; do ( \ - mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++/zlib ; \ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++/zlib ; \ - $(AR) x $${l} ) ; done - $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++.a $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++/*/__.SYMDEF* - $(Q) ar rcs $(LIBDIR)/$(CONFIG)/libgrpc++.a $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++/*/* - $(Q) rm -rf $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++ + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBGRPC++_OBJS) $(ZLIB_MERGE_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc++.a endif @@ -3173,11 +3126,11 @@ $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_TEST_CONFIG_OBJS) +$(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_TEST_CONFIG_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBGRPC++_TEST_CONFIG_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBGRPC++_TEST_CONFIG_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a endif @@ -3229,11 +3182,11 @@ $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_TEST_UTIL_OBJS) +$(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_TEST_UTIL_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBGRPC++_TEST_UTIL_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBGRPC++_TEST_UTIL_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a endif @@ -3376,26 +3329,11 @@ $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION).$(SHARED_EX else -$(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_UNSECURE_OBJS) +$(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_UNSECURE_OBJS) $(ZLIB_MERGE_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBGRPC++_UNSECURE_OBJS) - $(Q) rm -rf $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++_unsecure - $(Q) ( mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++_unsecure/grpc ; \ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++_unsecure/grpc ; \ - $(AR) x $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a ) - $(Q) for l in $(ZLIB_MERGE_LIBS) ; do ( \ - mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++_unsecure/zlib ; \ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++_unsecure/zlib ; \ - $(AR) x $${l} ) ; done - $(Q) for l in $(ZLIB_MERGE_LIBS) ; do ( \ - mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++_unsecure/zlib ; \ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++_unsecure/zlib ; \ - $(AR) x $${l} ) ; done - $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++_unsecure/*/__.SYMDEF* - $(Q) ar rcs $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++_unsecure/*/* - $(Q) rm -rf $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc++_unsecure + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBGRPC++_UNSECURE_OBJS) $(ZLIB_MERGE_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a endif @@ -3499,11 +3437,11 @@ $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBGRPC_PLUGIN_SUPPORT_OBJS) +$(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBGRPC_PLUGIN_SUPPORT_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(LIBGRPC_PLUGIN_SUPPORT_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(LIBGRPC_PLUGIN_SUPPORT_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a endif @@ -3544,11 +3482,11 @@ $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libinterop_client_helper.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBINTEROP_CLIENT_HELPER_OBJS) +$(LIBDIR)/$(CONFIG)/libinterop_client_helper.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBINTEROP_CLIENT_HELPER_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBINTEROP_CLIENT_HELPER_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBINTEROP_CLIENT_HELPER_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a endif @@ -3597,11 +3535,11 @@ $(LIBDIR)/$(CONFIG)/libinterop_client_main.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libinterop_client_main.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBINTEROP_CLIENT_MAIN_OBJS) +$(LIBDIR)/$(CONFIG)/libinterop_client_main.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBINTEROP_CLIENT_MAIN_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libinterop_client_main.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBINTEROP_CLIENT_MAIN_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBINTEROP_CLIENT_MAIN_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libinterop_client_main.a endif @@ -3647,11 +3585,11 @@ $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libinterop_server_helper.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBINTEROP_SERVER_HELPER_OBJS) +$(LIBDIR)/$(CONFIG)/libinterop_server_helper.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBINTEROP_SERVER_HELPER_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBINTEROP_SERVER_HELPER_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBINTEROP_SERVER_HELPER_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a endif @@ -3698,11 +3636,11 @@ $(LIBDIR)/$(CONFIG)/libinterop_server_main.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libinterop_server_main.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBINTEROP_SERVER_MAIN_OBJS) +$(LIBDIR)/$(CONFIG)/libinterop_server_main.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBINTEROP_SERVER_MAIN_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libinterop_server_main.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBINTEROP_SERVER_MAIN_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBINTEROP_SERVER_MAIN_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libinterop_server_main.a endif @@ -3763,11 +3701,11 @@ $(LIBDIR)/$(CONFIG)/libqps.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libqps.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBQPS_OBJS) +$(LIBDIR)/$(CONFIG)/libqps.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBQPS_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libqps.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libqps.a $(LIBQPS_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libqps.a $(LIBQPS_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libqps.a endif @@ -3815,11 +3753,11 @@ $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION).$(SHARED_EX else -$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_CSHARP_EXT_OBJS) +$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_CSHARP_EXT_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a $(LIBGRPC_CSHARP_EXT_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a $(LIBGRPC_CSHARP_EXT_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a endif @@ -4155,11 +4093,11 @@ LIBBORINGSSL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(LIBBORINGSSL_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare -$(LIBDIR)/$(CONFIG)/libboringssl.a: $(ZLIB_DEP) $(LIBBORINGSSL_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl.a: $(ZLIB_DEP) $(LIBBORINGSSL_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl.a $(LIBBORINGSSL_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl.a $(LIBBORINGSSL_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl.a endif @@ -4192,11 +4130,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_test_util.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_TEST_UTIL_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_test_util.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_TEST_UTIL_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBBORINGSSL_TEST_UTIL_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBBORINGSSL_TEST_UTIL_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a endif @@ -4229,11 +4167,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_AES_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_AES_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(LIBBORINGSSL_AES_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(LIBBORINGSSL_AES_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a endif @@ -4266,11 +4204,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_BASE64_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_BASE64_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(LIBBORINGSSL_BASE64_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(LIBBORINGSSL_BASE64_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a endif @@ -4303,11 +4241,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_BIO_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_BIO_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(LIBBORINGSSL_BIO_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(LIBBORINGSSL_BIO_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a endif @@ -4340,11 +4278,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_BN_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_BN_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(LIBBORINGSSL_BN_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(LIBBORINGSSL_BN_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a endif @@ -4377,11 +4315,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_BYTESTRING_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_BYTESTRING_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(LIBBORINGSSL_BYTESTRING_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(LIBBORINGSSL_BYTESTRING_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a endif @@ -4414,11 +4352,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_AEAD_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_AEAD_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(LIBBORINGSSL_AEAD_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(LIBBORINGSSL_AEAD_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a endif @@ -4451,11 +4389,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_CIPHER_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_CIPHER_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(LIBBORINGSSL_CIPHER_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(LIBBORINGSSL_CIPHER_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a endif @@ -4488,11 +4426,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_CMAC_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_CMAC_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(LIBBORINGSSL_CMAC_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(LIBBORINGSSL_CMAC_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a endif @@ -4516,11 +4454,11 @@ LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(a $(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare -$(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a $(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a $(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a endif @@ -4551,11 +4489,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_ED25519_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_ED25519_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(LIBBORINGSSL_ED25519_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(LIBBORINGSSL_ED25519_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a endif @@ -4588,11 +4526,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_X25519_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_X25519_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(LIBBORINGSSL_X25519_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(LIBBORINGSSL_X25519_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a endif @@ -4625,11 +4563,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_DH_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_DH_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(LIBBORINGSSL_DH_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(LIBBORINGSSL_DH_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a endif @@ -4662,11 +4600,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_DIGEST_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_DIGEST_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(LIBBORINGSSL_DIGEST_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(LIBBORINGSSL_DIGEST_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a endif @@ -4690,11 +4628,11 @@ LIBBORINGSSL_DSA_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix . $(LIBBORINGSSL_DSA_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(LIBBORINGSSL_DSA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare -$(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_DSA_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_DSA_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a $(LIBBORINGSSL_DSA_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a $(LIBBORINGSSL_DSA_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a endif @@ -4725,11 +4663,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_EC_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_EC_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(LIBBORINGSSL_EC_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(LIBBORINGSSL_EC_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a endif @@ -4753,11 +4691,11 @@ LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffi $(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare -$(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a $(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a $(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a endif @@ -4788,11 +4726,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_ECDSA_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_ECDSA_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(LIBBORINGSSL_ECDSA_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(LIBBORINGSSL_ECDSA_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a endif @@ -4825,11 +4763,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_ERR_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_ERR_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(LIBBORINGSSL_ERR_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(LIBBORINGSSL_ERR_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a endif @@ -4862,11 +4800,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_EVP_EXTRA_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_EVP_EXTRA_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(LIBBORINGSSL_EVP_EXTRA_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(LIBBORINGSSL_EVP_EXTRA_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a endif @@ -4899,11 +4837,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_EVP_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_EVP_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(LIBBORINGSSL_EVP_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(LIBBORINGSSL_EVP_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a endif @@ -4936,11 +4874,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_PBKDF_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_PBKDF_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(LIBBORINGSSL_PBKDF_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(LIBBORINGSSL_PBKDF_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a endif @@ -4964,11 +4902,11 @@ LIBBORINGSSL_HKDF_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix $(LIBBORINGSSL_HKDF_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(LIBBORINGSSL_HKDF_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare -$(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_HKDF_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_HKDF_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a $(LIBBORINGSSL_HKDF_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a $(LIBBORINGSSL_HKDF_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a endif @@ -4999,11 +4937,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_HMAC_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_HMAC_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(LIBBORINGSSL_HMAC_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(LIBBORINGSSL_HMAC_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a endif @@ -5027,11 +4965,11 @@ LIBBORINGSSL_LHASH_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix $(LIBBORINGSSL_LHASH_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(LIBBORINGSSL_LHASH_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare -$(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_LHASH_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_LHASH_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a $(LIBBORINGSSL_LHASH_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a $(LIBBORINGSSL_LHASH_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a endif @@ -5053,11 +4991,11 @@ LIBBORINGSSL_GCM_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix . $(LIBBORINGSSL_GCM_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(LIBBORINGSSL_GCM_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare -$(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_GCM_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_GCM_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a $(LIBBORINGSSL_GCM_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a $(LIBBORINGSSL_GCM_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a endif @@ -5088,11 +5026,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_PKCS12_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_PKCS12_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(LIBBORINGSSL_PKCS12_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(LIBBORINGSSL_PKCS12_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a endif @@ -5125,11 +5063,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_PKCS8_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_PKCS8_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(LIBBORINGSSL_PKCS8_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(LIBBORINGSSL_PKCS8_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a endif @@ -5162,11 +5100,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_POLY1305_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_POLY1305_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(LIBBORINGSSL_POLY1305_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(LIBBORINGSSL_POLY1305_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a endif @@ -5190,11 +5128,11 @@ LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuf $(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare -$(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a $(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a $(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a endif @@ -5225,11 +5163,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_RSA_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_RSA_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(LIBBORINGSSL_RSA_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(LIBBORINGSSL_RSA_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a endif @@ -5253,11 +5191,11 @@ LIBBORINGSSL_THREAD_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffi $(LIBBORINGSSL_THREAD_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(LIBBORINGSSL_THREAD_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare -$(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_THREAD_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_THREAD_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a $(LIBBORINGSSL_THREAD_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a $(LIBBORINGSSL_THREAD_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a endif @@ -5279,11 +5217,11 @@ LIBBORINGSSL_PKCS7_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix $(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare -$(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a $(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a $(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a endif @@ -5305,11 +5243,11 @@ LIBBORINGSSL_TAB_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix . $(LIBBORINGSSL_TAB_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(LIBBORINGSSL_TAB_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare -$(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_TAB_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_TAB_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a $(LIBBORINGSSL_TAB_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a $(LIBBORINGSSL_TAB_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a endif @@ -5331,11 +5269,11 @@ LIBBORINGSSL_V3NAME_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffi $(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare -$(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a $(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a $(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a endif @@ -5357,11 +5295,11 @@ LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffi $(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare -$(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a $(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a $(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a endif @@ -5392,11 +5330,11 @@ $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a: protobuf_dep_error else -$(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_SSL_TEST_LIB_OBJS) +$(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBBORINGSSL_SSL_TEST_LIB_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a $(LIBBORINGSSL_SSL_TEST_LIB_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a $(LIBBORINGSSL_SSL_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a endif @@ -5433,11 +5371,11 @@ LIBZ_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBZ_ $(LIBZ_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-implicit-function-declaration $(W_NO_SHIFT_NEGATIVE_VALUE) -fvisibility=hidden -$(LIBDIR)/$(CONFIG)/libz.a: $(LIBZ_OBJS) +$(LIBDIR)/$(CONFIG)/libz.a: $(LIBZ_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libz.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libz.a $(LIBZ_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libz.a $(LIBZ_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libz.a endif @@ -5467,11 +5405,11 @@ $(LIBDIR)/$(CONFIG)/libbad_client_test.a: openssl_dep_error else -$(LIBDIR)/$(CONFIG)/libbad_client_test.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBBAD_CLIENT_TEST_OBJS) +$(LIBDIR)/$(CONFIG)/libbad_client_test.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBBAD_CLIENT_TEST_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libbad_client_test.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libbad_client_test.a $(LIBBAD_CLIENT_TEST_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libbad_client_test.a $(LIBBAD_CLIENT_TEST_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libbad_client_test.a endif @@ -5505,11 +5443,11 @@ $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a: openssl_dep_error else -$(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBBAD_SSL_TEST_SERVER_OBJS) +$(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBBAD_SSL_TEST_SERVER_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a $(LIBBAD_SSL_TEST_SERVER_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a $(LIBBAD_SSL_TEST_SERVER_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a endif @@ -5579,11 +5517,11 @@ $(LIBDIR)/$(CONFIG)/libend2end_tests.a: openssl_dep_error else -$(LIBDIR)/$(CONFIG)/libend2end_tests.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBEND2END_TESTS_OBJS) +$(LIBDIR)/$(CONFIG)/libend2end_tests.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBEND2END_TESTS_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_tests.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBEND2END_TESTS_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBEND2END_TESTS_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_tests.a endif @@ -5642,11 +5580,11 @@ LIBEND2END_NOSEC_TESTS_SRC = \ LIBEND2END_NOSEC_TESTS_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_NOSEC_TESTS_SRC)))) -$(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a: $(ZLIB_DEP) $(LIBEND2END_NOSEC_TESTS_OBJS) +$(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a: $(ZLIB_DEP) $(LIBEND2END_NOSEC_TESTS_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a $(LIBEND2END_NOSEC_TESTS_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a $(LIBEND2END_NOSEC_TESTS_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a endif @@ -5678,11 +5616,11 @@ $(LIBDIR)/$(CONFIG)/libend2end_certs.a: openssl_dep_error else -$(LIBDIR)/$(CONFIG)/libend2end_certs.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBEND2END_CERTS_OBJS) +$(LIBDIR)/$(CONFIG)/libend2end_certs.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBEND2END_CERTS_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_certs.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_certs.a $(LIBEND2END_CERTS_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libend2end_certs.a $(LIBEND2END_CERTS_OBJS) ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_certs.a endif @@ -5863,6 +5801,38 @@ endif endif +CENSUS_CONTEXT_TEST_SRC = \ + test/core/census/context_test.c \ + +CENSUS_CONTEXT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_CONTEXT_TEST_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/census_context_test: openssl_dep_error + +else + + + +$(BINDIR)/$(CONFIG)/census_context_test: $(CENSUS_CONTEXT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(CENSUS_CONTEXT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/census_context_test + +endif + +$(OBJDIR)/$(CONFIG)/test/core/census/context_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a + +deps_census_context_test: $(CENSUS_CONTEXT_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(CENSUS_CONTEXT_TEST_OBJS:.o=.dep) +endif +endif + + CHANNEL_CREATE_TEST_SRC = \ test/core/surface/channel_create_test.c \ @@ -8327,38 +8297,6 @@ endif endif -TAG_SET_TEST_SRC = \ - test/core/census/tag_set_test.c \ - -TAG_SET_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TAG_SET_TEST_SRC)))) -ifeq ($(NO_SECURE),true) - -# You can't build secure targets if you don't have OpenSSL. - -$(BINDIR)/$(CONFIG)/tag_set_test: openssl_dep_error - -else - - - -$(BINDIR)/$(CONFIG)/tag_set_test: $(TAG_SET_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a - $(E) "[LD] Linking $@" - $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(TAG_SET_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/tag_set_test - -endif - -$(OBJDIR)/$(CONFIG)/test/core/census/tag_set_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a - -deps_tag_set_test: $(TAG_SET_TEST_OBJS:.o=.dep) - -ifneq ($(NO_SECURE),true) -ifneq ($(NO_DEPS),true) --include $(TAG_SET_TEST_OBJS:.o=.dep) -endif -endif - - TCP_CLIENT_POSIX_TEST_SRC = \ test/core/iomgr/tcp_client_posix_test.c \ diff --git a/binding.gyp b/binding.gyp index e76ea54674a..e4946135b0d 100644 --- a/binding.gyp +++ b/binding.gyp @@ -685,7 +685,6 @@ 'src/core/census/initialize.c', 'src/core/census/operation.c', 'src/core/census/placeholders.c', - 'src/core/census/tag_set.c', 'src/core/census/tracing.c', ], "conditions": [ diff --git a/build.yaml b/build.yaml index 8d38b6a8358..b6159451981 100644 --- a/build.yaml +++ b/build.yaml @@ -14,14 +14,12 @@ filegroups: - include/grpc/census.h headers: - src/core/census/aggregation.h - - src/core/census/context.h - src/core/census/rpc_metric_id.h src: - src/core/census/context.c - src/core/census/initialize.c - src/core/census/operation.c - src/core/census/placeholders.c - - src/core/census/tag_set.c - src/core/census/tracing.c - name: gpr public_headers: @@ -896,6 +894,14 @@ targets: deps: - grpc_test_util - grpc +- name: census_context_test + build: test + language: c + src: + - test/core/census/context_test.c + deps: + - grpc_test_util + - grpc - name: channel_create_test build: test language: c @@ -1561,14 +1567,6 @@ targets: - mac - linux - posix -- name: tag_set_test - build: test - language: c - src: - - test/core/census/tag_set_test.c - deps: - - grpc_test_util - - grpc - name: tcp_client_posix_test cpu_cost: 0.5 build: test @@ -2453,6 +2451,7 @@ node_modules: - src/node/src/client.js - src/node/src/common.js - src/node/src/credentials.js + - src/node/src/grpc_extension.js - src/node/src/metadata.js - src/node/src/server.js name: grpc_node diff --git a/examples/cpp/helloworld/Makefile b/examples/cpp/helloworld/Makefile index 6aa635913f6..ca2667f69dc 100644 --- a/examples/cpp/helloworld/Makefile +++ b/examples/cpp/helloworld/Makefile @@ -32,7 +32,7 @@ CXX = g++ CPPFLAGS += -I/usr/local/include -pthread CXXFLAGS += -std=c++11 -LDFLAGS += -L/usr/local/lib -lgrpc++_unsecure -lgrpc -lgpr -lprotobuf -lpthread -ldl +LDFLAGS += -L/usr/local/lib -lgrpc++_unsecure -lgrpc -lprotobuf -lpthread -ldl PROTOC = protoc GRPC_CPP_PLUGIN = grpc_cpp_plugin GRPC_CPP_PLUGIN_PATH ?= `which $(GRPC_CPP_PLUGIN)` diff --git a/examples/cpp/route_guide/Makefile b/examples/cpp/route_guide/Makefile index b906177af35..6ccaa01c232 100644 --- a/examples/cpp/route_guide/Makefile +++ b/examples/cpp/route_guide/Makefile @@ -1,5 +1,5 @@ # -# Copyright 2015, Google Inc. +# Copyright 2015-2016, Google Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -32,7 +32,7 @@ CXX = g++ CPPFLAGS += -I/usr/local/include -pthread CXXFLAGS += -std=c++11 -LDFLAGS += -L/usr/local/lib -lgrpc++_unsecure -lgrpc -lgpr -lprotobuf -lpthread -ldl +LDFLAGS += -L/usr/local/lib -lgrpc++_unsecure -lgrpc -lprotobuf -lpthread -ldl PROTOC = protoc GRPC_CPP_PLUGIN = grpc_cpp_plugin GRPC_CPP_PLUGIN_PATH ?= `which $(GRPC_CPP_PLUGIN)` diff --git a/gRPC.podspec b/gRPC.podspec index ccfce5eaebf..4cafd8c3c06 100644 --- a/gRPC.podspec +++ b/gRPC.podspec @@ -201,7 +201,6 @@ Pod::Spec.new do |s| 'src/core/support/thd_internal.h', 'src/core/support/time_precise.h', 'src/core/census/aggregation.h', - 'src/core/census/context.h', 'src/core/census/rpc_metric_id.h', 'include/grpc/grpc_security.h', 'include/grpc/byte_buffer.h', @@ -453,7 +452,6 @@ Pod::Spec.new do |s| 'src/core/census/initialize.c', 'src/core/census/operation.c', 'src/core/census/placeholders.c', - 'src/core/census/tag_set.c', 'src/core/census/tracing.c' ss.private_header_files = 'src/core/security/auth_filters.h', @@ -594,7 +592,6 @@ Pod::Spec.new do |s| 'src/core/support/thd_internal.h', 'src/core/support/time_precise.h', 'src/core/census/aggregation.h', - 'src/core/census/context.h', 'src/core/census/rpc_metric_id.h' ss.header_mappings_dir = '.' diff --git a/grpc.def b/grpc.def index 4a1cc75cc91..d37e6879c57 100644 --- a/grpc.def +++ b/grpc.def @@ -3,7 +3,14 @@ EXPORTS census_shutdown census_supported census_enabled - census_context_serialize + census_context_create + census_context_destroy + census_context_get_status + census_context_initialize_iterator + census_context_next_tag + census_context_get_tag + census_context_encode + census_context_decode census_trace_mask census_set_trace_mask census_start_rpc_op_timestamp @@ -16,15 +23,6 @@ EXPORTS census_trace_scan_start census_get_trace_record census_trace_scan_end - census_tag_set_create - census_tag_set_destroy - census_tag_set_get_create_status - census_tag_set_initialize_iterator - census_tag_set_next_tag - census_tag_set_get_tag_by_key - census_tag_set_encode - census_tag_set_decode - census_context_tag_set census_record_values census_view_create census_view_delete diff --git a/grpc.gemspec b/grpc.gemspec index 0b866db8525..e305ea57ef3 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -240,7 +240,6 @@ Gem::Specification.new do |s| s.files += %w( src/core/support/thd_internal.h ) s.files += %w( src/core/support/time_precise.h ) s.files += %w( src/core/census/aggregation.h ) - s.files += %w( src/core/census/context.h ) s.files += %w( src/core/census/rpc_metric_id.h ) s.files += %w( src/core/httpcli/httpcli_security_connector.c ) s.files += %w( src/core/security/base64.c ) @@ -437,7 +436,6 @@ Gem::Specification.new do |s| s.files += %w( src/core/census/initialize.c ) s.files += %w( src/core/census/operation.c ) s.files += %w( src/core/census/placeholders.c ) - s.files += %w( src/core/census/tag_set.c ) s.files += %w( src/core/census/tracing.c ) s.files += %w( third_party/boringssl/crypto/aes/internal.h ) s.files += %w( third_party/boringssl/crypto/asn1/asn1_locl.h ) diff --git a/include/grpc/census.h b/include/grpc/census.h index 70d4f80efbd..6313b196f22 100644 --- a/include/grpc/census.h +++ b/include/grpc/census.h @@ -70,28 +70,148 @@ CENSUS_API int census_supported(void); CENSUS_API int census_enabled(void); /** - Context is a handle used by census to represent the current tracing and - tagging information. Contexts should be propagated across RPC's. Contexts - are created by any of the census_start_*_op() functions. A context is - typically used as argument to most census functions. Conceptually, contexts - should be thought of as specific to single RPC/thread. The context can be - serialized for passing across the wire, via census_context_serialize(). -*/ + A Census Context is a handle used by Census to represent the current tracing + and stats collection information. Contexts should be propagated across RPC's + (this is the responsibility of the local RPC system). A context is typically + used as the first argument to most census functions. Conceptually, they + should be thought of as specific to a single RPC/thread. The user visible + context representation is that of a collection of key:value string pairs, + each of which is termed a 'tag'; these form the basis against which Census + metrics will be recorded. Keys are unique within a context. */ typedef struct census_context census_context; -/* This function is called by the RPC subsystem whenever it needs to get a - * serialized form of the current census context (presumably to pass across - * the wire). Arguments: - * 'buffer': pointer to memory into which serialized context will be placed - * 'buf_size': size of 'buffer' - * - * Returns: the number of bytes used in buffer if successful, or 0 if the - * buffer is of insufficient size. - * - * TODO(aveitch): determine how best to communicate required/max buffer size - * so caller doesn't have to guess. */ -CENSUS_API size_t census_context_serialize(const census_context *context, - char *buffer, size_t buf_size); +/* A tag is a key:value pair. The key is a non-empty, printable (UTF-8 + encoded), nil-terminated string. The value is a binary string, that may be + printable. There are limits on the sizes of both keys and values (see + CENSUS_MAX_TAG_KB_LEN definition below), and the number of tags that can be + propagated (CENSUS_MAX_PROPAGATED_TAGS). Users should also remember that + some systems may have limits on, e.g., the number of bytes that can be + transmitted as metadata, and that larger tags means more memory consumed + and time in processing. */ +typedef struct { + const char *key; + const char *value; + size_t value_len; + uint8_t flags; +} census_tag; + +/* Maximum length of a tag's key or value. */ +#define CENSUS_MAX_TAG_KV_LEN 255 +/* Maximum number of propagatable tags. */ +#define CENSUS_MAX_PROPAGATED_TAGS 255 + +/* Tag flags. */ +#define CENSUS_TAG_PROPAGATE 1 /* Tag should be propagated over RPC */ +#define CENSUS_TAG_STATS 2 /* Tag will be used for statistics aggregation */ +#define CENSUS_TAG_BINARY 4 /* Tag value is not printable */ +#define CENSUS_TAG_RESERVED 8 /* Reserved for internal use. */ +/* Flag values 8,16,32,64,128 are reserved for future/internal use. Clients + should not use or rely on their values. */ + +#define CENSUS_TAG_IS_PROPAGATED(flags) (flags & CENSUS_TAG_PROPAGATE) +#define CENSUS_TAG_IS_STATS(flags) (flags & CENSUS_TAG_STATS) +#define CENSUS_TAG_IS_BINARY(flags) (flags & CENSUS_TAG_BINARY) + +/* An instance of this structure is kept by every context, and records the + basic information associated with the creation of that context. */ +typedef struct { + int n_propagated_tags; /* number of propagated printable tags */ + int n_propagated_binary_tags; /* number of propagated binary tags */ + int n_local_tags; /* number of non-propagated (local) tags */ + int n_deleted_tags; /* number of tags that were deleted */ + int n_added_tags; /* number of tags that were added */ + int n_modified_tags; /* number of tags that were modified */ + int n_invalid_tags; /* number of tags with bad keys or values (e.g. + longer than CENSUS_MAX_TAG_KV_LEN) */ + int n_ignored_tags; /* number of tags ignored because of + CENSUS_MAX_PROPAGATED_TAGS limit. */ +} census_context_status; + +/* Create a new context, adding and removing tags from an existing context. + This will copy all tags from the 'tags' input, so it is recommended + to add as many tags in a single operation as is practical for the client. + @param base Base context to build upon. Can be NULL. + @param tags A set of tags to be added/changed/deleted. Tags with keys that + are in 'tags', but not 'base', are added to the tag set. Keys that are in + both 'tags' and 'base' will have their value/flags modified. Tags with keys + in both, but with NULL or zero-length values, will be deleted from the tag + set. Tags with invalid (too long or short) keys or values will be ignored. + If adding a tag will result in more than CENSUS_MAX_PROPAGATED_TAGS in either + binary or non-binary tags, they will be ignored, as will deletions of + tags that don't exist. + @param ntags number of tags in 'tags' + @param status If not NULL, will return a pointer to a census_context_status + structure containing information about the new context and status of the + tags used in its creation. + @return A new, valid census_context. +*/ +CENSUS_API census_context *census_context_create( + const census_context *base, const census_tag *tags, int ntags, + census_context_status const **status); + +/* Destroy a context. Once this function has been called, the context cannot + be reused. */ +CENSUS_API void census_context_destroy(census_context *context); + +/* Get a pointer to the original status from the context creation. */ +CENSUS_API const census_context_status *census_context_get_status( + const census_context *context); + +/* Structure used for iterating over the tegs in a context. API clients should + not use or reference internal fields - neither their contents or + presence/absence are guaranteed. */ +typedef struct { + const census_context *context; + int base; + int index; + char *kvm; +} census_context_iterator; + +/* Initialize a census_tag_iterator. Must be called before first use. */ +CENSUS_API void census_context_initialize_iterator( + const census_context *context, census_context_iterator *iterator); + +/* Get the contents of the "next" tag in the context. If there are no more + tags, returns 0 (and 'tag' contents will be unchanged), otherwise returns 1. + */ +CENSUS_API int census_context_next_tag(census_context_iterator *iterator, + census_tag *tag); + +/* Get a context tag by key. Returns 0 if the key is not present. */ +CENSUS_API int census_context_get_tag(const census_context *context, + const char *key, census_tag *tag); + +/* Tag set encode/decode functionality. These functionas are intended + for use by RPC systems only, for purposes of transmitting/receiving contexts. + */ + +/* Encode a context into a buffer. The propagated tags are encoded into the + buffer in two regions: one for printable tags, and one for binary tags. + @param context context to be encoded + @param buffer pointer to buffer. This address will be used to encode the + printable tags. + @param buf_size number of available bytes in buffer. + @param print_buf_size Will be set to the number of bytes consumed by + printable tags. + @param bin_buf_size Will be set to the number of bytes used to encode the + binary tags. + @return A pointer to the binary tag's encoded, or NULL if the buffer was + insufficiently large to hold the encoded tags. Thus, if successful, + printable tags are encoded into + [buffer, buffer + *print_buf_size) and binary tags into + [returned-ptr, returned-ptr + *bin_buf_size) (and the returned + pointer should be buffer + *print_buf_size) */ +CENSUS_API char *census_context_encode(const census_context *context, + char *buffer, size_t buf_size, + size_t *print_buf_size, + size_t *bin_buf_size); + +/* Decode context buffers encoded with census_context_encode(). Returns NULL + if there is an error in parsing either buffer. */ +CENSUS_API census_context *census_context_decode(const char *buffer, + size_t size, + const char *bin_buffer, + size_t bin_size); /* Distributed traces can have a number of options. */ enum census_trace_mask_values { @@ -326,146 +446,6 @@ CENSUS_API int census_get_trace_record(census_trace_record *trace_record); /** End a scan previously started by census_trace_scan_start() */ CENSUS_API void census_trace_scan_end(); -/* A Census tag set is a collection of key:value string pairs; these form the - basis against which Census metrics will be recorded. Keys are unique within - a tag set. All contexts have an associated tag set. */ -typedef struct census_tag_set census_tag_set; - -/* A tag is a key:value pair. The key is a non-empty, printable (UTF-8 - encoded), nil-terminated string. The value is a binary string, that may be - printable. There are limits on the sizes of both keys and values (see - CENSUS_MAX_TAG_KB_LEN definition below), and the number of tags that can be - propagated (CENSUS_MAX_PROPAGATED_TAGS). Users should also remember that - some systems may have limits on, e.g., the number of bytes that can be - transmitted as metadata, and that larger tags means more memory consumed - and time in processing. */ -typedef struct { - const char *key; - const char *value; - size_t value_len; - uint8_t flags; -} census_tag; - -/* Maximum length of a tag's key or value. */ -#define CENSUS_MAX_TAG_KV_LEN 255 -/* Maximum number of propagatable tags. */ -#define CENSUS_MAX_PROPAGATED_TAGS 255 - -/* Tag flags. */ -#define CENSUS_TAG_PROPAGATE 1 /* Tag should be propagated over RPC */ -#define CENSUS_TAG_STATS 2 /* Tag will be used for statistics aggregation */ -#define CENSUS_TAG_BINARY 4 /* Tag value is not printable */ -#define CENSUS_TAG_RESERVED 8 /* Reserved for internal use. */ -/* Flag values 8,16,32,64,128 are reserved for future/internal use. Clients - should not use or rely on their values. */ - -#define CENSUS_TAG_IS_PROPAGATED(flags) (flags & CENSUS_TAG_PROPAGATE) -#define CENSUS_TAG_IS_STATS(flags) (flags & CENSUS_TAG_STATS) -#define CENSUS_TAG_IS_BINARY(flags) (flags & CENSUS_TAG_BINARY) - -typedef struct { - int n_propagated_tags; /* number of propagated printable tags */ - int n_propagated_binary_tags; /* number of propagated binary tags */ - int n_local_tags; /* number of non-propagated (local) tags */ - int n_deleted_tags; /* number of tags that were deleted */ - int n_added_tags; /* number of tags that were added */ - int n_modified_tags; /* number of tags that were modified */ - int n_invalid_tags; /* number of tags with bad keys or values (e.g. - longer than CENSUS_MAX_TAG_KV_LEN) */ - int n_ignored_tags; /* number of tags ignored because of - CENSUS_MAX_PROPAGATED_TAGS limit. */ -} census_tag_set_create_status; - -/* Create a new tag set, adding and removing tags from an existing tag set. - This will copy all tags from it's input parameters, so it is recommended - to add as many tags in a single operation as is practical for the client. - @param base Base tag set to build upon. Can be NULL. - @param tags A set of tags to be added/changed/deleted. Tags with keys that - are in 'tags', but not 'base', are added to the tag set. Keys that are in - both 'tags' and 'base' will have their value/flags modified. Tags with keys - in both, but with NULL or zero-length values, will be deleted from the tag - set. Tags with invalid (too long or short) keys or values will be ignored. - If adding a tag will result in more than CENSUS_MAX_PROPAGATED_TAGS in either - binary or non-binary tags, they will be ignored, as will deletions of - tags that don't exist. - @param ntags number of tags in 'tags' - @param status If not NULL, will return a pointer to a - census_tag_set_create_status structure containing information about the new - tag set and status of the tags used in its creation. - @return A new, valid census_tag_set. -*/ -CENSUS_API census_tag_set *census_tag_set_create( - const census_tag_set *base, const census_tag *tags, int ntags, - census_tag_set_create_status const **status); - -/* Destroy a tag set created by census_tag_set_create(). Once this function - has been called, the tag set cannot be reused. */ -CENSUS_API void census_tag_set_destroy(census_tag_set *tags); - -/* Get a pointer to the original status from the creation of this tag set. */ -CENSUS_API const census_tag_set_create_status *census_tag_set_get_create_status( - const census_tag_set *tags); - -/* Structure used for tag set iteration. API clients should not use or - reference internal fields - neither their contents or presence/absence are - guaranteed. */ -typedef struct { - const census_tag_set *tags; - int base; - int index; - char *kvm; -} census_tag_set_iterator; - -/* Initialize a tag set iterator. Must be called before first use of the - iterator. */ -CENSUS_API void census_tag_set_initialize_iterator( - const census_tag_set *tags, census_tag_set_iterator *iterator); - -/* Get the contents of the "next" tag in the tag set. If there are no more - tags in the tag set, returns 0 (and 'tag' contents will be unchanged), - otherwise returns 1. */ -CENSUS_API int census_tag_set_next_tag(census_tag_set_iterator *iterator, - census_tag *tag); - -/* Get a tag by its key. Returns 0 if the key is not present in the tag - set. */ -CENSUS_API int census_tag_set_get_tag_by_key(const census_tag_set *tags, - const char *key, census_tag *tag); - -/* Tag set encode/decode functionality. These functionas are intended - for use by RPC systems only, for purposes of transmitting/receiving tag - sets. */ - -/* Encode a tag set into a buffer. The propagated tags are encoded into the - buffer in two regions: one for printable tags, and one for binary tags. - @param tags tag set to be encoded - @param buffer pointer to buffer. This address will be used to encode the - printable tags. - @param buf_size number of available bytes in buffer. - @param print_buf_size Will be set to the number of bytes consumed by - printable tags. - @param bin_buf_size Will be set to the number of bytes used to encode the - binary tags. - @return A pointer to the binary tag's encoded, or NULL if the buffer was - insufficiently large to hold the encoded tags. Thus, if successful, - printable tags are encoded into - [buffer, buffer + *print_buf_size) and binary tags into - [returned-ptr, returned-ptr + *bin_buf_size) (and the return value - should be buffer + *print_buf_size) */ -CENSUS_API char *census_tag_set_encode(const census_tag_set *tags, char *buffer, - size_t buf_size, size_t *print_buf_size, - size_t *bin_buf_size); - -/* Decode tag set buffers encoded with census_tag_set_encode_*(). Returns NULL - if there is an error in parsing either buffer. */ -CENSUS_API census_tag_set *census_tag_set_decode(const char *buffer, - size_t size, - const char *bin_buffer, - size_t bin_size); - -/* Get a contexts tag set. */ -CENSUS_API census_tag_set *census_context_tag_set(census_context *context); - /* Core stats collection API's. The following concepts are used: * Aggregation: A collection of values. Census supports the following aggregation types: @@ -511,8 +491,7 @@ extern census_aggregation_ops census_agg_window; construction via census_define_view(). */ typedef struct { const census_aggregation_ops *ops; - const void * - create_arg; /* Argument to be used for aggregation initialization. */ + const void *create_arg; /* Aaggregation initialization argument. */ } census_aggregation; /** A census view type. Opaque. */ @@ -520,14 +499,17 @@ typedef struct census_view census_view; /** Create a new view. @param metric_id Metric with which this view is associated. - @param tags tags that define the view + @param tags tags that define the view. @param aggregations aggregations to associate with the view @param naggregations number of aggregations @return A new census view */ + +/* TODO(aveitch): consider if context is the right argument type to pass in + tags. */ CENSUS_API census_view *census_view_create( - uint32_t metric_id, const census_tag_set *tags, + uint32_t metric_id, const census_context *tags, const census_aggregation *aggregations, size_t naggregations); /** Destroy a previously created view. */ @@ -540,7 +522,7 @@ CENSUS_API size_t census_view_metric(const census_view *view); CENSUS_API size_t census_view_naggregations(const census_view *view); /** Get tags associated with view. */ -CENSUS_API const census_tag_set *census_view_tags(const census_view *view); +CENSUS_API const census_context *census_view_tags(const census_view *view); /** Get aggregation descriptors associated with a view. */ CENSUS_API const census_aggregation *census_view_aggregrations( @@ -549,7 +531,7 @@ CENSUS_API const census_aggregation *census_view_aggregrations( /** Holds all the aggregation data for a particular view instantiation. Forms part of the data returned by census_view_data(). */ typedef struct { - const census_tag_set *tags; /* Tags for this set of aggregations. */ + const census_context *tags; /* Tags for this set of aggregations. */ const void **data; /* One data set for every aggregation in the view. */ } census_view_aggregation_data; diff --git a/include/grpc/impl/codegen/compression_types.h b/include/grpc/impl/codegen/compression_types.h index f552d3c8a28..94a10da21b6 100644 --- a/include/grpc/impl/codegen/compression_types.h +++ b/include/grpc/impl/codegen/compression_types.h @@ -34,7 +34,7 @@ #ifndef GRPC_IMPL_CODEGEN_COMPRESSION_TYPES_H #define GRPC_IMPL_CODEGEN_COMPRESSION_TYPES_H -#include +#include #ifdef __cplusplus extern "C" { diff --git a/include/grpc/impl/codegen/port_platform.h b/include/grpc/impl/codegen/port_platform.h index d5294b2efa8..d265e9b3922 100644 --- a/include/grpc/impl/codegen/port_platform.h +++ b/include/grpc/impl/codegen/port_platform.h @@ -254,9 +254,22 @@ #define GPR_FORBID_UNREACHABLE_CODE 1 #endif -/* For a common case, assume that the platform has a C99-like stdint.h */ - +#ifdef _MSC_VER +#if _MSC_VER < 1700 +typedef __int8 int8_t; +typedef __int16 int16_t; +typedef __int32 int32_t; +typedef __int64 int64_t; +typedef unsigned __int8 uint8_t; +typedef unsigned __int16 uint16_t; +typedef unsigned __int32 uint32_t; +typedef unsigned __int64 uint64_t; +#else +#include +#endif /* _MSC_VER < 1700 */ +#else #include +#endif /* _MSC_VER */ /* Cache line alignment */ #ifndef GPR_CACHELINE_SIZE_LOG diff --git a/include/grpc/impl/codegen/propagation_bits.h b/include/grpc/impl/codegen/propagation_bits.h index 989b86f2aad..d0364155997 100644 --- a/include/grpc/impl/codegen/propagation_bits.h +++ b/include/grpc/impl/codegen/propagation_bits.h @@ -34,7 +34,7 @@ #ifndef GRPC_IMPL_CODEGEN_H #define GRPC_IMPL_CODEGEN_H -#include +#include #ifdef __cplusplus extern "C" { diff --git a/package.json b/package.json index 7ab4ea514b5..59e18128ee3 100644 --- a/package.json +++ b/package.json @@ -84,6 +84,7 @@ "src/node/src/client.js", "src/node/src/common.js", "src/node/src/credentials.js", + "src/node/src/grpc_extension.js", "src/node/src/metadata.js", "src/node/src/server.js", "include/grpc/grpc_security.h", @@ -279,7 +280,6 @@ "src/core/support/thd_internal.h", "src/core/support/time_precise.h", "src/core/census/aggregation.h", - "src/core/census/context.h", "src/core/census/rpc_metric_id.h", "src/core/httpcli/httpcli_security_connector.c", "src/core/security/base64.c", @@ -476,7 +476,6 @@ "src/core/census/initialize.c", "src/core/census/operation.c", "src/core/census/placeholders.c", - "src/core/census/tag_set.c", "src/core/census/tracing.c", "third_party/zlib/crc32.h", "third_party/zlib/deflate.h", diff --git a/setup.py b/setup.py index 2f73e94c458..720e4f75f6c 100644 --- a/setup.py +++ b/setup.py @@ -75,14 +75,25 @@ CYTHON_EXTENSION_PACKAGE_NAMES = () CYTHON_EXTENSION_MODULE_NAMES = ('grpc._cython.cygrpc',) +CYTHON_HELPER_C_FILES = ( + os.path.join(PYTHON_STEM, 'grpc/_cython/loader.c'), + os.path.join(PYTHON_STEM, 'grpc/_cython/imports.generated.c'), +) + +CORE_C_FILES = () +if not "win32" in sys.platform: + CORE_C_FILES += tuple(grpc_core_dependencies.CORE_SOURCE_FILES) + EXTENSION_INCLUDE_DIRECTORIES = ( (PYTHON_STEM,) + CORE_INCLUDE + BORINGSSL_INCLUDE + ZLIB_INCLUDE) -EXTENSION_LIBRARIES = ('m',) -if not "darwin" in sys.platform: +EXTENSION_LIBRARIES = () +if "linux" in sys.platform: EXTENSION_LIBRARIES += ('rt',) +if not "win32" in sys.platform: + EXTENSION_LIBRARIES += ('m',) -DEFINE_MACROS = (('OPENSSL_NO_ASM', 1),) +DEFINE_MACROS = (('OPENSSL_NO_ASM', 1), ('_WIN32_WINNT', 0x600)) CFLAGS = () LDFLAGS = () @@ -93,8 +104,8 @@ if "linux" in sys.platform or "darwin" in sys.platform: DEFINE_MACROS += (('PyMODINIT_FUNC', '__attribute__((visibility ("default"))) void'),) -def cython_extensions(package_names, module_names, include_dirs, libraries, - define_macros, build_with_cython=False): +def cython_extensions(package_names, module_names, extra_sources, include_dirs, + libraries, define_macros, build_with_cython=False): if ENABLE_CYTHON_TRACING: define_macros = define_macros + [('CYTHON_TRACE_NOGIL', 1)] file_extension = 'pyx' if build_with_cython else 'c' @@ -104,7 +115,7 @@ def cython_extensions(package_names, module_names, include_dirs, libraries, extensions = [ _extension.Extension( name=module_name, - sources=[module_file] + grpc_core_dependencies.CORE_SOURCE_FILES, + sources=[module_file] + extra_sources, include_dirs=include_dirs, libraries=libraries, define_macros=define_macros, ) for (module_name, module_file) in zip(module_names, module_files) @@ -120,6 +131,7 @@ def cython_extensions(package_names, module_names, include_dirs, libraries, CYTHON_EXTENSION_MODULES = cython_extensions( list(CYTHON_EXTENSION_PACKAGE_NAMES), list(CYTHON_EXTENSION_MODULE_NAMES), + list(CYTHON_HELPER_C_FILES) + list(CORE_C_FILES), list(EXTENSION_INCLUDE_DIRECTORIES), list(EXTENSION_LIBRARIES), list(DEFINE_MACROS), bool(BUILD_WITH_CYTHON)) @@ -174,9 +186,6 @@ TEST_PACKAGE_DATA = { 'credentials/server1.key', 'credentials/server1.pem', ], - 'grpc._adapter': [ - 'credentials/roots.pem' - ], } TESTS_REQUIRE = ( @@ -189,7 +198,15 @@ TEST_SUITE = 'tests' TEST_LOADER = 'tests:Loader' TEST_RUNNER = 'tests:Runner' -PACKAGE_DATA = {} +PACKAGE_DATA = { + 'grpc._adapter': [ + 'credentials/roots.pem' + ], + 'grpc._cython': [ + '_windows/grpc_c.32.python', + '_windows/grpc_c.64.python', + ], +} if INSTALL_TESTS: PACKAGE_DATA = dict(PACKAGE_DATA, **TEST_PACKAGE_DATA) PACKAGES = setuptools.find_packages(PYTHON_STEM) @@ -199,7 +216,7 @@ else: setuptools.setup( name='grpcio', - version='0.12.0b6', + version='0.12.0b8', license=LICENSE, ext_modules=CYTHON_EXTENSION_MODULES, packages=list(PACKAGES), diff --git a/src/core/census/context.c b/src/core/census/context.c index cab58b653cb..e60330de640 100644 --- a/src/core/census/context.c +++ b/src/core/census/context.c @@ -1,6 +1,6 @@ /* * - * Copyright 2015, Google Inc. + * Copyright 2015-2016, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -31,16 +31,500 @@ * */ -#include "src/core/census/context.h" - -#include #include #include +#include +#include +#include +#include +#include +#include "src/core/support/string.h" + +// Functions in this file support the public context API, including +// encoding/decoding as part of context propagation across RPC's. The overall +// requirements (in approximate priority order) for the +// context representation: +// 1. Efficient conversion to/from wire format +// 2. Minimal bytes used on-wire +// 3. Efficient context creation +// 4. Efficient lookup of tag value for a key +// 5. Efficient iteration over tags +// 6. Minimal memory footprint +// +// Notes on tradeoffs/decisions: +// * tag includes 1 byte length of key, as well as nil-terminating byte. These +// are to aid in efficient parsing and the ability to directly return key +// strings. This is more important than saving a single byte/tag on the wire. +// * The wire encoding uses only single byte values. This eliminates the need +// to handle endian-ness conversions. It also means there is a hard upper +// limit of 255 for both CENSUS_MAX_TAG_KV_LEN and CENSUS_MAX_PROPAGATED_TAGS. +// * Keep all tag information (keys/values/flags) in a single memory buffer, +// that can be directly copied to the wire. +// * Binary tags share the same structure as, but are encoded separately from, +// non-binary tags. This is primarily because non-binary tags are far more +// likely to be repeated across multiple RPC calls, so are more efficiently +// cached and compressed in any metadata schemes. + +// Structure representing a set of tags. Essentially a count of number of tags +// present, and pointer to a chunk of memory that contains the per-tag details. +struct tag_set { + int ntags; // number of tags. + int ntags_alloc; // ntags + number of deleted tags (total number of tags + // in all of kvm). This will always be == ntags, except during the process + // of building a new tag set. + size_t kvm_size; // number of bytes allocated for key/value storage. + size_t kvm_used; // number of bytes of used key/value memory + char *kvm; // key/value memory. Consists of repeated entries of: + // Offset Size Description + // 0 1 Key length, including trailing 0. (K) + // 1 1 Value length. (V) + // 2 1 Flags + // 3 K Key bytes + // 3 + K V Value bytes + // + // We refer to the first 3 entries as the 'tag header'. If extra values are + // introduced in the header, you will need to modify the TAG_HEADER_SIZE + // constant, the raw_tag structure (and everything that uses it) and the + // encode/decode functions appropriately. +}; + +// Number of bytes in tag header. +#define TAG_HEADER_SIZE 3 // key length (1) + value length (1) + flags (1) +// Offsets to tag header entries. +#define KEY_LEN_OFFSET 0 +#define VALUE_LEN_OFFSET 1 +#define FLAG_OFFSET 2 + +// raw_tag represents the raw-storage form of a tag in the kvm of a tag_set. +struct raw_tag { + uint8_t key_len; + uint8_t value_len; + uint8_t flags; + char *key; + char *value; +}; + +// Use a reserved flag bit for indication of deleted tag. +#define CENSUS_TAG_DELETED CENSUS_TAG_RESERVED +#define CENSUS_TAG_IS_DELETED(flags) (flags & CENSUS_TAG_DELETED) + +// Primary (external) representation of a context. Composed of 3 underlying +// tag_set structs, one for each of the binary/printable propagated tags, and +// one for everything else. This is to efficiently support tag +// encoding/decoding. +struct census_context { + struct tag_set tags[3]; + census_context_status status; +}; + +// Indices into the tags member of census_context +#define PROPAGATED_TAGS 0 +#define PROPAGATED_BINARY_TAGS 1 +#define LOCAL_TAGS 2 + +// Extract a raw tag given a pointer (raw) to the tag header. Allow for some +// extra bytes in the tag header (see encode/decode functions for usage: this +// allows for future expansion of the tag header). +static char *decode_tag(struct raw_tag *tag, char *header, int offset) { + tag->key_len = (uint8_t)(*header++); + tag->value_len = (uint8_t)(*header++); + tag->flags = (uint8_t)(*header++); + header += offset; + tag->key = header; + header += tag->key_len; + tag->value = header; + return header + tag->value_len; +} -/* Placeholder implementation only. */ +// Make a copy (in 'to') of an existing tag_set. +static void tag_set_copy(struct tag_set *to, const struct tag_set *from) { + memcpy(to, from, sizeof(struct tag_set)); + to->kvm = gpr_malloc(to->kvm_size); + memcpy(to->kvm, from->kvm, from->kvm_used); +} + +// Delete a tag from a tag_set, if it exists (returns true if it did). +static bool tag_set_delete_tag(struct tag_set *tags, const char *key, + size_t key_len) { + char *kvp = tags->kvm; + for (int i = 0; i < tags->ntags_alloc; i++) { + uint8_t *flags = (uint8_t *)(kvp + FLAG_OFFSET); + struct raw_tag tag; + kvp = decode_tag(&tag, kvp, 0); + if (CENSUS_TAG_IS_DELETED(tag.flags)) continue; + if ((key_len == tag.key_len) && (memcmp(key, tag.key, key_len) == 0)) { + *flags |= CENSUS_TAG_DELETED; + tags->ntags--; + return true; + } + } + return false; +} + +// Delete a tag from a context, return true if it existed. +static bool context_delete_tag(census_context *context, const census_tag *tag, + size_t key_len) { + return ( + tag_set_delete_tag(&context->tags[LOCAL_TAGS], tag->key, key_len) || + tag_set_delete_tag(&context->tags[PROPAGATED_TAGS], tag->key, key_len) || + tag_set_delete_tag(&context->tags[PROPAGATED_BINARY_TAGS], tag->key, + key_len)); +} + +// Add a tag to a tag_set. Return true on success, false if the tag could +// not be added because of constraints on tag set size. This function should +// not be called if the tag may already exist (in a non-deleted state) in +// the tag_set, as that would result in two tags with the same key. +static bool tag_set_add_tag(struct tag_set *tags, const census_tag *tag, + size_t key_len) { + if (tags->ntags == CENSUS_MAX_PROPAGATED_TAGS) { + return false; + } + const size_t tag_size = key_len + tag->value_len + TAG_HEADER_SIZE; + if (tags->kvm_used + tag_size > tags->kvm_size) { + // allocate new memory if needed + tags->kvm_size += 2 * CENSUS_MAX_TAG_KV_LEN + TAG_HEADER_SIZE; + char *new_kvm = gpr_malloc(tags->kvm_size); + memcpy(new_kvm, tags->kvm, tags->kvm_used); + gpr_free(tags->kvm); + tags->kvm = new_kvm; + } + char *kvp = tags->kvm + tags->kvm_used; + *kvp++ = (char)key_len; + *kvp++ = (char)tag->value_len; + // ensure reserved flags are not used. + *kvp++ = (char)(tag->flags & (CENSUS_TAG_PROPAGATE | CENSUS_TAG_STATS | + CENSUS_TAG_BINARY)); + memcpy(kvp, tag->key, key_len); + kvp += key_len; + memcpy(kvp, tag->value, tag->value_len); + tags->kvm_used += tag_size; + tags->ntags++; + tags->ntags_alloc++; + return true; +} + +// Add/modify/delete a tag to/in a context. Caller must validate that tag key +// etc. are valid. +static void context_modify_tag(census_context *context, const census_tag *tag, + size_t key_len) { + // First delete the tag if it is already present. + bool deleted = context_delete_tag(context, tag, key_len); + // Determine if we need to add it back. + bool call_add = tag->value != NULL && tag->value_len != 0; + bool added = false; + if (call_add) { + if (CENSUS_TAG_IS_PROPAGATED(tag->flags)) { + if (CENSUS_TAG_IS_BINARY(tag->flags)) { + added = tag_set_add_tag(&context->tags[PROPAGATED_BINARY_TAGS], tag, + key_len); + } else { + added = tag_set_add_tag(&context->tags[PROPAGATED_TAGS], tag, key_len); + } + } else { + added = tag_set_add_tag(&context->tags[LOCAL_TAGS], tag, key_len); + } + } + if (deleted) { + if (call_add) { + context->status.n_modified_tags++; + } else { + context->status.n_deleted_tags++; + } + } else { + if (added) { + context->status.n_added_tags++; + } else { + context->status.n_ignored_tags++; + } + } +} + +// Remove memory used for deleted tags from a tag set. Basic algorithm: +// 1) Walk through tag set to find first deleted tag. Record where it is. +// 2) Find the next not-deleted tag. Copy all of kvm from there to the end +// "over" the deleted tags +// 3) repeat #1 and #2 until we have seen all tags +// 4) if we are still looking for a not-deleted tag, then all the end portion +// of the kvm is deleted. Just reduce the used amount of memory by the +// appropriate amount. +static void tag_set_flatten(struct tag_set *tags) { + if (tags->ntags == tags->ntags_alloc) return; + bool found_deleted = false; // found a deleted tag. + char *kvp = tags->kvm; + char *dbase = NULL; // record location of deleted tag + for (int i = 0; i < tags->ntags_alloc; i++) { + struct raw_tag tag; + char *next_kvp = decode_tag(&tag, kvp, 0); + if (found_deleted) { + if (!CENSUS_TAG_IS_DELETED(tag.flags)) { + ptrdiff_t reduce = kvp - dbase; // #bytes in deleted tags + GPR_ASSERT(reduce > 0); + ptrdiff_t copy_size = tags->kvm + tags->kvm_used - kvp; + GPR_ASSERT(copy_size > 0); + memmove(dbase, kvp, (size_t)copy_size); + tags->kvm_used -= (size_t)reduce; + next_kvp -= reduce; + found_deleted = false; + } + } else { + if (CENSUS_TAG_IS_DELETED(tag.flags)) { + dbase = kvp; + found_deleted = true; + } + } + kvp = next_kvp; + } + if (found_deleted) { + GPR_ASSERT(dbase > tags->kvm); + tags->kvm_used = (size_t)(dbase - tags->kvm); + } + tags->ntags_alloc = tags->ntags; +} -size_t census_context_serialize(const census_context *context, char *buffer, - size_t buf_size) { - /* TODO(aveitch): implement serialization */ +census_context *census_context_create(const census_context *base, + const census_tag *tags, int ntags, + census_context_status const **status) { + census_context *context = gpr_malloc(sizeof(census_context)); + // If we are given a base, copy it into our new tag set. Otherwise set it + // to zero/NULL everything. + if (base == NULL) { + memset(context, 0, sizeof(census_context)); + } else { + tag_set_copy(&context->tags[PROPAGATED_TAGS], &base->tags[PROPAGATED_TAGS]); + tag_set_copy(&context->tags[PROPAGATED_BINARY_TAGS], + &base->tags[PROPAGATED_BINARY_TAGS]); + tag_set_copy(&context->tags[LOCAL_TAGS], &base->tags[LOCAL_TAGS]); + memset(&context->status, 0, sizeof(context->status)); + } + // Walk over the additional tags and, for those that aren't invalid, modify + // the context to add/replace/delete as required. + for (int i = 0; i < ntags; i++) { + const census_tag *tag = &tags[i]; + size_t key_len = strlen(tag->key) + 1; + // ignore the tag if it is too long/short. + if (key_len != 1 && key_len <= CENSUS_MAX_TAG_KV_LEN && + tag->value_len <= CENSUS_MAX_TAG_KV_LEN) { + context_modify_tag(context, tag, key_len); + } else { + context->status.n_invalid_tags++; + } + } + // Remove any deleted tags, update status if needed, and return. + tag_set_flatten(&context->tags[PROPAGATED_TAGS]); + tag_set_flatten(&context->tags[PROPAGATED_BINARY_TAGS]); + tag_set_flatten(&context->tags[LOCAL_TAGS]); + context->status.n_propagated_tags = context->tags[PROPAGATED_TAGS].ntags; + context->status.n_propagated_binary_tags = + context->tags[PROPAGATED_BINARY_TAGS].ntags; + context->status.n_local_tags = context->tags[LOCAL_TAGS].ntags; + if (status) { + *status = &context->status; + } + return context; +} + +const census_context_status *census_context_get_status( + const census_context *context) { + return &context->status; +} + +void census_context_destroy(census_context *context) { + gpr_free(context->tags[PROPAGATED_TAGS].kvm); + gpr_free(context->tags[PROPAGATED_BINARY_TAGS].kvm); + gpr_free(context->tags[LOCAL_TAGS].kvm); + gpr_free(context); +} + +void census_context_initialize_iterator(const census_context *context, + census_context_iterator *iterator) { + iterator->context = context; + iterator->index = 0; + if (context->tags[PROPAGATED_TAGS].ntags != 0) { + iterator->base = PROPAGATED_TAGS; + iterator->kvm = context->tags[PROPAGATED_TAGS].kvm; + } else if (context->tags[PROPAGATED_BINARY_TAGS].ntags != 0) { + iterator->base = PROPAGATED_BINARY_TAGS; + iterator->kvm = context->tags[PROPAGATED_BINARY_TAGS].kvm; + } else if (context->tags[LOCAL_TAGS].ntags != 0) { + iterator->base = LOCAL_TAGS; + iterator->kvm = context->tags[LOCAL_TAGS].kvm; + } else { + iterator->base = -1; + } +} + +int census_context_next_tag(census_context_iterator *iterator, + census_tag *tag) { + if (iterator->base < 0) { + return 0; + } + struct raw_tag raw; + iterator->kvm = decode_tag(&raw, iterator->kvm, 0); + tag->key = raw.key; + tag->value = raw.value; + tag->value_len = raw.value_len; + tag->flags = raw.flags; + if (++iterator->index == iterator->context->tags[iterator->base].ntags) { + do { + if (iterator->base == LOCAL_TAGS) { + iterator->base = -1; + return 1; + } + } while (iterator->context->tags[++iterator->base].ntags == 0); + iterator->index = 0; + iterator->kvm = iterator->context->tags[iterator->base].kvm; + } + return 1; +} + +// Find a tag in a tag_set by key. Return true if found, false otherwise. +static bool tag_set_get_tag(const struct tag_set *tags, const char *key, + size_t key_len, census_tag *tag) { + char *kvp = tags->kvm; + for (int i = 0; i < tags->ntags; i++) { + struct raw_tag raw; + kvp = decode_tag(&raw, kvp, 0); + if (key_len == raw.key_len && memcmp(raw.key, key, key_len) == 0) { + tag->key = raw.key; + tag->value = raw.value; + tag->value_len = raw.value_len; + tag->flags = raw.flags; + return true; + } + } + return false; +} + +int census_context_get_tag(const census_context *context, const char *key, + census_tag *tag) { + size_t key_len = strlen(key) + 1; + if (key_len == 1) { + return 0; + } + if (tag_set_get_tag(&context->tags[PROPAGATED_TAGS], key, key_len, tag) || + tag_set_get_tag(&context->tags[PROPAGATED_BINARY_TAGS], key, key_len, + tag) || + tag_set_get_tag(&context->tags[LOCAL_TAGS], key, key_len, tag)) { + return 1; + } return 0; } + +// Context encoding and decoding functions. +// +// Wire format for tag_set's on the wire: +// +// First, a tag set header: +// +// offset bytes description +// 0 1 version number +// 1 1 number of bytes in this header. This allows for future +// expansion. +// 2 1 number of bytes in each tag header. +// 3 1 ntags value from tag set. +// +// This is followed by the key/value memory from struct tag_set. + +#define ENCODED_VERSION 0 // Version number +#define ENCODED_HEADER_SIZE 4 // size of tag set header + +// Encode a tag set. Returns 0 if buffer is too small. +static size_t tag_set_encode(const struct tag_set *tags, char *buffer, + size_t buf_size) { + if (buf_size < ENCODED_HEADER_SIZE + tags->kvm_used) { + return 0; + } + buf_size -= ENCODED_HEADER_SIZE; + *buffer++ = (char)ENCODED_VERSION; + *buffer++ = (char)ENCODED_HEADER_SIZE; + *buffer++ = (char)TAG_HEADER_SIZE; + *buffer++ = (char)tags->ntags; + if (tags->ntags == 0) { + return ENCODED_HEADER_SIZE; + } + memcpy(buffer, tags->kvm, tags->kvm_used); + return ENCODED_HEADER_SIZE + tags->kvm_used; +} + +char *census_context_encode(const census_context *context, char *buffer, + size_t buf_size, size_t *print_buf_size, + size_t *bin_buf_size) { + *print_buf_size = + tag_set_encode(&context->tags[PROPAGATED_TAGS], buffer, buf_size); + if (*print_buf_size == 0) { + return NULL; + } + char *b_buffer = buffer + *print_buf_size; + *bin_buf_size = tag_set_encode(&context->tags[PROPAGATED_BINARY_TAGS], + b_buffer, buf_size - *print_buf_size); + if (*bin_buf_size == 0) { + return NULL; + } + return b_buffer; +} + +// Decode a tag set. +static void tag_set_decode(struct tag_set *tags, const char *buffer, + size_t size) { + uint8_t version = (uint8_t)(*buffer++); + uint8_t header_size = (uint8_t)(*buffer++); + uint8_t tag_header_size = (uint8_t)(*buffer++); + tags->ntags = tags->ntags_alloc = (int)(*buffer++); + if (tags->ntags == 0) { + tags->ntags_alloc = 0; + tags->kvm_size = 0; + tags->kvm_used = 0; + tags->kvm = NULL; + return; + } + if (header_size != ENCODED_HEADER_SIZE) { + GPR_ASSERT(version != ENCODED_VERSION); + GPR_ASSERT(ENCODED_HEADER_SIZE < header_size); + buffer += (header_size - ENCODED_HEADER_SIZE); + } + tags->kvm_used = size - header_size; + tags->kvm_size = tags->kvm_used + CENSUS_MAX_TAG_KV_LEN; + tags->kvm = gpr_malloc(tags->kvm_size); + if (tag_header_size != TAG_HEADER_SIZE) { + // something new in the tag information. I don't understand it, so + // don't copy it over. + GPR_ASSERT(version != ENCODED_VERSION); + GPR_ASSERT(tag_header_size > TAG_HEADER_SIZE); + char *kvp = tags->kvm; + for (int i = 0; i < tags->ntags; i++) { + memcpy(kvp, buffer, TAG_HEADER_SIZE); + kvp += header_size; + struct raw_tag raw; + buffer = + decode_tag(&raw, (char *)buffer, tag_header_size - TAG_HEADER_SIZE); + memcpy(kvp, raw.key, (size_t)raw.key_len + raw.value_len); + kvp += raw.key_len + raw.value_len; + } + } else { + memcpy(tags->kvm, buffer, tags->kvm_used); + } +} + +census_context *census_context_decode(const char *buffer, size_t size, + const char *bin_buffer, size_t bin_size) { + census_context *context = gpr_malloc(sizeof(census_context)); + memset(&context->tags[LOCAL_TAGS], 0, sizeof(struct tag_set)); + if (buffer == NULL) { + memset(&context->tags[PROPAGATED_TAGS], 0, sizeof(struct tag_set)); + } else { + tag_set_decode(&context->tags[PROPAGATED_TAGS], buffer, size); + } + if (bin_buffer == NULL) { + memset(&context->tags[PROPAGATED_BINARY_TAGS], 0, sizeof(struct tag_set)); + } else { + tag_set_decode(&context->tags[PROPAGATED_BINARY_TAGS], bin_buffer, + bin_size); + } + memset(&context->status, 0, sizeof(context->status)); + context->status.n_propagated_tags = context->tags[PROPAGATED_TAGS].ntags; + context->status.n_propagated_binary_tags = + context->tags[PROPAGATED_BINARY_TAGS].ntags; + // TODO(aveitch): check that BINARY flag is correct for each type. + return context; +} diff --git a/src/core/census/placeholders.c b/src/core/census/placeholders.c index 5829cc94607..fe23d13971a 100644 --- a/src/core/census/placeholders.c +++ b/src/core/census/placeholders.c @@ -37,11 +37,6 @@ /* Placeholders for the pending APIs */ -census_tag_set *census_context_tag_set(census_context *context) { - (void)context; - abort(); -} - int census_get_trace_record(census_trace_record *trace_record) { (void)trace_record; abort(); @@ -73,7 +68,7 @@ const census_aggregation *census_view_aggregrations(const census_view *view) { abort(); } -census_view *census_view_create(uint32_t metric_id, const census_tag_set *tags, +census_view *census_view_create(uint32_t metric_id, const census_context *tags, const census_aggregation *aggregations, size_t naggregations) { (void)metric_id; @@ -83,7 +78,7 @@ census_view *census_view_create(uint32_t metric_id, const census_tag_set *tags, abort(); } -const census_tag_set *census_view_tags(const census_view *view) { +const census_context *census_view_tags(const census_view *view) { (void)view; abort(); } diff --git a/src/core/census/tag_set.c b/src/core/census/tag_set.c deleted file mode 100644 index 9b65a1dfa12..00000000000 --- a/src/core/census/tag_set.c +++ /dev/null @@ -1,535 +0,0 @@ -/* - * - * Copyright 2015-2016, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include "src/core/support/string.h" - -// Functions in this file support the public tag_set API, as well as -// encoding/decoding tag_sets as part of context propagation across -// RPC's. The overall requirements (in approximate priority order) for the -// tag_set representations: -// 1. Efficient conversion to/from wire format -// 2. Minimal bytes used on-wire -// 3. Efficient tag set creation -// 4. Efficient lookup of value for a key -// 5. Efficient lookup of value for an index (to support iteration) -// 6. Minimal memory footprint -// -// Notes on tradeoffs/decisions: -// * tag includes 1 byte length of key, as well as nil-terminating byte. These -// are to aid in efficient parsing and the ability to directly return key -// strings. This is more important than saving a single byte/tag on the wire. -// * The wire encoding uses only single byte values. This eliminates the need -// to handle endian-ness conversions. It also means there is a hard upper -// limit of 255 for both CENSUS_MAX_TAG_KV_LEN and CENSUS_MAX_PROPAGATED_TAGS. -// * Keep all tag information (keys/values/flags) in a single memory buffer, -// that can be directly copied to the wire.14 -// * Binary tags share the same structure as, but are encoded separately from, -// non-binary tags. This is primarily because non-binary tags are far more -// likely to be repeated across multiple RPC calls, so are more efficiently -// cached and compressed in any metadata schemes. -// * all lengths etc. are restricted to one byte. This eliminates endian -// issues. - -// Structure representing a set of tags. Essentially a count of number of tags -// present, and pointer to a chunk of memory that contains the per-tag details. -struct tag_set { - int ntags; // number of tags. - int ntags_alloc; // ntags + number of deleted tags (total number of tags - // in all of kvm). This will always be == ntags, except during the process - // of building a new tag set. - size_t kvm_size; // number of bytes allocated for key/value storage. - size_t kvm_used; // number of bytes of used key/value memory - char *kvm; // key/value memory. Consists of repeated entries of: - // Offset Size Description - // 0 1 Key length, including trailing 0. (K) - // 1 1 Value length. (V) - // 2 1 Flags - // 3 K Key bytes - // 3 + K V Value bytes - // - // We refer to the first 3 entries as the 'tag header'. If extra values are - // introduced in the header, you will need to modify the TAG_HEADER_SIZE - // constant, the raw_tag structure (and everything that uses it) and the - // encode/decode functions appropriately. -}; - -// Number of bytes in tag header. -#define TAG_HEADER_SIZE 3 // key length (1) + value length (1) + flags (1) -// Offsets to tag header entries. -#define KEY_LEN_OFFSET 0 -#define VALUE_LEN_OFFSET 1 -#define FLAG_OFFSET 2 - -// raw_tag represents the raw-storage form of a tag in the kvm of a tag_set. -struct raw_tag { - uint8_t key_len; - uint8_t value_len; - uint8_t flags; - char *key; - char *value; -}; - -// Use a reserved flag bit for indication of deleted tag. -#define CENSUS_TAG_DELETED CENSUS_TAG_RESERVED -#define CENSUS_TAG_IS_DELETED(flags) (flags & CENSUS_TAG_DELETED) - -// Primary (external) representation of a tag set. Composed of 3 underlying -// tag_set structs, one for each of the binary/printable propagated tags, and -// one for everything else. This is to efficiently support tag -// encoding/decoding. -struct census_tag_set { - struct tag_set tags[3]; - census_tag_set_create_status status; -}; - -// Indices into the tags member of census_tag_set -#define PROPAGATED_TAGS 0 -#define PROPAGATED_BINARY_TAGS 1 -#define LOCAL_TAGS 2 - -// Extract a raw tag given a pointer (raw) to the tag header. Allow for some -// extra bytes in the tag header (see encode/decode functions for usage: this -// allows for future expansion of the tag header). -static char *decode_tag(struct raw_tag *tag, char *header, int offset) { - tag->key_len = (uint8_t)(*header++); - tag->value_len = (uint8_t)(*header++); - tag->flags = (uint8_t)(*header++); - header += offset; - tag->key = header; - header += tag->key_len; - tag->value = header; - return header + tag->value_len; -} - -// Make a copy (in 'to') of an existing tag_set. -static void tag_set_copy(struct tag_set *to, const struct tag_set *from) { - memcpy(to, from, sizeof(struct tag_set)); - to->kvm = gpr_malloc(to->kvm_size); - memcpy(to->kvm, from->kvm, from->kvm_used); -} - -// Delete a tag from a tag_set, if it exists (returns true if it did). -static bool tag_set_delete_tag(struct tag_set *tags, const char *key, - size_t key_len) { - char *kvp = tags->kvm; - for (int i = 0; i < tags->ntags_alloc; i++) { - uint8_t *flags = (uint8_t *)(kvp + FLAG_OFFSET); - struct raw_tag tag; - kvp = decode_tag(&tag, kvp, 0); - if (CENSUS_TAG_IS_DELETED(tag.flags)) continue; - if ((key_len == tag.key_len) && (memcmp(key, tag.key, key_len) == 0)) { - *flags |= CENSUS_TAG_DELETED; - tags->ntags--; - return true; - } - } - return false; -} - -// Delete a tag from a census_tag_set, return true if it existed. -static bool cts_delete_tag(census_tag_set *tags, const census_tag *tag, - size_t key_len) { - return (tag_set_delete_tag(&tags->tags[LOCAL_TAGS], tag->key, key_len) || - tag_set_delete_tag(&tags->tags[PROPAGATED_TAGS], tag->key, key_len) || - tag_set_delete_tag(&tags->tags[PROPAGATED_BINARY_TAGS], tag->key, - key_len)); -} - -// Add a tag to a tag_set. Return true on sucess, false if the tag could -// not be added because of constraints on tag set size. This function should -// not be called if the tag may already exist (in a non-deleted state) in -// the tag_set, as that would result in two tags with the same key. -static bool tag_set_add_tag(struct tag_set *tags, const census_tag *tag, - size_t key_len) { - if (tags->ntags == CENSUS_MAX_PROPAGATED_TAGS) { - return false; - } - const size_t tag_size = key_len + tag->value_len + TAG_HEADER_SIZE; - if (tags->kvm_used + tag_size > tags->kvm_size) { - // allocate new memory if needed - tags->kvm_size += 2 * CENSUS_MAX_TAG_KV_LEN + TAG_HEADER_SIZE; - char *new_kvm = gpr_malloc(tags->kvm_size); - memcpy(new_kvm, tags->kvm, tags->kvm_used); - gpr_free(tags->kvm); - tags->kvm = new_kvm; - } - char *kvp = tags->kvm + tags->kvm_used; - *kvp++ = (char)key_len; - *kvp++ = (char)tag->value_len; - // ensure reserved flags are not used. - *kvp++ = (char)(tag->flags & (CENSUS_TAG_PROPAGATE | CENSUS_TAG_STATS | - CENSUS_TAG_BINARY)); - memcpy(kvp, tag->key, key_len); - kvp += key_len; - memcpy(kvp, tag->value, tag->value_len); - tags->kvm_used += tag_size; - tags->ntags++; - tags->ntags_alloc++; - return true; -} - -// Add/modify/delete a tag to/in a census_tag_set. Caller must validate that -// tag key etc. are valid. -static void cts_modify_tag(census_tag_set *tags, const census_tag *tag, - size_t key_len) { - // First delete the tag if it is already present. - bool deleted = cts_delete_tag(tags, tag, key_len); - // Determine if we need to add it back. - bool call_add = tag->value != NULL && tag->value_len != 0; - bool added = false; - if (call_add) { - if (CENSUS_TAG_IS_PROPAGATED(tag->flags)) { - if (CENSUS_TAG_IS_BINARY(tag->flags)) { - added = - tag_set_add_tag(&tags->tags[PROPAGATED_BINARY_TAGS], tag, key_len); - } else { - added = tag_set_add_tag(&tags->tags[PROPAGATED_TAGS], tag, key_len); - } - } else { - added = tag_set_add_tag(&tags->tags[LOCAL_TAGS], tag, key_len); - } - } - if (deleted) { - if (call_add) { - tags->status.n_modified_tags++; - } else { - tags->status.n_deleted_tags++; - } - } else { - if (added) { - tags->status.n_added_tags++; - } else { - tags->status.n_ignored_tags++; - } - } -} - -// Remove memory used for deleted tags from the tag set. Basic algorithm: -// 1) Walk through tag set to find first deleted tag. Record where it is. -// 2) Find the next not-deleted tag. Copy all of kvm from there to the end -// "over" the deleted tags -// 3) repeat #1 and #2 until we have seen all tags -// 4) if we are still looking for a not-deleted tag, then all the end portion -// of the kvm is deleted. Just reduce the used amount of memory by the -// appropriate amount. -static void tag_set_flatten(struct tag_set *tags) { - if (tags->ntags == tags->ntags_alloc) return; - bool found_deleted = false; // found a deleted tag. - char *kvp = tags->kvm; - char *dbase = NULL; // record location of deleted tag - for (int i = 0; i < tags->ntags_alloc; i++) { - struct raw_tag tag; - char *next_kvp = decode_tag(&tag, kvp, 0); - if (found_deleted) { - if (!CENSUS_TAG_IS_DELETED(tag.flags)) { - ptrdiff_t reduce = kvp - dbase; // #bytes in deleted tags - GPR_ASSERT(reduce > 0); - ptrdiff_t copy_size = tags->kvm + tags->kvm_used - kvp; - GPR_ASSERT(copy_size > 0); - memmove(dbase, kvp, (size_t)copy_size); - tags->kvm_used -= (size_t)reduce; - next_kvp -= reduce; - found_deleted = false; - } - } else { - if (CENSUS_TAG_IS_DELETED(tag.flags)) { - dbase = kvp; - found_deleted = true; - } - } - kvp = next_kvp; - } - if (found_deleted) { - GPR_ASSERT(dbase > tags->kvm); - tags->kvm_used = (size_t)(dbase - tags->kvm); - } - tags->ntags_alloc = tags->ntags; -} - -census_tag_set *census_tag_set_create( - const census_tag_set *base, const census_tag *tags, int ntags, - census_tag_set_create_status const **status) { - census_tag_set *new_ts = gpr_malloc(sizeof(census_tag_set)); - // If we are given a base, copy it into our new tag set. Otherwise set it - // to zero/NULL everything. - if (base == NULL) { - memset(new_ts, 0, sizeof(census_tag_set)); - } else { - tag_set_copy(&new_ts->tags[PROPAGATED_TAGS], &base->tags[PROPAGATED_TAGS]); - tag_set_copy(&new_ts->tags[PROPAGATED_BINARY_TAGS], - &base->tags[PROPAGATED_BINARY_TAGS]); - tag_set_copy(&new_ts->tags[LOCAL_TAGS], &base->tags[LOCAL_TAGS]); - memset(&new_ts->status, 0, sizeof(new_ts->status)); - } - // Walk over the additional tags and, for those that aren't invalid, modify - // the tag set to add/replace/delete as required. - for (int i = 0; i < ntags; i++) { - const census_tag *tag = &tags[i]; - size_t key_len = strlen(tag->key) + 1; - // ignore the tag if it is too long/short. - if (key_len != 1 && key_len <= CENSUS_MAX_TAG_KV_LEN && - tag->value_len <= CENSUS_MAX_TAG_KV_LEN) { - cts_modify_tag(new_ts, tag, key_len); - } else { - new_ts->status.n_invalid_tags++; - } - } - // Remove any deleted tags, update status if needed, and return. - tag_set_flatten(&new_ts->tags[PROPAGATED_TAGS]); - tag_set_flatten(&new_ts->tags[PROPAGATED_BINARY_TAGS]); - tag_set_flatten(&new_ts->tags[LOCAL_TAGS]); - new_ts->status.n_propagated_tags = new_ts->tags[PROPAGATED_TAGS].ntags; - new_ts->status.n_propagated_binary_tags = - new_ts->tags[PROPAGATED_BINARY_TAGS].ntags; - new_ts->status.n_local_tags = new_ts->tags[LOCAL_TAGS].ntags; - if (status) { - *status = &new_ts->status; - } - return new_ts; -} - -const census_tag_set_create_status *census_tag_set_get_create_status( - const census_tag_set *tags) { - return &tags->status; -} - -void census_tag_set_destroy(census_tag_set *tags) { - gpr_free(tags->tags[PROPAGATED_TAGS].kvm); - gpr_free(tags->tags[PROPAGATED_BINARY_TAGS].kvm); - gpr_free(tags->tags[LOCAL_TAGS].kvm); - gpr_free(tags); -} - -// Initialize a tag set iterator. Must be called before first use of the -// iterator. -void census_tag_set_initialize_iterator(const census_tag_set *tags, - census_tag_set_iterator *iterator) { - iterator->tags = tags; - iterator->index = 0; - if (tags->tags[PROPAGATED_TAGS].ntags != 0) { - iterator->base = PROPAGATED_TAGS; - iterator->kvm = tags->tags[PROPAGATED_TAGS].kvm; - } else if (tags->tags[PROPAGATED_BINARY_TAGS].ntags != 0) { - iterator->base = PROPAGATED_BINARY_TAGS; - iterator->kvm = tags->tags[PROPAGATED_BINARY_TAGS].kvm; - } else if (tags->tags[LOCAL_TAGS].ntags != 0) { - iterator->base = LOCAL_TAGS; - iterator->kvm = tags->tags[LOCAL_TAGS].kvm; - } else { - iterator->base = -1; - } -} - -// Get the contents of the "next" tag in the tag set. If there are no more -// tags in the tag set, returns 0 (and 'tag' contents will be unchanged), -// otherwise returns 1. */ -int census_tag_set_next_tag(census_tag_set_iterator *iterator, - census_tag *tag) { - if (iterator->base < 0) { - return 0; - } - struct raw_tag raw; - iterator->kvm = decode_tag(&raw, iterator->kvm, 0); - tag->key = raw.key; - tag->value = raw.value; - tag->value_len = raw.value_len; - tag->flags = raw.flags; - if (++iterator->index == iterator->tags->tags[iterator->base].ntags) { - do { - if (iterator->base == LOCAL_TAGS) { - iterator->base = -1; - return 1; - } - } while (iterator->tags->tags[++iterator->base].ntags == 0); - iterator->index = 0; - iterator->kvm = iterator->tags->tags[iterator->base].kvm; - } - return 1; -} - -// Find a tag in a tag_set by key. Return true if found, false otherwise. -static bool tag_set_get_tag_by_key(const struct tag_set *tags, const char *key, - size_t key_len, census_tag *tag) { - char *kvp = tags->kvm; - for (int i = 0; i < tags->ntags; i++) { - struct raw_tag raw; - kvp = decode_tag(&raw, kvp, 0); - if (key_len == raw.key_len && memcmp(raw.key, key, key_len) == 0) { - tag->key = raw.key; - tag->value = raw.value; - tag->value_len = raw.value_len; - tag->flags = raw.flags; - return true; - } - } - return false; -} - -int census_tag_set_get_tag_by_key(const census_tag_set *tags, const char *key, - census_tag *tag) { - size_t key_len = strlen(key) + 1; - if (key_len == 1) { - return 0; - } - if (tag_set_get_tag_by_key(&tags->tags[PROPAGATED_TAGS], key, key_len, tag) || - tag_set_get_tag_by_key(&tags->tags[PROPAGATED_BINARY_TAGS], key, key_len, - tag) || - tag_set_get_tag_by_key(&tags->tags[LOCAL_TAGS], key, key_len, tag)) { - return 1; - } - return 0; -} - -// tag_set encoding and decoding functions. -// -// Wire format for tag sets on the wire: -// -// First, a tag set header: -// -// offset bytes description -// 0 1 version number -// 1 1 number of bytes in this header. This allows for future -// expansion. -// 2 1 number of bytes in each tag header. -// 3 1 ntags value from tag set. -// -// This is followed by the key/value memory from struct tag_set. - -#define ENCODED_VERSION 0 // Version number -#define ENCODED_HEADER_SIZE 4 // size of tag set header - -// Encode a tag set. Returns 0 if buffer is too small. -static size_t tag_set_encode(const struct tag_set *tags, char *buffer, - size_t buf_size) { - if (buf_size < ENCODED_HEADER_SIZE + tags->kvm_used) { - return 0; - } - buf_size -= ENCODED_HEADER_SIZE; - *buffer++ = (char)ENCODED_VERSION; - *buffer++ = (char)ENCODED_HEADER_SIZE; - *buffer++ = (char)TAG_HEADER_SIZE; - *buffer++ = (char)tags->ntags; - if (tags->ntags == 0) { - return ENCODED_HEADER_SIZE; - } - memcpy(buffer, tags->kvm, tags->kvm_used); - return ENCODED_HEADER_SIZE + tags->kvm_used; -} - -char *census_tag_set_encode(const census_tag_set *tags, char *buffer, - size_t buf_size, size_t *print_buf_size, - size_t *bin_buf_size) { - *print_buf_size = - tag_set_encode(&tags->tags[PROPAGATED_TAGS], buffer, buf_size); - if (*print_buf_size == 0) { - return NULL; - } - char *b_buffer = buffer + *print_buf_size; - *bin_buf_size = tag_set_encode(&tags->tags[PROPAGATED_BINARY_TAGS], b_buffer, - buf_size - *print_buf_size); - if (*bin_buf_size == 0) { - return NULL; - } - return b_buffer; -} - -// Decode a tag set. -static void tag_set_decode(struct tag_set *tags, const char *buffer, - size_t size) { - uint8_t version = (uint8_t)(*buffer++); - uint8_t header_size = (uint8_t)(*buffer++); - uint8_t tag_header_size = (uint8_t)(*buffer++); - tags->ntags = tags->ntags_alloc = (int)(*buffer++); - if (tags->ntags == 0) { - tags->ntags_alloc = 0; - tags->kvm_size = 0; - tags->kvm_used = 0; - tags->kvm = NULL; - return; - } - if (header_size != ENCODED_HEADER_SIZE) { - GPR_ASSERT(version != ENCODED_VERSION); - GPR_ASSERT(ENCODED_HEADER_SIZE < header_size); - buffer += (header_size - ENCODED_HEADER_SIZE); - } - tags->kvm_used = size - header_size; - tags->kvm_size = tags->kvm_used + CENSUS_MAX_TAG_KV_LEN; - tags->kvm = gpr_malloc(tags->kvm_size); - if (tag_header_size != TAG_HEADER_SIZE) { - // something new in the tag information. I don't understand it, so - // don't copy it over. - GPR_ASSERT(version != ENCODED_VERSION); - GPR_ASSERT(tag_header_size > TAG_HEADER_SIZE); - char *kvp = tags->kvm; - for (int i = 0; i < tags->ntags; i++) { - memcpy(kvp, buffer, TAG_HEADER_SIZE); - kvp += header_size; - struct raw_tag raw; - buffer = - decode_tag(&raw, (char *)buffer, tag_header_size - TAG_HEADER_SIZE); - memcpy(kvp, raw.key, (size_t)raw.key_len + raw.value_len); - kvp += raw.key_len + raw.value_len; - } - } else { - memcpy(tags->kvm, buffer, tags->kvm_used); - } -} - -census_tag_set *census_tag_set_decode(const char *buffer, size_t size, - const char *bin_buffer, size_t bin_size) { - census_tag_set *new_ts = gpr_malloc(sizeof(census_tag_set)); - memset(&new_ts->tags[LOCAL_TAGS], 0, sizeof(struct tag_set)); - if (buffer == NULL) { - memset(&new_ts->tags[PROPAGATED_TAGS], 0, sizeof(struct tag_set)); - } else { - tag_set_decode(&new_ts->tags[PROPAGATED_TAGS], buffer, size); - } - if (bin_buffer == NULL) { - memset(&new_ts->tags[PROPAGATED_BINARY_TAGS], 0, sizeof(struct tag_set)); - } else { - tag_set_decode(&new_ts->tags[PROPAGATED_BINARY_TAGS], bin_buffer, bin_size); - } - memset(&new_ts->status, 0, sizeof(new_ts->status)); - new_ts->status.n_propagated_tags = new_ts->tags[PROPAGATED_TAGS].ntags; - new_ts->status.n_propagated_binary_tags = - new_ts->tags[PROPAGATED_BINARY_TAGS].ntags; - // TODO(aveitch): check that BINARY flag is correct for each type. - return new_ts; -} diff --git a/src/core/security/server_secure_chttp2.c b/src/core/security/server_secure_chttp2.c index 92daab9bf12..84a883390c2 100644 --- a/src/core/security/server_secure_chttp2.c +++ b/src/core/security/server_secure_chttp2.c @@ -241,7 +241,6 @@ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr, } grpc_resolved_addresses_destroy(resolved); - /* Register with the server only upon success */ grpc_server_add_listener(&exec_ctx, server, state, start, destroy); diff --git a/src/python/grpcio/commands.py b/src/python/grpcio/commands.py index 98ad2e571d8..27e95609d66 100644 --- a/src/python/grpcio/commands.py +++ b/src/python/grpcio/commands.py @@ -67,7 +67,7 @@ class CommandError(Exception): # TODO(atash): Remove this once PyPI has better Linux bdist support. See # https://bitbucket.org/pypa/pypi/issues/120/binary-wheels-for-linux-are-not-supported -def _get_linux_bdist_egg(decorated_basename, target_egg_basename): +def _get_grpc_custom_bdist_egg(decorated_basename, target_egg_basename): """Returns a string path to a .egg file for Linux to install. If we can retrieve a pre-compiled egg from online, uses it. Else, emits a @@ -100,6 +100,7 @@ def _get_linux_bdist_egg(decorated_basename, target_egg_basename): class EggNameMixin(object): + """Mixin for setuptools.Command classes to enable acquiring the egg name.""" def egg_name(self, with_custom): """ @@ -124,25 +125,25 @@ class Install(install.install, EggNameMixin): """ user_options = install.install.user_options + [ - # TODO(atash): remove this once manylinux gets on PyPI. See + # TODO(atash): remove this once PyPI has better Linux bdist support. See # https://bitbucket.org/pypa/pypi/issues/120/binary-wheels-for-linux-are-not-supported - ('use-linux-bdist', None, - 'Whether to retrieve a binary for Linux instead of building from ' - 'source.'), + ('use-grpc-custom-bdist', None, + 'Whether to retrieve a binary from the gRPC binary repository instead ' + 'of building from source.'), ] def initialize_options(self): install.install.initialize_options(self) - self.use_linux_bdist = False + self.use_grpc_custom_bdist = False def finalize_options(self): install.install.finalize_options(self) def run(self): - if self.use_linux_bdist: + if self.use_grpc_custom_bdist: try: - egg_path = _get_linux_bdist_egg(self.egg_name(True), - self.egg_name(False)) + egg_path = _get_grpc_custom_bdist_egg(self.egg_name(True), + self.egg_name(False)) except CommandError as error: sys.stderr.write( '\nWARNING: Failed to acquire grpcio prebuilt binary:\n' diff --git a/src/python/grpcio/grpc/_cython/.gitignore b/src/python/grpcio/grpc/_cython/.gitignore index c3150292885..306e3ad277f 100644 --- a/src/python/grpcio/grpc/_cython/.gitignore +++ b/src/python/grpcio/grpc/_cython/.gitignore @@ -1,5 +1,4 @@ -*.h -*.c +cygrpc.c *.a *.so *.dll diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi index 9b10d2ae75a..9d6e0170269 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi @@ -28,15 +28,20 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cimport libc.time -from libc.stdint cimport int64_t, uint32_t, int32_t -cdef extern from "grpc/support/alloc.h": +cdef extern from "grpc/_cython/loader.h": + + ctypedef int int32_t + ctypedef unsigned uint32_t + ctypedef long int64_t + + int pygrpc_load_core(const char*) + void *gpr_malloc(size_t size) void gpr_free(void *ptr) void *gpr_realloc(void *p, size_t size) -cdef extern from "grpc/support/slice.h": ctypedef struct gpr_slice: # don't worry about writing out the members of gpr_slice; we never access # them directly. @@ -55,9 +60,6 @@ cdef extern from "grpc/support/slice.h": void *gpr_slice_start_ptr "GPR_SLICE_START_PTR" (gpr_slice s) size_t gpr_slice_length "GPR_SLICE_LENGTH" (gpr_slice s) - -cdef extern from "grpc/support/time.h": - ctypedef enum gpr_clock_type: GPR_CLOCK_MONOTONIC GPR_CLOCK_REALTIME @@ -78,8 +80,6 @@ cdef extern from "grpc/support/time.h": gpr_timespec gpr_convert_clock_type(gpr_timespec t, gpr_clock_type target_clock) - -cdef extern from "grpc/status.h": ctypedef enum grpc_status_code: GRPC_STATUS_OK GRPC_STATUS_CANCELLED @@ -100,14 +100,10 @@ cdef extern from "grpc/status.h": GRPC_STATUS_DATA_LOSS GRPC_STATUS__DO_NOT_USE - -cdef extern from "grpc/byte_buffer_reader.h": struct grpc_byte_buffer_reader: # We don't care about the internals pass - -cdef extern from "grpc/byte_buffer.h": ctypedef struct grpc_byte_buffer: # We don't care about the internals. pass @@ -123,9 +119,6 @@ cdef extern from "grpc/byte_buffer.h": gpr_slice *slice) void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader *reader) - -cdef extern from "grpc/grpc.h": - const char *GRPC_ARG_PRIMARY_USER_AGENT_STRING const char *GRPC_ARG_ENABLE_CENSUS const char *GRPC_ARG_MAX_CONCURRENT_STREAMS @@ -333,9 +326,6 @@ cdef extern from "grpc/grpc.h": void grpc_server_cancel_all_calls(grpc_server *server) void grpc_server_destroy(grpc_server *server) - -cdef extern from "grpc/grpc_security.h": - ctypedef struct grpc_ssl_pem_key_cert_pair: const char *private_key const char *certificate_chain "cert_chain" diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi index d7ad9e5215b..9e14b967e0a 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi @@ -146,8 +146,13 @@ cdef class Timespec: gpr_convert_clock_type(self.c_time, GPR_CLOCK_REALTIME)) return real_time.seconds + real_time.nanoseconds / 1e9 - infinite_future = Timespec(float("+inf")) - infinite_past = Timespec(float("-inf")) + @staticmethod + def infinite_future(): + return Timespec(float("+inf")) + + @staticmethod + def infinite_past(): + return Timespec(float("-inf")) cdef class CallDetails: diff --git a/src/python/grpcio/grpc/_cython/cygrpc.pyx b/src/python/grpcio/grpc/_cython/cygrpc.pyx index 297c8001c5e..3967c3045f7 100644 --- a/src/python/grpcio/grpc/_cython/cygrpc.pyx +++ b/src/python/grpcio/grpc/_cython/cygrpc.pyx @@ -29,6 +29,9 @@ cimport cpython +import pkg_resources +import os.path + # TODO(atash): figure out why the coverage tool gets confused about the Cython # coverage plugin when the following files don't have a '.pxi' suffix. include "grpc/_cython/_cygrpc/call.pyx.pxi" @@ -44,11 +47,19 @@ include "grpc/_cython/_cygrpc/server.pyx.pxi" cdef class _ModuleState: + cdef bint is_loaded + def __cinit__(self): + filename = pkg_resources.resource_filename( + 'grpc._cython', '_windows/grpc_c.64.python') + if not pygrpc_load_core(filename): + raise ImportError('failed to load core gRPC library') grpc_init() + self.is_loaded = True def __dealloc__(self): - grpc_shutdown() + if self.is_loaded: + grpc_shutdown() _module_state = _ModuleState() diff --git a/src/python/grpcio/grpc/_cython/imports.generated.c b/src/python/grpcio/grpc/_cython/imports.generated.c new file mode 100644 index 00000000000..b818f3491bf --- /dev/null +++ b/src/python/grpcio/grpc/_cython/imports.generated.c @@ -0,0 +1,564 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include + +#include "imports.generated.h" + +#ifdef GPR_WIN32 + +census_initialize_type census_initialize_import; +census_shutdown_type census_shutdown_import; +census_supported_type census_supported_import; +census_enabled_type census_enabled_import; +census_context_serialize_type census_context_serialize_import; +census_trace_mask_type census_trace_mask_import; +census_set_trace_mask_type census_set_trace_mask_import; +census_start_rpc_op_timestamp_type census_start_rpc_op_timestamp_import; +census_start_client_rpc_op_type census_start_client_rpc_op_import; +census_set_rpc_client_peer_type census_set_rpc_client_peer_import; +census_start_server_rpc_op_type census_start_server_rpc_op_import; +census_start_op_type census_start_op_import; +census_end_op_type census_end_op_import; +census_trace_print_type census_trace_print_import; +census_trace_scan_start_type census_trace_scan_start_import; +census_get_trace_record_type census_get_trace_record_import; +census_trace_scan_end_type census_trace_scan_end_import; +census_tag_set_create_type census_tag_set_create_import; +census_tag_set_destroy_type census_tag_set_destroy_import; +census_tag_set_get_create_status_type census_tag_set_get_create_status_import; +census_tag_set_initialize_iterator_type census_tag_set_initialize_iterator_import; +census_tag_set_next_tag_type census_tag_set_next_tag_import; +census_tag_set_get_tag_by_key_type census_tag_set_get_tag_by_key_import; +census_tag_set_encode_type census_tag_set_encode_import; +census_tag_set_decode_type census_tag_set_decode_import; +census_context_tag_set_type census_context_tag_set_import; +census_record_values_type census_record_values_import; +census_view_create_type census_view_create_import; +census_view_delete_type census_view_delete_import; +census_view_metric_type census_view_metric_import; +census_view_naggregations_type census_view_naggregations_import; +census_view_tags_type census_view_tags_import; +census_view_aggregrations_type census_view_aggregrations_import; +census_view_get_data_type census_view_get_data_import; +census_view_reset_type census_view_reset_import; +grpc_compression_algorithm_parse_type grpc_compression_algorithm_parse_import; +grpc_compression_algorithm_name_type grpc_compression_algorithm_name_import; +grpc_compression_algorithm_for_level_type grpc_compression_algorithm_for_level_import; +grpc_compression_options_init_type grpc_compression_options_init_import; +grpc_compression_options_enable_algorithm_type grpc_compression_options_enable_algorithm_import; +grpc_compression_options_disable_algorithm_type grpc_compression_options_disable_algorithm_import; +grpc_compression_options_is_algorithm_enabled_type grpc_compression_options_is_algorithm_enabled_import; +grpc_metadata_array_init_type grpc_metadata_array_init_import; +grpc_metadata_array_destroy_type grpc_metadata_array_destroy_import; +grpc_call_details_init_type grpc_call_details_init_import; +grpc_call_details_destroy_type grpc_call_details_destroy_import; +grpc_register_plugin_type grpc_register_plugin_import; +grpc_init_type grpc_init_import; +grpc_shutdown_type grpc_shutdown_import; +grpc_version_string_type grpc_version_string_import; +grpc_completion_queue_create_type grpc_completion_queue_create_import; +grpc_completion_queue_next_type grpc_completion_queue_next_import; +grpc_completion_queue_pluck_type grpc_completion_queue_pluck_import; +grpc_completion_queue_shutdown_type grpc_completion_queue_shutdown_import; +grpc_completion_queue_destroy_type grpc_completion_queue_destroy_import; +grpc_alarm_create_type grpc_alarm_create_import; +grpc_alarm_cancel_type grpc_alarm_cancel_import; +grpc_alarm_destroy_type grpc_alarm_destroy_import; +grpc_channel_check_connectivity_state_type grpc_channel_check_connectivity_state_import; +grpc_channel_watch_connectivity_state_type grpc_channel_watch_connectivity_state_import; +grpc_channel_create_call_type grpc_channel_create_call_import; +grpc_channel_ping_type grpc_channel_ping_import; +grpc_channel_register_call_type grpc_channel_register_call_import; +grpc_channel_create_registered_call_type grpc_channel_create_registered_call_import; +grpc_call_start_batch_type grpc_call_start_batch_import; +grpc_call_get_peer_type grpc_call_get_peer_import; +grpc_census_call_set_context_type grpc_census_call_set_context_import; +grpc_census_call_get_context_type grpc_census_call_get_context_import; +grpc_channel_get_target_type grpc_channel_get_target_import; +grpc_insecure_channel_create_type grpc_insecure_channel_create_import; +grpc_lame_client_channel_create_type grpc_lame_client_channel_create_import; +grpc_channel_destroy_type grpc_channel_destroy_import; +grpc_call_cancel_type grpc_call_cancel_import; +grpc_call_cancel_with_status_type grpc_call_cancel_with_status_import; +grpc_call_destroy_type grpc_call_destroy_import; +grpc_server_request_call_type grpc_server_request_call_import; +grpc_server_register_method_type grpc_server_register_method_import; +grpc_server_request_registered_call_type grpc_server_request_registered_call_import; +grpc_server_create_type grpc_server_create_import; +grpc_server_register_completion_queue_type grpc_server_register_completion_queue_import; +grpc_server_add_insecure_http2_port_type grpc_server_add_insecure_http2_port_import; +grpc_server_start_type grpc_server_start_import; +grpc_server_shutdown_and_notify_type grpc_server_shutdown_and_notify_import; +grpc_server_cancel_all_calls_type grpc_server_cancel_all_calls_import; +grpc_server_destroy_type grpc_server_destroy_import; +grpc_tracer_set_enabled_type grpc_tracer_set_enabled_import; +grpc_header_key_is_legal_type grpc_header_key_is_legal_import; +grpc_header_nonbin_value_is_legal_type grpc_header_nonbin_value_is_legal_import; +grpc_is_binary_header_type grpc_is_binary_header_import; +grpc_auth_property_iterator_next_type grpc_auth_property_iterator_next_import; +grpc_auth_context_property_iterator_type grpc_auth_context_property_iterator_import; +grpc_auth_context_peer_identity_type grpc_auth_context_peer_identity_import; +grpc_auth_context_find_properties_by_name_type grpc_auth_context_find_properties_by_name_import; +grpc_auth_context_peer_identity_property_name_type grpc_auth_context_peer_identity_property_name_import; +grpc_auth_context_peer_is_authenticated_type grpc_auth_context_peer_is_authenticated_import; +grpc_call_auth_context_type grpc_call_auth_context_import; +grpc_auth_context_release_type grpc_auth_context_release_import; +grpc_auth_context_add_property_type grpc_auth_context_add_property_import; +grpc_auth_context_add_cstring_property_type grpc_auth_context_add_cstring_property_import; +grpc_auth_context_set_peer_identity_property_name_type grpc_auth_context_set_peer_identity_property_name_import; +grpc_channel_credentials_release_type grpc_channel_credentials_release_import; +grpc_google_default_credentials_create_type grpc_google_default_credentials_create_import; +grpc_ssl_credentials_create_type grpc_ssl_credentials_create_import; +grpc_call_credentials_release_type grpc_call_credentials_release_import; +grpc_composite_channel_credentials_create_type grpc_composite_channel_credentials_create_import; +grpc_composite_call_credentials_create_type grpc_composite_call_credentials_create_import; +grpc_google_compute_engine_credentials_create_type grpc_google_compute_engine_credentials_create_import; +grpc_max_auth_token_lifetime_type grpc_max_auth_token_lifetime_import; +grpc_service_account_jwt_access_credentials_create_type grpc_service_account_jwt_access_credentials_create_import; +grpc_google_refresh_token_credentials_create_type grpc_google_refresh_token_credentials_create_import; +grpc_access_token_credentials_create_type grpc_access_token_credentials_create_import; +grpc_google_iam_credentials_create_type grpc_google_iam_credentials_create_import; +grpc_metadata_credentials_create_from_plugin_type grpc_metadata_credentials_create_from_plugin_import; +grpc_secure_channel_create_type grpc_secure_channel_create_import; +grpc_server_credentials_release_type grpc_server_credentials_release_import; +grpc_ssl_server_credentials_create_type grpc_ssl_server_credentials_create_import; +grpc_server_add_secure_http2_port_type grpc_server_add_secure_http2_port_import; +grpc_call_set_credentials_type grpc_call_set_credentials_import; +grpc_server_credentials_set_auth_metadata_processor_type grpc_server_credentials_set_auth_metadata_processor_import; +gpr_malloc_type gpr_malloc_import; +gpr_free_type gpr_free_import; +gpr_realloc_type gpr_realloc_import; +gpr_malloc_aligned_type gpr_malloc_aligned_import; +gpr_free_aligned_type gpr_free_aligned_import; +gpr_set_allocation_functions_type gpr_set_allocation_functions_import; +gpr_get_allocation_functions_type gpr_get_allocation_functions_import; +grpc_raw_byte_buffer_create_type grpc_raw_byte_buffer_create_import; +grpc_raw_compressed_byte_buffer_create_type grpc_raw_compressed_byte_buffer_create_import; +grpc_byte_buffer_copy_type grpc_byte_buffer_copy_import; +grpc_byte_buffer_length_type grpc_byte_buffer_length_import; +grpc_byte_buffer_destroy_type grpc_byte_buffer_destroy_import; +grpc_byte_buffer_reader_init_type grpc_byte_buffer_reader_init_import; +grpc_byte_buffer_reader_destroy_type grpc_byte_buffer_reader_destroy_import; +grpc_byte_buffer_reader_next_type grpc_byte_buffer_reader_next_import; +grpc_byte_buffer_reader_readall_type grpc_byte_buffer_reader_readall_import; +grpc_raw_byte_buffer_from_reader_type grpc_raw_byte_buffer_from_reader_import; +gpr_log_type gpr_log_import; +gpr_log_message_type gpr_log_message_import; +gpr_set_log_function_type gpr_set_log_function_import; +gpr_slice_ref_type gpr_slice_ref_import; +gpr_slice_unref_type gpr_slice_unref_import; +gpr_slice_new_type gpr_slice_new_import; +gpr_slice_new_with_len_type gpr_slice_new_with_len_import; +gpr_slice_malloc_type gpr_slice_malloc_import; +gpr_slice_from_copied_string_type gpr_slice_from_copied_string_import; +gpr_slice_from_copied_buffer_type gpr_slice_from_copied_buffer_import; +gpr_slice_from_static_string_type gpr_slice_from_static_string_import; +gpr_slice_sub_type gpr_slice_sub_import; +gpr_slice_sub_no_ref_type gpr_slice_sub_no_ref_import; +gpr_slice_split_tail_type gpr_slice_split_tail_import; +gpr_slice_split_head_type gpr_slice_split_head_import; +gpr_empty_slice_type gpr_empty_slice_import; +gpr_slice_cmp_type gpr_slice_cmp_import; +gpr_slice_str_cmp_type gpr_slice_str_cmp_import; +gpr_slice_buffer_init_type gpr_slice_buffer_init_import; +gpr_slice_buffer_destroy_type gpr_slice_buffer_destroy_import; +gpr_slice_buffer_add_type gpr_slice_buffer_add_import; +gpr_slice_buffer_add_indexed_type gpr_slice_buffer_add_indexed_import; +gpr_slice_buffer_addn_type gpr_slice_buffer_addn_import; +gpr_slice_buffer_tiny_add_type gpr_slice_buffer_tiny_add_import; +gpr_slice_buffer_pop_type gpr_slice_buffer_pop_import; +gpr_slice_buffer_reset_and_unref_type gpr_slice_buffer_reset_and_unref_import; +gpr_slice_buffer_swap_type gpr_slice_buffer_swap_import; +gpr_slice_buffer_move_into_type gpr_slice_buffer_move_into_import; +gpr_slice_buffer_trim_end_type gpr_slice_buffer_trim_end_import; +gpr_slice_buffer_move_first_type gpr_slice_buffer_move_first_import; +gpr_slice_buffer_take_first_type gpr_slice_buffer_take_first_import; +gpr_mu_init_type gpr_mu_init_import; +gpr_mu_destroy_type gpr_mu_destroy_import; +gpr_mu_lock_type gpr_mu_lock_import; +gpr_mu_unlock_type gpr_mu_unlock_import; +gpr_mu_trylock_type gpr_mu_trylock_import; +gpr_cv_init_type gpr_cv_init_import; +gpr_cv_destroy_type gpr_cv_destroy_import; +gpr_cv_wait_type gpr_cv_wait_import; +gpr_cv_signal_type gpr_cv_signal_import; +gpr_cv_broadcast_type gpr_cv_broadcast_import; +gpr_once_init_type gpr_once_init_import; +gpr_event_init_type gpr_event_init_import; +gpr_event_set_type gpr_event_set_import; +gpr_event_get_type gpr_event_get_import; +gpr_event_wait_type gpr_event_wait_import; +gpr_ref_init_type gpr_ref_init_import; +gpr_ref_type gpr_ref_import; +gpr_refn_type gpr_refn_import; +gpr_unref_type gpr_unref_import; +gpr_stats_init_type gpr_stats_init_import; +gpr_stats_inc_type gpr_stats_inc_import; +gpr_stats_read_type gpr_stats_read_import; +gpr_time_0_type gpr_time_0_import; +gpr_inf_future_type gpr_inf_future_import; +gpr_inf_past_type gpr_inf_past_import; +gpr_time_init_type gpr_time_init_import; +gpr_now_type gpr_now_import; +gpr_convert_clock_type_type gpr_convert_clock_type_import; +gpr_time_cmp_type gpr_time_cmp_import; +gpr_time_max_type gpr_time_max_import; +gpr_time_min_type gpr_time_min_import; +gpr_time_add_type gpr_time_add_import; +gpr_time_sub_type gpr_time_sub_import; +gpr_time_from_micros_type gpr_time_from_micros_import; +gpr_time_from_nanos_type gpr_time_from_nanos_import; +gpr_time_from_millis_type gpr_time_from_millis_import; +gpr_time_from_seconds_type gpr_time_from_seconds_import; +gpr_time_from_minutes_type gpr_time_from_minutes_import; +gpr_time_from_hours_type gpr_time_from_hours_import; +gpr_time_to_millis_type gpr_time_to_millis_import; +gpr_time_similar_type gpr_time_similar_import; +gpr_sleep_until_type gpr_sleep_until_import; +gpr_timespec_to_micros_type gpr_timespec_to_micros_import; +gpr_avl_create_type gpr_avl_create_import; +gpr_avl_ref_type gpr_avl_ref_import; +gpr_avl_unref_type gpr_avl_unref_import; +gpr_avl_add_type gpr_avl_add_import; +gpr_avl_remove_type gpr_avl_remove_import; +gpr_avl_get_type gpr_avl_get_import; +gpr_cmdline_create_type gpr_cmdline_create_import; +gpr_cmdline_add_int_type gpr_cmdline_add_int_import; +gpr_cmdline_add_flag_type gpr_cmdline_add_flag_import; +gpr_cmdline_add_string_type gpr_cmdline_add_string_import; +gpr_cmdline_on_extra_arg_type gpr_cmdline_on_extra_arg_import; +gpr_cmdline_set_survive_failure_type gpr_cmdline_set_survive_failure_import; +gpr_cmdline_parse_type gpr_cmdline_parse_import; +gpr_cmdline_destroy_type gpr_cmdline_destroy_import; +gpr_cmdline_usage_string_type gpr_cmdline_usage_string_import; +gpr_cpu_num_cores_type gpr_cpu_num_cores_import; +gpr_cpu_current_cpu_type gpr_cpu_current_cpu_import; +gpr_histogram_create_type gpr_histogram_create_import; +gpr_histogram_destroy_type gpr_histogram_destroy_import; +gpr_histogram_add_type gpr_histogram_add_import; +gpr_histogram_merge_type gpr_histogram_merge_import; +gpr_histogram_percentile_type gpr_histogram_percentile_import; +gpr_histogram_mean_type gpr_histogram_mean_import; +gpr_histogram_stddev_type gpr_histogram_stddev_import; +gpr_histogram_variance_type gpr_histogram_variance_import; +gpr_histogram_maximum_type gpr_histogram_maximum_import; +gpr_histogram_minimum_type gpr_histogram_minimum_import; +gpr_histogram_count_type gpr_histogram_count_import; +gpr_histogram_sum_type gpr_histogram_sum_import; +gpr_histogram_sum_of_squares_type gpr_histogram_sum_of_squares_import; +gpr_histogram_get_contents_type gpr_histogram_get_contents_import; +gpr_histogram_merge_contents_type gpr_histogram_merge_contents_import; +gpr_join_host_port_type gpr_join_host_port_import; +gpr_split_host_port_type gpr_split_host_port_import; +gpr_format_message_type gpr_format_message_import; +gpr_strdup_type gpr_strdup_import; +gpr_asprintf_type gpr_asprintf_import; +gpr_subprocess_binary_extension_type gpr_subprocess_binary_extension_import; +gpr_subprocess_create_type gpr_subprocess_create_import; +gpr_subprocess_destroy_type gpr_subprocess_destroy_import; +gpr_subprocess_join_type gpr_subprocess_join_import; +gpr_subprocess_interrupt_type gpr_subprocess_interrupt_import; +gpr_thd_new_type gpr_thd_new_import; +gpr_thd_options_default_type gpr_thd_options_default_import; +gpr_thd_options_set_detached_type gpr_thd_options_set_detached_import; +gpr_thd_options_set_joinable_type gpr_thd_options_set_joinable_import; +gpr_thd_options_is_detached_type gpr_thd_options_is_detached_import; +gpr_thd_options_is_joinable_type gpr_thd_options_is_joinable_import; +gpr_thd_currentid_type gpr_thd_currentid_import; +gpr_thd_join_type gpr_thd_join_import; + +void pygrpc_load_imports(HMODULE library) { + census_initialize_import = (census_initialize_type) GetProcAddress(library, "census_initialize"); + census_shutdown_import = (census_shutdown_type) GetProcAddress(library, "census_shutdown"); + census_supported_import = (census_supported_type) GetProcAddress(library, "census_supported"); + census_enabled_import = (census_enabled_type) GetProcAddress(library, "census_enabled"); + census_context_serialize_import = (census_context_serialize_type) GetProcAddress(library, "census_context_serialize"); + census_trace_mask_import = (census_trace_mask_type) GetProcAddress(library, "census_trace_mask"); + census_set_trace_mask_import = (census_set_trace_mask_type) GetProcAddress(library, "census_set_trace_mask"); + census_start_rpc_op_timestamp_import = (census_start_rpc_op_timestamp_type) GetProcAddress(library, "census_start_rpc_op_timestamp"); + census_start_client_rpc_op_import = (census_start_client_rpc_op_type) GetProcAddress(library, "census_start_client_rpc_op"); + census_set_rpc_client_peer_import = (census_set_rpc_client_peer_type) GetProcAddress(library, "census_set_rpc_client_peer"); + census_start_server_rpc_op_import = (census_start_server_rpc_op_type) GetProcAddress(library, "census_start_server_rpc_op"); + census_start_op_import = (census_start_op_type) GetProcAddress(library, "census_start_op"); + census_end_op_import = (census_end_op_type) GetProcAddress(library, "census_end_op"); + census_trace_print_import = (census_trace_print_type) GetProcAddress(library, "census_trace_print"); + census_trace_scan_start_import = (census_trace_scan_start_type) GetProcAddress(library, "census_trace_scan_start"); + census_get_trace_record_import = (census_get_trace_record_type) GetProcAddress(library, "census_get_trace_record"); + census_trace_scan_end_import = (census_trace_scan_end_type) GetProcAddress(library, "census_trace_scan_end"); + census_tag_set_create_import = (census_tag_set_create_type) GetProcAddress(library, "census_tag_set_create"); + census_tag_set_destroy_import = (census_tag_set_destroy_type) GetProcAddress(library, "census_tag_set_destroy"); + census_tag_set_get_create_status_import = (census_tag_set_get_create_status_type) GetProcAddress(library, "census_tag_set_get_create_status"); + census_tag_set_initialize_iterator_import = (census_tag_set_initialize_iterator_type) GetProcAddress(library, "census_tag_set_initialize_iterator"); + census_tag_set_next_tag_import = (census_tag_set_next_tag_type) GetProcAddress(library, "census_tag_set_next_tag"); + census_tag_set_get_tag_by_key_import = (census_tag_set_get_tag_by_key_type) GetProcAddress(library, "census_tag_set_get_tag_by_key"); + census_tag_set_encode_import = (census_tag_set_encode_type) GetProcAddress(library, "census_tag_set_encode"); + census_tag_set_decode_import = (census_tag_set_decode_type) GetProcAddress(library, "census_tag_set_decode"); + census_context_tag_set_import = (census_context_tag_set_type) GetProcAddress(library, "census_context_tag_set"); + census_record_values_import = (census_record_values_type) GetProcAddress(library, "census_record_values"); + census_view_create_import = (census_view_create_type) GetProcAddress(library, "census_view_create"); + census_view_delete_import = (census_view_delete_type) GetProcAddress(library, "census_view_delete"); + census_view_metric_import = (census_view_metric_type) GetProcAddress(library, "census_view_metric"); + census_view_naggregations_import = (census_view_naggregations_type) GetProcAddress(library, "census_view_naggregations"); + census_view_tags_import = (census_view_tags_type) GetProcAddress(library, "census_view_tags"); + census_view_aggregrations_import = (census_view_aggregrations_type) GetProcAddress(library, "census_view_aggregrations"); + census_view_get_data_import = (census_view_get_data_type) GetProcAddress(library, "census_view_get_data"); + census_view_reset_import = (census_view_reset_type) GetProcAddress(library, "census_view_reset"); + grpc_compression_algorithm_parse_import = (grpc_compression_algorithm_parse_type) GetProcAddress(library, "grpc_compression_algorithm_parse"); + grpc_compression_algorithm_name_import = (grpc_compression_algorithm_name_type) GetProcAddress(library, "grpc_compression_algorithm_name"); + grpc_compression_algorithm_for_level_import = (grpc_compression_algorithm_for_level_type) GetProcAddress(library, "grpc_compression_algorithm_for_level"); + grpc_compression_options_init_import = (grpc_compression_options_init_type) GetProcAddress(library, "grpc_compression_options_init"); + grpc_compression_options_enable_algorithm_import = (grpc_compression_options_enable_algorithm_type) GetProcAddress(library, "grpc_compression_options_enable_algorithm"); + grpc_compression_options_disable_algorithm_import = (grpc_compression_options_disable_algorithm_type) GetProcAddress(library, "grpc_compression_options_disable_algorithm"); + grpc_compression_options_is_algorithm_enabled_import = (grpc_compression_options_is_algorithm_enabled_type) GetProcAddress(library, "grpc_compression_options_is_algorithm_enabled"); + grpc_metadata_array_init_import = (grpc_metadata_array_init_type) GetProcAddress(library, "grpc_metadata_array_init"); + grpc_metadata_array_destroy_import = (grpc_metadata_array_destroy_type) GetProcAddress(library, "grpc_metadata_array_destroy"); + grpc_call_details_init_import = (grpc_call_details_init_type) GetProcAddress(library, "grpc_call_details_init"); + grpc_call_details_destroy_import = (grpc_call_details_destroy_type) GetProcAddress(library, "grpc_call_details_destroy"); + grpc_register_plugin_import = (grpc_register_plugin_type) GetProcAddress(library, "grpc_register_plugin"); + grpc_init_import = (grpc_init_type) GetProcAddress(library, "grpc_init"); + grpc_shutdown_import = (grpc_shutdown_type) GetProcAddress(library, "grpc_shutdown"); + grpc_version_string_import = (grpc_version_string_type) GetProcAddress(library, "grpc_version_string"); + grpc_completion_queue_create_import = (grpc_completion_queue_create_type) GetProcAddress(library, "grpc_completion_queue_create"); + grpc_completion_queue_next_import = (grpc_completion_queue_next_type) GetProcAddress(library, "grpc_completion_queue_next"); + grpc_completion_queue_pluck_import = (grpc_completion_queue_pluck_type) GetProcAddress(library, "grpc_completion_queue_pluck"); + grpc_completion_queue_shutdown_import = (grpc_completion_queue_shutdown_type) GetProcAddress(library, "grpc_completion_queue_shutdown"); + grpc_completion_queue_destroy_import = (grpc_completion_queue_destroy_type) GetProcAddress(library, "grpc_completion_queue_destroy"); + grpc_alarm_create_import = (grpc_alarm_create_type) GetProcAddress(library, "grpc_alarm_create"); + grpc_alarm_cancel_import = (grpc_alarm_cancel_type) GetProcAddress(library, "grpc_alarm_cancel"); + grpc_alarm_destroy_import = (grpc_alarm_destroy_type) GetProcAddress(library, "grpc_alarm_destroy"); + grpc_channel_check_connectivity_state_import = (grpc_channel_check_connectivity_state_type) GetProcAddress(library, "grpc_channel_check_connectivity_state"); + grpc_channel_watch_connectivity_state_import = (grpc_channel_watch_connectivity_state_type) GetProcAddress(library, "grpc_channel_watch_connectivity_state"); + grpc_channel_create_call_import = (grpc_channel_create_call_type) GetProcAddress(library, "grpc_channel_create_call"); + grpc_channel_ping_import = (grpc_channel_ping_type) GetProcAddress(library, "grpc_channel_ping"); + grpc_channel_register_call_import = (grpc_channel_register_call_type) GetProcAddress(library, "grpc_channel_register_call"); + grpc_channel_create_registered_call_import = (grpc_channel_create_registered_call_type) GetProcAddress(library, "grpc_channel_create_registered_call"); + grpc_call_start_batch_import = (grpc_call_start_batch_type) GetProcAddress(library, "grpc_call_start_batch"); + grpc_call_get_peer_import = (grpc_call_get_peer_type) GetProcAddress(library, "grpc_call_get_peer"); + grpc_census_call_set_context_import = (grpc_census_call_set_context_type) GetProcAddress(library, "grpc_census_call_set_context"); + grpc_census_call_get_context_import = (grpc_census_call_get_context_type) GetProcAddress(library, "grpc_census_call_get_context"); + grpc_channel_get_target_import = (grpc_channel_get_target_type) GetProcAddress(library, "grpc_channel_get_target"); + grpc_insecure_channel_create_import = (grpc_insecure_channel_create_type) GetProcAddress(library, "grpc_insecure_channel_create"); + grpc_lame_client_channel_create_import = (grpc_lame_client_channel_create_type) GetProcAddress(library, "grpc_lame_client_channel_create"); + grpc_channel_destroy_import = (grpc_channel_destroy_type) GetProcAddress(library, "grpc_channel_destroy"); + grpc_call_cancel_import = (grpc_call_cancel_type) GetProcAddress(library, "grpc_call_cancel"); + grpc_call_cancel_with_status_import = (grpc_call_cancel_with_status_type) GetProcAddress(library, "grpc_call_cancel_with_status"); + grpc_call_destroy_import = (grpc_call_destroy_type) GetProcAddress(library, "grpc_call_destroy"); + grpc_server_request_call_import = (grpc_server_request_call_type) GetProcAddress(library, "grpc_server_request_call"); + grpc_server_register_method_import = (grpc_server_register_method_type) GetProcAddress(library, "grpc_server_register_method"); + grpc_server_request_registered_call_import = (grpc_server_request_registered_call_type) GetProcAddress(library, "grpc_server_request_registered_call"); + grpc_server_create_import = (grpc_server_create_type) GetProcAddress(library, "grpc_server_create"); + grpc_server_register_completion_queue_import = (grpc_server_register_completion_queue_type) GetProcAddress(library, "grpc_server_register_completion_queue"); + grpc_server_add_insecure_http2_port_import = (grpc_server_add_insecure_http2_port_type) GetProcAddress(library, "grpc_server_add_insecure_http2_port"); + grpc_server_start_import = (grpc_server_start_type) GetProcAddress(library, "grpc_server_start"); + grpc_server_shutdown_and_notify_import = (grpc_server_shutdown_and_notify_type) GetProcAddress(library, "grpc_server_shutdown_and_notify"); + grpc_server_cancel_all_calls_import = (grpc_server_cancel_all_calls_type) GetProcAddress(library, "grpc_server_cancel_all_calls"); + grpc_server_destroy_import = (grpc_server_destroy_type) GetProcAddress(library, "grpc_server_destroy"); + grpc_tracer_set_enabled_import = (grpc_tracer_set_enabled_type) GetProcAddress(library, "grpc_tracer_set_enabled"); + grpc_header_key_is_legal_import = (grpc_header_key_is_legal_type) GetProcAddress(library, "grpc_header_key_is_legal"); + grpc_header_nonbin_value_is_legal_import = (grpc_header_nonbin_value_is_legal_type) GetProcAddress(library, "grpc_header_nonbin_value_is_legal"); + grpc_is_binary_header_import = (grpc_is_binary_header_type) GetProcAddress(library, "grpc_is_binary_header"); + grpc_auth_property_iterator_next_import = (grpc_auth_property_iterator_next_type) GetProcAddress(library, "grpc_auth_property_iterator_next"); + grpc_auth_context_property_iterator_import = (grpc_auth_context_property_iterator_type) GetProcAddress(library, "grpc_auth_context_property_iterator"); + grpc_auth_context_peer_identity_import = (grpc_auth_context_peer_identity_type) GetProcAddress(library, "grpc_auth_context_peer_identity"); + grpc_auth_context_find_properties_by_name_import = (grpc_auth_context_find_properties_by_name_type) GetProcAddress(library, "grpc_auth_context_find_properties_by_name"); + grpc_auth_context_peer_identity_property_name_import = (grpc_auth_context_peer_identity_property_name_type) GetProcAddress(library, "grpc_auth_context_peer_identity_property_name"); + grpc_auth_context_peer_is_authenticated_import = (grpc_auth_context_peer_is_authenticated_type) GetProcAddress(library, "grpc_auth_context_peer_is_authenticated"); + grpc_call_auth_context_import = (grpc_call_auth_context_type) GetProcAddress(library, "grpc_call_auth_context"); + grpc_auth_context_release_import = (grpc_auth_context_release_type) GetProcAddress(library, "grpc_auth_context_release"); + grpc_auth_context_add_property_import = (grpc_auth_context_add_property_type) GetProcAddress(library, "grpc_auth_context_add_property"); + grpc_auth_context_add_cstring_property_import = (grpc_auth_context_add_cstring_property_type) GetProcAddress(library, "grpc_auth_context_add_cstring_property"); + grpc_auth_context_set_peer_identity_property_name_import = (grpc_auth_context_set_peer_identity_property_name_type) GetProcAddress(library, "grpc_auth_context_set_peer_identity_property_name"); + grpc_channel_credentials_release_import = (grpc_channel_credentials_release_type) GetProcAddress(library, "grpc_channel_credentials_release"); + grpc_google_default_credentials_create_import = (grpc_google_default_credentials_create_type) GetProcAddress(library, "grpc_google_default_credentials_create"); + grpc_ssl_credentials_create_import = (grpc_ssl_credentials_create_type) GetProcAddress(library, "grpc_ssl_credentials_create"); + grpc_call_credentials_release_import = (grpc_call_credentials_release_type) GetProcAddress(library, "grpc_call_credentials_release"); + grpc_composite_channel_credentials_create_import = (grpc_composite_channel_credentials_create_type) GetProcAddress(library, "grpc_composite_channel_credentials_create"); + grpc_composite_call_credentials_create_import = (grpc_composite_call_credentials_create_type) GetProcAddress(library, "grpc_composite_call_credentials_create"); + grpc_google_compute_engine_credentials_create_import = (grpc_google_compute_engine_credentials_create_type) GetProcAddress(library, "grpc_google_compute_engine_credentials_create"); + grpc_max_auth_token_lifetime_import = (grpc_max_auth_token_lifetime_type) GetProcAddress(library, "grpc_max_auth_token_lifetime"); + grpc_service_account_jwt_access_credentials_create_import = (grpc_service_account_jwt_access_credentials_create_type) GetProcAddress(library, "grpc_service_account_jwt_access_credentials_create"); + grpc_google_refresh_token_credentials_create_import = (grpc_google_refresh_token_credentials_create_type) GetProcAddress(library, "grpc_google_refresh_token_credentials_create"); + grpc_access_token_credentials_create_import = (grpc_access_token_credentials_create_type) GetProcAddress(library, "grpc_access_token_credentials_create"); + grpc_google_iam_credentials_create_import = (grpc_google_iam_credentials_create_type) GetProcAddress(library, "grpc_google_iam_credentials_create"); + grpc_metadata_credentials_create_from_plugin_import = (grpc_metadata_credentials_create_from_plugin_type) GetProcAddress(library, "grpc_metadata_credentials_create_from_plugin"); + grpc_secure_channel_create_import = (grpc_secure_channel_create_type) GetProcAddress(library, "grpc_secure_channel_create"); + grpc_server_credentials_release_import = (grpc_server_credentials_release_type) GetProcAddress(library, "grpc_server_credentials_release"); + grpc_ssl_server_credentials_create_import = (grpc_ssl_server_credentials_create_type) GetProcAddress(library, "grpc_ssl_server_credentials_create"); + grpc_server_add_secure_http2_port_import = (grpc_server_add_secure_http2_port_type) GetProcAddress(library, "grpc_server_add_secure_http2_port"); + grpc_call_set_credentials_import = (grpc_call_set_credentials_type) GetProcAddress(library, "grpc_call_set_credentials"); + grpc_server_credentials_set_auth_metadata_processor_import = (grpc_server_credentials_set_auth_metadata_processor_type) GetProcAddress(library, "grpc_server_credentials_set_auth_metadata_processor"); + gpr_malloc_import = (gpr_malloc_type) GetProcAddress(library, "gpr_malloc"); + gpr_free_import = (gpr_free_type) GetProcAddress(library, "gpr_free"); + gpr_realloc_import = (gpr_realloc_type) GetProcAddress(library, "gpr_realloc"); + gpr_malloc_aligned_import = (gpr_malloc_aligned_type) GetProcAddress(library, "gpr_malloc_aligned"); + gpr_free_aligned_import = (gpr_free_aligned_type) GetProcAddress(library, "gpr_free_aligned"); + gpr_set_allocation_functions_import = (gpr_set_allocation_functions_type) GetProcAddress(library, "gpr_set_allocation_functions"); + gpr_get_allocation_functions_import = (gpr_get_allocation_functions_type) GetProcAddress(library, "gpr_get_allocation_functions"); + grpc_raw_byte_buffer_create_import = (grpc_raw_byte_buffer_create_type) GetProcAddress(library, "grpc_raw_byte_buffer_create"); + grpc_raw_compressed_byte_buffer_create_import = (grpc_raw_compressed_byte_buffer_create_type) GetProcAddress(library, "grpc_raw_compressed_byte_buffer_create"); + grpc_byte_buffer_copy_import = (grpc_byte_buffer_copy_type) GetProcAddress(library, "grpc_byte_buffer_copy"); + grpc_byte_buffer_length_import = (grpc_byte_buffer_length_type) GetProcAddress(library, "grpc_byte_buffer_length"); + grpc_byte_buffer_destroy_import = (grpc_byte_buffer_destroy_type) GetProcAddress(library, "grpc_byte_buffer_destroy"); + grpc_byte_buffer_reader_init_import = (grpc_byte_buffer_reader_init_type) GetProcAddress(library, "grpc_byte_buffer_reader_init"); + grpc_byte_buffer_reader_destroy_import = (grpc_byte_buffer_reader_destroy_type) GetProcAddress(library, "grpc_byte_buffer_reader_destroy"); + grpc_byte_buffer_reader_next_import = (grpc_byte_buffer_reader_next_type) GetProcAddress(library, "grpc_byte_buffer_reader_next"); + grpc_byte_buffer_reader_readall_import = (grpc_byte_buffer_reader_readall_type) GetProcAddress(library, "grpc_byte_buffer_reader_readall"); + grpc_raw_byte_buffer_from_reader_import = (grpc_raw_byte_buffer_from_reader_type) GetProcAddress(library, "grpc_raw_byte_buffer_from_reader"); + gpr_log_import = (gpr_log_type) GetProcAddress(library, "gpr_log"); + gpr_log_message_import = (gpr_log_message_type) GetProcAddress(library, "gpr_log_message"); + gpr_set_log_function_import = (gpr_set_log_function_type) GetProcAddress(library, "gpr_set_log_function"); + gpr_slice_ref_import = (gpr_slice_ref_type) GetProcAddress(library, "gpr_slice_ref"); + gpr_slice_unref_import = (gpr_slice_unref_type) GetProcAddress(library, "gpr_slice_unref"); + gpr_slice_new_import = (gpr_slice_new_type) GetProcAddress(library, "gpr_slice_new"); + gpr_slice_new_with_len_import = (gpr_slice_new_with_len_type) GetProcAddress(library, "gpr_slice_new_with_len"); + gpr_slice_malloc_import = (gpr_slice_malloc_type) GetProcAddress(library, "gpr_slice_malloc"); + gpr_slice_from_copied_string_import = (gpr_slice_from_copied_string_type) GetProcAddress(library, "gpr_slice_from_copied_string"); + gpr_slice_from_copied_buffer_import = (gpr_slice_from_copied_buffer_type) GetProcAddress(library, "gpr_slice_from_copied_buffer"); + gpr_slice_from_static_string_import = (gpr_slice_from_static_string_type) GetProcAddress(library, "gpr_slice_from_static_string"); + gpr_slice_sub_import = (gpr_slice_sub_type) GetProcAddress(library, "gpr_slice_sub"); + gpr_slice_sub_no_ref_import = (gpr_slice_sub_no_ref_type) GetProcAddress(library, "gpr_slice_sub_no_ref"); + gpr_slice_split_tail_import = (gpr_slice_split_tail_type) GetProcAddress(library, "gpr_slice_split_tail"); + gpr_slice_split_head_import = (gpr_slice_split_head_type) GetProcAddress(library, "gpr_slice_split_head"); + gpr_empty_slice_import = (gpr_empty_slice_type) GetProcAddress(library, "gpr_empty_slice"); + gpr_slice_cmp_import = (gpr_slice_cmp_type) GetProcAddress(library, "gpr_slice_cmp"); + gpr_slice_str_cmp_import = (gpr_slice_str_cmp_type) GetProcAddress(library, "gpr_slice_str_cmp"); + gpr_slice_buffer_init_import = (gpr_slice_buffer_init_type) GetProcAddress(library, "gpr_slice_buffer_init"); + gpr_slice_buffer_destroy_import = (gpr_slice_buffer_destroy_type) GetProcAddress(library, "gpr_slice_buffer_destroy"); + gpr_slice_buffer_add_import = (gpr_slice_buffer_add_type) GetProcAddress(library, "gpr_slice_buffer_add"); + gpr_slice_buffer_add_indexed_import = (gpr_slice_buffer_add_indexed_type) GetProcAddress(library, "gpr_slice_buffer_add_indexed"); + gpr_slice_buffer_addn_import = (gpr_slice_buffer_addn_type) GetProcAddress(library, "gpr_slice_buffer_addn"); + gpr_slice_buffer_tiny_add_import = (gpr_slice_buffer_tiny_add_type) GetProcAddress(library, "gpr_slice_buffer_tiny_add"); + gpr_slice_buffer_pop_import = (gpr_slice_buffer_pop_type) GetProcAddress(library, "gpr_slice_buffer_pop"); + gpr_slice_buffer_reset_and_unref_import = (gpr_slice_buffer_reset_and_unref_type) GetProcAddress(library, "gpr_slice_buffer_reset_and_unref"); + gpr_slice_buffer_swap_import = (gpr_slice_buffer_swap_type) GetProcAddress(library, "gpr_slice_buffer_swap"); + gpr_slice_buffer_move_into_import = (gpr_slice_buffer_move_into_type) GetProcAddress(library, "gpr_slice_buffer_move_into"); + gpr_slice_buffer_trim_end_import = (gpr_slice_buffer_trim_end_type) GetProcAddress(library, "gpr_slice_buffer_trim_end"); + gpr_slice_buffer_move_first_import = (gpr_slice_buffer_move_first_type) GetProcAddress(library, "gpr_slice_buffer_move_first"); + gpr_slice_buffer_take_first_import = (gpr_slice_buffer_take_first_type) GetProcAddress(library, "gpr_slice_buffer_take_first"); + gpr_mu_init_import = (gpr_mu_init_type) GetProcAddress(library, "gpr_mu_init"); + gpr_mu_destroy_import = (gpr_mu_destroy_type) GetProcAddress(library, "gpr_mu_destroy"); + gpr_mu_lock_import = (gpr_mu_lock_type) GetProcAddress(library, "gpr_mu_lock"); + gpr_mu_unlock_import = (gpr_mu_unlock_type) GetProcAddress(library, "gpr_mu_unlock"); + gpr_mu_trylock_import = (gpr_mu_trylock_type) GetProcAddress(library, "gpr_mu_trylock"); + gpr_cv_init_import = (gpr_cv_init_type) GetProcAddress(library, "gpr_cv_init"); + gpr_cv_destroy_import = (gpr_cv_destroy_type) GetProcAddress(library, "gpr_cv_destroy"); + gpr_cv_wait_import = (gpr_cv_wait_type) GetProcAddress(library, "gpr_cv_wait"); + gpr_cv_signal_import = (gpr_cv_signal_type) GetProcAddress(library, "gpr_cv_signal"); + gpr_cv_broadcast_import = (gpr_cv_broadcast_type) GetProcAddress(library, "gpr_cv_broadcast"); + gpr_once_init_import = (gpr_once_init_type) GetProcAddress(library, "gpr_once_init"); + gpr_event_init_import = (gpr_event_init_type) GetProcAddress(library, "gpr_event_init"); + gpr_event_set_import = (gpr_event_set_type) GetProcAddress(library, "gpr_event_set"); + gpr_event_get_import = (gpr_event_get_type) GetProcAddress(library, "gpr_event_get"); + gpr_event_wait_import = (gpr_event_wait_type) GetProcAddress(library, "gpr_event_wait"); + gpr_ref_init_import = (gpr_ref_init_type) GetProcAddress(library, "gpr_ref_init"); + gpr_ref_import = (gpr_ref_type) GetProcAddress(library, "gpr_ref"); + gpr_refn_import = (gpr_refn_type) GetProcAddress(library, "gpr_refn"); + gpr_unref_import = (gpr_unref_type) GetProcAddress(library, "gpr_unref"); + gpr_stats_init_import = (gpr_stats_init_type) GetProcAddress(library, "gpr_stats_init"); + gpr_stats_inc_import = (gpr_stats_inc_type) GetProcAddress(library, "gpr_stats_inc"); + gpr_stats_read_import = (gpr_stats_read_type) GetProcAddress(library, "gpr_stats_read"); + gpr_time_0_import = (gpr_time_0_type) GetProcAddress(library, "gpr_time_0"); + gpr_inf_future_import = (gpr_inf_future_type) GetProcAddress(library, "gpr_inf_future"); + gpr_inf_past_import = (gpr_inf_past_type) GetProcAddress(library, "gpr_inf_past"); + gpr_time_init_import = (gpr_time_init_type) GetProcAddress(library, "gpr_time_init"); + gpr_now_import = (gpr_now_type) GetProcAddress(library, "gpr_now"); + gpr_convert_clock_type_import = (gpr_convert_clock_type_type) GetProcAddress(library, "gpr_convert_clock_type"); + gpr_time_cmp_import = (gpr_time_cmp_type) GetProcAddress(library, "gpr_time_cmp"); + gpr_time_max_import = (gpr_time_max_type) GetProcAddress(library, "gpr_time_max"); + gpr_time_min_import = (gpr_time_min_type) GetProcAddress(library, "gpr_time_min"); + gpr_time_add_import = (gpr_time_add_type) GetProcAddress(library, "gpr_time_add"); + gpr_time_sub_import = (gpr_time_sub_type) GetProcAddress(library, "gpr_time_sub"); + gpr_time_from_micros_import = (gpr_time_from_micros_type) GetProcAddress(library, "gpr_time_from_micros"); + gpr_time_from_nanos_import = (gpr_time_from_nanos_type) GetProcAddress(library, "gpr_time_from_nanos"); + gpr_time_from_millis_import = (gpr_time_from_millis_type) GetProcAddress(library, "gpr_time_from_millis"); + gpr_time_from_seconds_import = (gpr_time_from_seconds_type) GetProcAddress(library, "gpr_time_from_seconds"); + gpr_time_from_minutes_import = (gpr_time_from_minutes_type) GetProcAddress(library, "gpr_time_from_minutes"); + gpr_time_from_hours_import = (gpr_time_from_hours_type) GetProcAddress(library, "gpr_time_from_hours"); + gpr_time_to_millis_import = (gpr_time_to_millis_type) GetProcAddress(library, "gpr_time_to_millis"); + gpr_time_similar_import = (gpr_time_similar_type) GetProcAddress(library, "gpr_time_similar"); + gpr_sleep_until_import = (gpr_sleep_until_type) GetProcAddress(library, "gpr_sleep_until"); + gpr_timespec_to_micros_import = (gpr_timespec_to_micros_type) GetProcAddress(library, "gpr_timespec_to_micros"); + gpr_avl_create_import = (gpr_avl_create_type) GetProcAddress(library, "gpr_avl_create"); + gpr_avl_ref_import = (gpr_avl_ref_type) GetProcAddress(library, "gpr_avl_ref"); + gpr_avl_unref_import = (gpr_avl_unref_type) GetProcAddress(library, "gpr_avl_unref"); + gpr_avl_add_import = (gpr_avl_add_type) GetProcAddress(library, "gpr_avl_add"); + gpr_avl_remove_import = (gpr_avl_remove_type) GetProcAddress(library, "gpr_avl_remove"); + gpr_avl_get_import = (gpr_avl_get_type) GetProcAddress(library, "gpr_avl_get"); + gpr_cmdline_create_import = (gpr_cmdline_create_type) GetProcAddress(library, "gpr_cmdline_create"); + gpr_cmdline_add_int_import = (gpr_cmdline_add_int_type) GetProcAddress(library, "gpr_cmdline_add_int"); + gpr_cmdline_add_flag_import = (gpr_cmdline_add_flag_type) GetProcAddress(library, "gpr_cmdline_add_flag"); + gpr_cmdline_add_string_import = (gpr_cmdline_add_string_type) GetProcAddress(library, "gpr_cmdline_add_string"); + gpr_cmdline_on_extra_arg_import = (gpr_cmdline_on_extra_arg_type) GetProcAddress(library, "gpr_cmdline_on_extra_arg"); + gpr_cmdline_set_survive_failure_import = (gpr_cmdline_set_survive_failure_type) GetProcAddress(library, "gpr_cmdline_set_survive_failure"); + gpr_cmdline_parse_import = (gpr_cmdline_parse_type) GetProcAddress(library, "gpr_cmdline_parse"); + gpr_cmdline_destroy_import = (gpr_cmdline_destroy_type) GetProcAddress(library, "gpr_cmdline_destroy"); + gpr_cmdline_usage_string_import = (gpr_cmdline_usage_string_type) GetProcAddress(library, "gpr_cmdline_usage_string"); + gpr_cpu_num_cores_import = (gpr_cpu_num_cores_type) GetProcAddress(library, "gpr_cpu_num_cores"); + gpr_cpu_current_cpu_import = (gpr_cpu_current_cpu_type) GetProcAddress(library, "gpr_cpu_current_cpu"); + gpr_histogram_create_import = (gpr_histogram_create_type) GetProcAddress(library, "gpr_histogram_create"); + gpr_histogram_destroy_import = (gpr_histogram_destroy_type) GetProcAddress(library, "gpr_histogram_destroy"); + gpr_histogram_add_import = (gpr_histogram_add_type) GetProcAddress(library, "gpr_histogram_add"); + gpr_histogram_merge_import = (gpr_histogram_merge_type) GetProcAddress(library, "gpr_histogram_merge"); + gpr_histogram_percentile_import = (gpr_histogram_percentile_type) GetProcAddress(library, "gpr_histogram_percentile"); + gpr_histogram_mean_import = (gpr_histogram_mean_type) GetProcAddress(library, "gpr_histogram_mean"); + gpr_histogram_stddev_import = (gpr_histogram_stddev_type) GetProcAddress(library, "gpr_histogram_stddev"); + gpr_histogram_variance_import = (gpr_histogram_variance_type) GetProcAddress(library, "gpr_histogram_variance"); + gpr_histogram_maximum_import = (gpr_histogram_maximum_type) GetProcAddress(library, "gpr_histogram_maximum"); + gpr_histogram_minimum_import = (gpr_histogram_minimum_type) GetProcAddress(library, "gpr_histogram_minimum"); + gpr_histogram_count_import = (gpr_histogram_count_type) GetProcAddress(library, "gpr_histogram_count"); + gpr_histogram_sum_import = (gpr_histogram_sum_type) GetProcAddress(library, "gpr_histogram_sum"); + gpr_histogram_sum_of_squares_import = (gpr_histogram_sum_of_squares_type) GetProcAddress(library, "gpr_histogram_sum_of_squares"); + gpr_histogram_get_contents_import = (gpr_histogram_get_contents_type) GetProcAddress(library, "gpr_histogram_get_contents"); + gpr_histogram_merge_contents_import = (gpr_histogram_merge_contents_type) GetProcAddress(library, "gpr_histogram_merge_contents"); + gpr_join_host_port_import = (gpr_join_host_port_type) GetProcAddress(library, "gpr_join_host_port"); + gpr_split_host_port_import = (gpr_split_host_port_type) GetProcAddress(library, "gpr_split_host_port"); + gpr_format_message_import = (gpr_format_message_type) GetProcAddress(library, "gpr_format_message"); + gpr_strdup_import = (gpr_strdup_type) GetProcAddress(library, "gpr_strdup"); + gpr_asprintf_import = (gpr_asprintf_type) GetProcAddress(library, "gpr_asprintf"); + gpr_subprocess_binary_extension_import = (gpr_subprocess_binary_extension_type) GetProcAddress(library, "gpr_subprocess_binary_extension"); + gpr_subprocess_create_import = (gpr_subprocess_create_type) GetProcAddress(library, "gpr_subprocess_create"); + gpr_subprocess_destroy_import = (gpr_subprocess_destroy_type) GetProcAddress(library, "gpr_subprocess_destroy"); + gpr_subprocess_join_import = (gpr_subprocess_join_type) GetProcAddress(library, "gpr_subprocess_join"); + gpr_subprocess_interrupt_import = (gpr_subprocess_interrupt_type) GetProcAddress(library, "gpr_subprocess_interrupt"); + gpr_thd_new_import = (gpr_thd_new_type) GetProcAddress(library, "gpr_thd_new"); + gpr_thd_options_default_import = (gpr_thd_options_default_type) GetProcAddress(library, "gpr_thd_options_default"); + gpr_thd_options_set_detached_import = (gpr_thd_options_set_detached_type) GetProcAddress(library, "gpr_thd_options_set_detached"); + gpr_thd_options_set_joinable_import = (gpr_thd_options_set_joinable_type) GetProcAddress(library, "gpr_thd_options_set_joinable"); + gpr_thd_options_is_detached_import = (gpr_thd_options_is_detached_type) GetProcAddress(library, "gpr_thd_options_is_detached"); + gpr_thd_options_is_joinable_import = (gpr_thd_options_is_joinable_type) GetProcAddress(library, "gpr_thd_options_is_joinable"); + gpr_thd_currentid_import = (gpr_thd_currentid_type) GetProcAddress(library, "gpr_thd_currentid"); + gpr_thd_join_import = (gpr_thd_join_type) GetProcAddress(library, "gpr_thd_join"); +} + +#endif /* !GPR_WIN32 */ diff --git a/src/python/grpcio/grpc/_cython/imports.generated.h b/src/python/grpcio/grpc/_cython/imports.generated.h new file mode 100644 index 00000000000..2a8a910055a --- /dev/null +++ b/src/python/grpcio/grpc/_cython/imports.generated.h @@ -0,0 +1,860 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef PYGRPC_CYTHON_WINDOWS_IMPORTS_H_ +#define PYGRPC_CYTHON_WINDOWS_IMPORTS_H_ + +#include + +#ifdef GPR_WIN32 + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef int(*census_initialize_type)(int features); +extern census_initialize_type census_initialize_import; +#define census_initialize census_initialize_import +typedef void(*census_shutdown_type)(void); +extern census_shutdown_type census_shutdown_import; +#define census_shutdown census_shutdown_import +typedef int(*census_supported_type)(void); +extern census_supported_type census_supported_import; +#define census_supported census_supported_import +typedef int(*census_enabled_type)(void); +extern census_enabled_type census_enabled_import; +#define census_enabled census_enabled_import +typedef size_t(*census_context_serialize_type)(const census_context *context, char *buffer, size_t buf_size); +extern census_context_serialize_type census_context_serialize_import; +#define census_context_serialize census_context_serialize_import +typedef int(*census_trace_mask_type)(const census_context *context); +extern census_trace_mask_type census_trace_mask_import; +#define census_trace_mask census_trace_mask_import +typedef void(*census_set_trace_mask_type)(int trace_mask); +extern census_set_trace_mask_type census_set_trace_mask_import; +#define census_set_trace_mask census_set_trace_mask_import +typedef census_timestamp(*census_start_rpc_op_timestamp_type)(void); +extern census_start_rpc_op_timestamp_type census_start_rpc_op_timestamp_import; +#define census_start_rpc_op_timestamp census_start_rpc_op_timestamp_import +typedef census_context *(*census_start_client_rpc_op_type)(const census_context *context, int64_t rpc_name_id, const census_rpc_name_info *rpc_name_info, const char *peer, int trace_mask, const census_timestamp *start_time); +extern census_start_client_rpc_op_type census_start_client_rpc_op_import; +#define census_start_client_rpc_op census_start_client_rpc_op_import +typedef void(*census_set_rpc_client_peer_type)(census_context *context, const char *peer); +extern census_set_rpc_client_peer_type census_set_rpc_client_peer_import; +#define census_set_rpc_client_peer census_set_rpc_client_peer_import +typedef census_context *(*census_start_server_rpc_op_type)(const char *buffer, int64_t rpc_name_id, const census_rpc_name_info *rpc_name_info, const char *peer, int trace_mask, census_timestamp *start_time); +extern census_start_server_rpc_op_type census_start_server_rpc_op_import; +#define census_start_server_rpc_op census_start_server_rpc_op_import +typedef census_context *(*census_start_op_type)(census_context *context, const char *family, const char *name, int trace_mask); +extern census_start_op_type census_start_op_import; +#define census_start_op census_start_op_import +typedef void(*census_end_op_type)(census_context *context, int status); +extern census_end_op_type census_end_op_import; +#define census_end_op census_end_op_import +typedef void(*census_trace_print_type)(census_context *context, uint32_t type, const char *buffer, size_t n); +extern census_trace_print_type census_trace_print_import; +#define census_trace_print census_trace_print_import +typedef int(*census_trace_scan_start_type)(int consume); +extern census_trace_scan_start_type census_trace_scan_start_import; +#define census_trace_scan_start census_trace_scan_start_import +typedef int(*census_get_trace_record_type)(census_trace_record *trace_record); +extern census_get_trace_record_type census_get_trace_record_import; +#define census_get_trace_record census_get_trace_record_import +typedef void(*census_trace_scan_end_type)(); +extern census_trace_scan_end_type census_trace_scan_end_import; +#define census_trace_scan_end census_trace_scan_end_import +typedef census_tag_set *(*census_tag_set_create_type)(const census_tag_set *base, const census_tag *tags, int ntags, census_tag_set_create_status const **status); +extern census_tag_set_create_type census_tag_set_create_import; +#define census_tag_set_create census_tag_set_create_import +typedef void(*census_tag_set_destroy_type)(census_tag_set *tags); +extern census_tag_set_destroy_type census_tag_set_destroy_import; +#define census_tag_set_destroy census_tag_set_destroy_import +typedef const census_tag_set_create_status *(*census_tag_set_get_create_status_type)(const census_tag_set *tags); +extern census_tag_set_get_create_status_type census_tag_set_get_create_status_import; +#define census_tag_set_get_create_status census_tag_set_get_create_status_import +typedef void(*census_tag_set_initialize_iterator_type)(const census_tag_set *tags, census_tag_set_iterator *iterator); +extern census_tag_set_initialize_iterator_type census_tag_set_initialize_iterator_import; +#define census_tag_set_initialize_iterator census_tag_set_initialize_iterator_import +typedef int(*census_tag_set_next_tag_type)(census_tag_set_iterator *iterator, census_tag *tag); +extern census_tag_set_next_tag_type census_tag_set_next_tag_import; +#define census_tag_set_next_tag census_tag_set_next_tag_import +typedef int(*census_tag_set_get_tag_by_key_type)(const census_tag_set *tags, const char *key, census_tag *tag); +extern census_tag_set_get_tag_by_key_type census_tag_set_get_tag_by_key_import; +#define census_tag_set_get_tag_by_key census_tag_set_get_tag_by_key_import +typedef char *(*census_tag_set_encode_type)(const census_tag_set *tags, char *buffer, size_t buf_size, size_t *print_buf_size, size_t *bin_buf_size); +extern census_tag_set_encode_type census_tag_set_encode_import; +#define census_tag_set_encode census_tag_set_encode_import +typedef census_tag_set *(*census_tag_set_decode_type)(const char *buffer, size_t size, const char *bin_buffer, size_t bin_size); +extern census_tag_set_decode_type census_tag_set_decode_import; +#define census_tag_set_decode census_tag_set_decode_import +typedef census_tag_set *(*census_context_tag_set_type)(census_context *context); +extern census_context_tag_set_type census_context_tag_set_import; +#define census_context_tag_set census_context_tag_set_import +typedef void(*census_record_values_type)(census_context *context, census_value *values, size_t nvalues); +extern census_record_values_type census_record_values_import; +#define census_record_values census_record_values_import +typedef census_view *(*census_view_create_type)(uint32_t metric_id, const census_tag_set *tags, const census_aggregation *aggregations, size_t naggregations); +extern census_view_create_type census_view_create_import; +#define census_view_create census_view_create_import +typedef void(*census_view_delete_type)(census_view *view); +extern census_view_delete_type census_view_delete_import; +#define census_view_delete census_view_delete_import +typedef size_t(*census_view_metric_type)(const census_view *view); +extern census_view_metric_type census_view_metric_import; +#define census_view_metric census_view_metric_import +typedef size_t(*census_view_naggregations_type)(const census_view *view); +extern census_view_naggregations_type census_view_naggregations_import; +#define census_view_naggregations census_view_naggregations_import +typedef const census_tag_set *(*census_view_tags_type)(const census_view *view); +extern census_view_tags_type census_view_tags_import; +#define census_view_tags census_view_tags_import +typedef const census_aggregation *(*census_view_aggregrations_type)(const census_view *view); +extern census_view_aggregrations_type census_view_aggregrations_import; +#define census_view_aggregrations census_view_aggregrations_import +typedef const census_view_data *(*census_view_get_data_type)(const census_view *view); +extern census_view_get_data_type census_view_get_data_import; +#define census_view_get_data census_view_get_data_import +typedef void(*census_view_reset_type)(census_view *view); +extern census_view_reset_type census_view_reset_import; +#define census_view_reset census_view_reset_import +typedef int(*grpc_compression_algorithm_parse_type)(const char *name, size_t name_length, grpc_compression_algorithm *algorithm); +extern grpc_compression_algorithm_parse_type grpc_compression_algorithm_parse_import; +#define grpc_compression_algorithm_parse grpc_compression_algorithm_parse_import +typedef int(*grpc_compression_algorithm_name_type)(grpc_compression_algorithm algorithm, char **name); +extern grpc_compression_algorithm_name_type grpc_compression_algorithm_name_import; +#define grpc_compression_algorithm_name grpc_compression_algorithm_name_import +typedef grpc_compression_algorithm(*grpc_compression_algorithm_for_level_type)(grpc_compression_level level); +extern grpc_compression_algorithm_for_level_type grpc_compression_algorithm_for_level_import; +#define grpc_compression_algorithm_for_level grpc_compression_algorithm_for_level_import +typedef void(*grpc_compression_options_init_type)(grpc_compression_options *opts); +extern grpc_compression_options_init_type grpc_compression_options_init_import; +#define grpc_compression_options_init grpc_compression_options_init_import +typedef void(*grpc_compression_options_enable_algorithm_type)(grpc_compression_options *opts, grpc_compression_algorithm algorithm); +extern grpc_compression_options_enable_algorithm_type grpc_compression_options_enable_algorithm_import; +#define grpc_compression_options_enable_algorithm grpc_compression_options_enable_algorithm_import +typedef void(*grpc_compression_options_disable_algorithm_type)(grpc_compression_options *opts, grpc_compression_algorithm algorithm); +extern grpc_compression_options_disable_algorithm_type grpc_compression_options_disable_algorithm_import; +#define grpc_compression_options_disable_algorithm grpc_compression_options_disable_algorithm_import +typedef int(*grpc_compression_options_is_algorithm_enabled_type)(const grpc_compression_options *opts, grpc_compression_algorithm algorithm); +extern grpc_compression_options_is_algorithm_enabled_type grpc_compression_options_is_algorithm_enabled_import; +#define grpc_compression_options_is_algorithm_enabled grpc_compression_options_is_algorithm_enabled_import +typedef void(*grpc_metadata_array_init_type)(grpc_metadata_array *array); +extern grpc_metadata_array_init_type grpc_metadata_array_init_import; +#define grpc_metadata_array_init grpc_metadata_array_init_import +typedef void(*grpc_metadata_array_destroy_type)(grpc_metadata_array *array); +extern grpc_metadata_array_destroy_type grpc_metadata_array_destroy_import; +#define grpc_metadata_array_destroy grpc_metadata_array_destroy_import +typedef void(*grpc_call_details_init_type)(grpc_call_details *details); +extern grpc_call_details_init_type grpc_call_details_init_import; +#define grpc_call_details_init grpc_call_details_init_import +typedef void(*grpc_call_details_destroy_type)(grpc_call_details *details); +extern grpc_call_details_destroy_type grpc_call_details_destroy_import; +#define grpc_call_details_destroy grpc_call_details_destroy_import +typedef void(*grpc_register_plugin_type)(void (*init)(void), void (*destroy)(void)); +extern grpc_register_plugin_type grpc_register_plugin_import; +#define grpc_register_plugin grpc_register_plugin_import +typedef void(*grpc_init_type)(void); +extern grpc_init_type grpc_init_import; +#define grpc_init grpc_init_import +typedef void(*grpc_shutdown_type)(void); +extern grpc_shutdown_type grpc_shutdown_import; +#define grpc_shutdown grpc_shutdown_import +typedef const char *(*grpc_version_string_type)(void); +extern grpc_version_string_type grpc_version_string_import; +#define grpc_version_string grpc_version_string_import +typedef grpc_completion_queue *(*grpc_completion_queue_create_type)(void *reserved); +extern grpc_completion_queue_create_type grpc_completion_queue_create_import; +#define grpc_completion_queue_create grpc_completion_queue_create_import +typedef grpc_event(*grpc_completion_queue_next_type)(grpc_completion_queue *cq, gpr_timespec deadline, void *reserved); +extern grpc_completion_queue_next_type grpc_completion_queue_next_import; +#define grpc_completion_queue_next grpc_completion_queue_next_import +typedef grpc_event(*grpc_completion_queue_pluck_type)(grpc_completion_queue *cq, void *tag, gpr_timespec deadline, void *reserved); +extern grpc_completion_queue_pluck_type grpc_completion_queue_pluck_import; +#define grpc_completion_queue_pluck grpc_completion_queue_pluck_import +typedef void(*grpc_completion_queue_shutdown_type)(grpc_completion_queue *cq); +extern grpc_completion_queue_shutdown_type grpc_completion_queue_shutdown_import; +#define grpc_completion_queue_shutdown grpc_completion_queue_shutdown_import +typedef void(*grpc_completion_queue_destroy_type)(grpc_completion_queue *cq); +extern grpc_completion_queue_destroy_type grpc_completion_queue_destroy_import; +#define grpc_completion_queue_destroy grpc_completion_queue_destroy_import +typedef grpc_alarm *(*grpc_alarm_create_type)(grpc_completion_queue *cq, gpr_timespec deadline, void *tag); +extern grpc_alarm_create_type grpc_alarm_create_import; +#define grpc_alarm_create grpc_alarm_create_import +typedef void(*grpc_alarm_cancel_type)(grpc_alarm *alarm); +extern grpc_alarm_cancel_type grpc_alarm_cancel_import; +#define grpc_alarm_cancel grpc_alarm_cancel_import +typedef void(*grpc_alarm_destroy_type)(grpc_alarm *alarm); +extern grpc_alarm_destroy_type grpc_alarm_destroy_import; +#define grpc_alarm_destroy grpc_alarm_destroy_import +typedef grpc_connectivity_state(*grpc_channel_check_connectivity_state_type)(grpc_channel *channel, int try_to_connect); +extern grpc_channel_check_connectivity_state_type grpc_channel_check_connectivity_state_import; +#define grpc_channel_check_connectivity_state grpc_channel_check_connectivity_state_import +typedef void(*grpc_channel_watch_connectivity_state_type)(grpc_channel *channel, grpc_connectivity_state last_observed_state, gpr_timespec deadline, grpc_completion_queue *cq, void *tag); +extern grpc_channel_watch_connectivity_state_type grpc_channel_watch_connectivity_state_import; +#define grpc_channel_watch_connectivity_state grpc_channel_watch_connectivity_state_import +typedef grpc_call *(*grpc_channel_create_call_type)(grpc_channel *channel, grpc_call *parent_call, uint32_t propagation_mask, grpc_completion_queue *completion_queue, const char *method, const char *host, gpr_timespec deadline, void *reserved); +extern grpc_channel_create_call_type grpc_channel_create_call_import; +#define grpc_channel_create_call grpc_channel_create_call_import +typedef void(*grpc_channel_ping_type)(grpc_channel *channel, grpc_completion_queue *cq, void *tag, void *reserved); +extern grpc_channel_ping_type grpc_channel_ping_import; +#define grpc_channel_ping grpc_channel_ping_import +typedef void *(*grpc_channel_register_call_type)(grpc_channel *channel, const char *method, const char *host, void *reserved); +extern grpc_channel_register_call_type grpc_channel_register_call_import; +#define grpc_channel_register_call grpc_channel_register_call_import +typedef grpc_call *(*grpc_channel_create_registered_call_type)(grpc_channel *channel, grpc_call *parent_call, uint32_t propagation_mask, grpc_completion_queue *completion_queue, void *registered_call_handle, gpr_timespec deadline, void *reserved); +extern grpc_channel_create_registered_call_type grpc_channel_create_registered_call_import; +#define grpc_channel_create_registered_call grpc_channel_create_registered_call_import +typedef grpc_call_error(*grpc_call_start_batch_type)(grpc_call *call, const grpc_op *ops, size_t nops, void *tag, void *reserved); +extern grpc_call_start_batch_type grpc_call_start_batch_import; +#define grpc_call_start_batch grpc_call_start_batch_import +typedef char *(*grpc_call_get_peer_type)(grpc_call *call); +extern grpc_call_get_peer_type grpc_call_get_peer_import; +#define grpc_call_get_peer grpc_call_get_peer_import +typedef void(*grpc_census_call_set_context_type)(grpc_call *call, struct census_context *context); +extern grpc_census_call_set_context_type grpc_census_call_set_context_import; +#define grpc_census_call_set_context grpc_census_call_set_context_import +typedef struct census_context *(*grpc_census_call_get_context_type)(grpc_call *call); +extern grpc_census_call_get_context_type grpc_census_call_get_context_import; +#define grpc_census_call_get_context grpc_census_call_get_context_import +typedef char *(*grpc_channel_get_target_type)(grpc_channel *channel); +extern grpc_channel_get_target_type grpc_channel_get_target_import; +#define grpc_channel_get_target grpc_channel_get_target_import +typedef grpc_channel *(*grpc_insecure_channel_create_type)(const char *target, const grpc_channel_args *args, void *reserved); +extern grpc_insecure_channel_create_type grpc_insecure_channel_create_import; +#define grpc_insecure_channel_create grpc_insecure_channel_create_import +typedef grpc_channel *(*grpc_lame_client_channel_create_type)(const char *target, grpc_status_code error_code, const char *error_message); +extern grpc_lame_client_channel_create_type grpc_lame_client_channel_create_import; +#define grpc_lame_client_channel_create grpc_lame_client_channel_create_import +typedef void(*grpc_channel_destroy_type)(grpc_channel *channel); +extern grpc_channel_destroy_type grpc_channel_destroy_import; +#define grpc_channel_destroy grpc_channel_destroy_import +typedef grpc_call_error(*grpc_call_cancel_type)(grpc_call *call, void *reserved); +extern grpc_call_cancel_type grpc_call_cancel_import; +#define grpc_call_cancel grpc_call_cancel_import +typedef grpc_call_error(*grpc_call_cancel_with_status_type)(grpc_call *call, grpc_status_code status, const char *description, void *reserved); +extern grpc_call_cancel_with_status_type grpc_call_cancel_with_status_import; +#define grpc_call_cancel_with_status grpc_call_cancel_with_status_import +typedef void(*grpc_call_destroy_type)(grpc_call *call); +extern grpc_call_destroy_type grpc_call_destroy_import; +#define grpc_call_destroy grpc_call_destroy_import +typedef grpc_call_error(*grpc_server_request_call_type)(grpc_server *server, grpc_call **call, grpc_call_details *details, grpc_metadata_array *request_metadata, grpc_completion_queue *cq_bound_to_call, grpc_completion_queue *cq_for_notification, void *tag_new); +extern grpc_server_request_call_type grpc_server_request_call_import; +#define grpc_server_request_call grpc_server_request_call_import +typedef void *(*grpc_server_register_method_type)(grpc_server *server, const char *method, const char *host); +extern grpc_server_register_method_type grpc_server_register_method_import; +#define grpc_server_register_method grpc_server_register_method_import +typedef grpc_call_error(*grpc_server_request_registered_call_type)(grpc_server *server, void *registered_method, grpc_call **call, gpr_timespec *deadline, grpc_metadata_array *request_metadata, grpc_byte_buffer **optional_payload, grpc_completion_queue *cq_bound_to_call, grpc_completion_queue *cq_for_notification, void *tag_new); +extern grpc_server_request_registered_call_type grpc_server_request_registered_call_import; +#define grpc_server_request_registered_call grpc_server_request_registered_call_import +typedef grpc_server *(*grpc_server_create_type)(const grpc_channel_args *args, void *reserved); +extern grpc_server_create_type grpc_server_create_import; +#define grpc_server_create grpc_server_create_import +typedef void(*grpc_server_register_completion_queue_type)(grpc_server *server, grpc_completion_queue *cq, void *reserved); +extern grpc_server_register_completion_queue_type grpc_server_register_completion_queue_import; +#define grpc_server_register_completion_queue grpc_server_register_completion_queue_import +typedef int(*grpc_server_add_insecure_http2_port_type)(grpc_server *server, const char *addr); +extern grpc_server_add_insecure_http2_port_type grpc_server_add_insecure_http2_port_import; +#define grpc_server_add_insecure_http2_port grpc_server_add_insecure_http2_port_import +typedef void(*grpc_server_start_type)(grpc_server *server); +extern grpc_server_start_type grpc_server_start_import; +#define grpc_server_start grpc_server_start_import +typedef void(*grpc_server_shutdown_and_notify_type)(grpc_server *server, grpc_completion_queue *cq, void *tag); +extern grpc_server_shutdown_and_notify_type grpc_server_shutdown_and_notify_import; +#define grpc_server_shutdown_and_notify grpc_server_shutdown_and_notify_import +typedef void(*grpc_server_cancel_all_calls_type)(grpc_server *server); +extern grpc_server_cancel_all_calls_type grpc_server_cancel_all_calls_import; +#define grpc_server_cancel_all_calls grpc_server_cancel_all_calls_import +typedef void(*grpc_server_destroy_type)(grpc_server *server); +extern grpc_server_destroy_type grpc_server_destroy_import; +#define grpc_server_destroy grpc_server_destroy_import +typedef int(*grpc_tracer_set_enabled_type)(const char *name, int enabled); +extern grpc_tracer_set_enabled_type grpc_tracer_set_enabled_import; +#define grpc_tracer_set_enabled grpc_tracer_set_enabled_import +typedef int(*grpc_header_key_is_legal_type)(const char *key, size_t length); +extern grpc_header_key_is_legal_type grpc_header_key_is_legal_import; +#define grpc_header_key_is_legal grpc_header_key_is_legal_import +typedef int(*grpc_header_nonbin_value_is_legal_type)(const char *value, size_t length); +extern grpc_header_nonbin_value_is_legal_type grpc_header_nonbin_value_is_legal_import; +#define grpc_header_nonbin_value_is_legal grpc_header_nonbin_value_is_legal_import +typedef int(*grpc_is_binary_header_type)(const char *key, size_t length); +extern grpc_is_binary_header_type grpc_is_binary_header_import; +#define grpc_is_binary_header grpc_is_binary_header_import +typedef const grpc_auth_property *(*grpc_auth_property_iterator_next_type)(grpc_auth_property_iterator *it); +extern grpc_auth_property_iterator_next_type grpc_auth_property_iterator_next_import; +#define grpc_auth_property_iterator_next grpc_auth_property_iterator_next_import +typedef grpc_auth_property_iterator(*grpc_auth_context_property_iterator_type)(const grpc_auth_context *ctx); +extern grpc_auth_context_property_iterator_type grpc_auth_context_property_iterator_import; +#define grpc_auth_context_property_iterator grpc_auth_context_property_iterator_import +typedef grpc_auth_property_iterator(*grpc_auth_context_peer_identity_type)(const grpc_auth_context *ctx); +extern grpc_auth_context_peer_identity_type grpc_auth_context_peer_identity_import; +#define grpc_auth_context_peer_identity grpc_auth_context_peer_identity_import +typedef grpc_auth_property_iterator(*grpc_auth_context_find_properties_by_name_type)(const grpc_auth_context *ctx, const char *name); +extern grpc_auth_context_find_properties_by_name_type grpc_auth_context_find_properties_by_name_import; +#define grpc_auth_context_find_properties_by_name grpc_auth_context_find_properties_by_name_import +typedef const char *(*grpc_auth_context_peer_identity_property_name_type)(const grpc_auth_context *ctx); +extern grpc_auth_context_peer_identity_property_name_type grpc_auth_context_peer_identity_property_name_import; +#define grpc_auth_context_peer_identity_property_name grpc_auth_context_peer_identity_property_name_import +typedef int(*grpc_auth_context_peer_is_authenticated_type)(const grpc_auth_context *ctx); +extern grpc_auth_context_peer_is_authenticated_type grpc_auth_context_peer_is_authenticated_import; +#define grpc_auth_context_peer_is_authenticated grpc_auth_context_peer_is_authenticated_import +typedef grpc_auth_context *(*grpc_call_auth_context_type)(grpc_call *call); +extern grpc_call_auth_context_type grpc_call_auth_context_import; +#define grpc_call_auth_context grpc_call_auth_context_import +typedef void(*grpc_auth_context_release_type)(grpc_auth_context *context); +extern grpc_auth_context_release_type grpc_auth_context_release_import; +#define grpc_auth_context_release grpc_auth_context_release_import +typedef void(*grpc_auth_context_add_property_type)(grpc_auth_context *ctx, const char *name, const char *value, size_t value_length); +extern grpc_auth_context_add_property_type grpc_auth_context_add_property_import; +#define grpc_auth_context_add_property grpc_auth_context_add_property_import +typedef void(*grpc_auth_context_add_cstring_property_type)(grpc_auth_context *ctx, const char *name, const char *value); +extern grpc_auth_context_add_cstring_property_type grpc_auth_context_add_cstring_property_import; +#define grpc_auth_context_add_cstring_property grpc_auth_context_add_cstring_property_import +typedef int(*grpc_auth_context_set_peer_identity_property_name_type)(grpc_auth_context *ctx, const char *name); +extern grpc_auth_context_set_peer_identity_property_name_type grpc_auth_context_set_peer_identity_property_name_import; +#define grpc_auth_context_set_peer_identity_property_name grpc_auth_context_set_peer_identity_property_name_import +typedef void(*grpc_channel_credentials_release_type)(grpc_channel_credentials *creds); +extern grpc_channel_credentials_release_type grpc_channel_credentials_release_import; +#define grpc_channel_credentials_release grpc_channel_credentials_release_import +typedef grpc_channel_credentials *(*grpc_google_default_credentials_create_type)(void); +extern grpc_google_default_credentials_create_type grpc_google_default_credentials_create_import; +#define grpc_google_default_credentials_create grpc_google_default_credentials_create_import +typedef grpc_channel_credentials *(*grpc_ssl_credentials_create_type)(const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pair, void *reserved); +extern grpc_ssl_credentials_create_type grpc_ssl_credentials_create_import; +#define grpc_ssl_credentials_create grpc_ssl_credentials_create_import +typedef void(*grpc_call_credentials_release_type)(grpc_call_credentials *creds); +extern grpc_call_credentials_release_type grpc_call_credentials_release_import; +#define grpc_call_credentials_release grpc_call_credentials_release_import +typedef grpc_channel_credentials *(*grpc_composite_channel_credentials_create_type)(grpc_channel_credentials *channel_creds, grpc_call_credentials *call_creds, void *reserved); +extern grpc_composite_channel_credentials_create_type grpc_composite_channel_credentials_create_import; +#define grpc_composite_channel_credentials_create grpc_composite_channel_credentials_create_import +typedef grpc_call_credentials *(*grpc_composite_call_credentials_create_type)(grpc_call_credentials *creds1, grpc_call_credentials *creds2, void *reserved); +extern grpc_composite_call_credentials_create_type grpc_composite_call_credentials_create_import; +#define grpc_composite_call_credentials_create grpc_composite_call_credentials_create_import +typedef grpc_call_credentials *(*grpc_google_compute_engine_credentials_create_type)(void *reserved); +extern grpc_google_compute_engine_credentials_create_type grpc_google_compute_engine_credentials_create_import; +#define grpc_google_compute_engine_credentials_create grpc_google_compute_engine_credentials_create_import +typedef gpr_timespec(*grpc_max_auth_token_lifetime_type)(); +extern grpc_max_auth_token_lifetime_type grpc_max_auth_token_lifetime_import; +#define grpc_max_auth_token_lifetime grpc_max_auth_token_lifetime_import +typedef grpc_call_credentials *(*grpc_service_account_jwt_access_credentials_create_type)(const char *json_key, gpr_timespec token_lifetime, void *reserved); +extern grpc_service_account_jwt_access_credentials_create_type grpc_service_account_jwt_access_credentials_create_import; +#define grpc_service_account_jwt_access_credentials_create grpc_service_account_jwt_access_credentials_create_import +typedef grpc_call_credentials *(*grpc_google_refresh_token_credentials_create_type)(const char *json_refresh_token, void *reserved); +extern grpc_google_refresh_token_credentials_create_type grpc_google_refresh_token_credentials_create_import; +#define grpc_google_refresh_token_credentials_create grpc_google_refresh_token_credentials_create_import +typedef grpc_call_credentials *(*grpc_access_token_credentials_create_type)(const char *access_token, void *reserved); +extern grpc_access_token_credentials_create_type grpc_access_token_credentials_create_import; +#define grpc_access_token_credentials_create grpc_access_token_credentials_create_import +typedef grpc_call_credentials *(*grpc_google_iam_credentials_create_type)(const char *authorization_token, const char *authority_selector, void *reserved); +extern grpc_google_iam_credentials_create_type grpc_google_iam_credentials_create_import; +#define grpc_google_iam_credentials_create grpc_google_iam_credentials_create_import +typedef grpc_call_credentials *(*grpc_metadata_credentials_create_from_plugin_type)(grpc_metadata_credentials_plugin plugin, void *reserved); +extern grpc_metadata_credentials_create_from_plugin_type grpc_metadata_credentials_create_from_plugin_import; +#define grpc_metadata_credentials_create_from_plugin grpc_metadata_credentials_create_from_plugin_import +typedef grpc_channel *(*grpc_secure_channel_create_type)(grpc_channel_credentials *creds, const char *target, const grpc_channel_args *args, void *reserved); +extern grpc_secure_channel_create_type grpc_secure_channel_create_import; +#define grpc_secure_channel_create grpc_secure_channel_create_import +typedef void(*grpc_server_credentials_release_type)(grpc_server_credentials *creds); +extern grpc_server_credentials_release_type grpc_server_credentials_release_import; +#define grpc_server_credentials_release grpc_server_credentials_release_import +typedef grpc_server_credentials *(*grpc_ssl_server_credentials_create_type)(const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs, size_t num_key_cert_pairs, int force_client_auth, void *reserved); +extern grpc_ssl_server_credentials_create_type grpc_ssl_server_credentials_create_import; +#define grpc_ssl_server_credentials_create grpc_ssl_server_credentials_create_import +typedef int(*grpc_server_add_secure_http2_port_type)(grpc_server *server, const char *addr, grpc_server_credentials *creds); +extern grpc_server_add_secure_http2_port_type grpc_server_add_secure_http2_port_import; +#define grpc_server_add_secure_http2_port grpc_server_add_secure_http2_port_import +typedef grpc_call_error(*grpc_call_set_credentials_type)(grpc_call *call, grpc_call_credentials *creds); +extern grpc_call_set_credentials_type grpc_call_set_credentials_import; +#define grpc_call_set_credentials grpc_call_set_credentials_import +typedef void(*grpc_server_credentials_set_auth_metadata_processor_type)(grpc_server_credentials *creds, grpc_auth_metadata_processor processor); +extern grpc_server_credentials_set_auth_metadata_processor_type grpc_server_credentials_set_auth_metadata_processor_import; +#define grpc_server_credentials_set_auth_metadata_processor grpc_server_credentials_set_auth_metadata_processor_import +typedef void *(*gpr_malloc_type)(size_t size); +extern gpr_malloc_type gpr_malloc_import; +#define gpr_malloc gpr_malloc_import +typedef void(*gpr_free_type)(void *ptr); +extern gpr_free_type gpr_free_import; +#define gpr_free gpr_free_import +typedef void *(*gpr_realloc_type)(void *p, size_t size); +extern gpr_realloc_type gpr_realloc_import; +#define gpr_realloc gpr_realloc_import +typedef void *(*gpr_malloc_aligned_type)(size_t size, size_t alignment_log); +extern gpr_malloc_aligned_type gpr_malloc_aligned_import; +#define gpr_malloc_aligned gpr_malloc_aligned_import +typedef void(*gpr_free_aligned_type)(void *ptr); +extern gpr_free_aligned_type gpr_free_aligned_import; +#define gpr_free_aligned gpr_free_aligned_import +typedef void(*gpr_set_allocation_functions_type)(gpr_allocation_functions functions); +extern gpr_set_allocation_functions_type gpr_set_allocation_functions_import; +#define gpr_set_allocation_functions gpr_set_allocation_functions_import +typedef gpr_allocation_functions(*gpr_get_allocation_functions_type)(); +extern gpr_get_allocation_functions_type gpr_get_allocation_functions_import; +#define gpr_get_allocation_functions gpr_get_allocation_functions_import +typedef grpc_byte_buffer *(*grpc_raw_byte_buffer_create_type)(gpr_slice *slices, size_t nslices); +extern grpc_raw_byte_buffer_create_type grpc_raw_byte_buffer_create_import; +#define grpc_raw_byte_buffer_create grpc_raw_byte_buffer_create_import +typedef grpc_byte_buffer *(*grpc_raw_compressed_byte_buffer_create_type)(gpr_slice *slices, size_t nslices, grpc_compression_algorithm compression); +extern grpc_raw_compressed_byte_buffer_create_type grpc_raw_compressed_byte_buffer_create_import; +#define grpc_raw_compressed_byte_buffer_create grpc_raw_compressed_byte_buffer_create_import +typedef grpc_byte_buffer *(*grpc_byte_buffer_copy_type)(grpc_byte_buffer *bb); +extern grpc_byte_buffer_copy_type grpc_byte_buffer_copy_import; +#define grpc_byte_buffer_copy grpc_byte_buffer_copy_import +typedef size_t(*grpc_byte_buffer_length_type)(grpc_byte_buffer *bb); +extern grpc_byte_buffer_length_type grpc_byte_buffer_length_import; +#define grpc_byte_buffer_length grpc_byte_buffer_length_import +typedef void(*grpc_byte_buffer_destroy_type)(grpc_byte_buffer *byte_buffer); +extern grpc_byte_buffer_destroy_type grpc_byte_buffer_destroy_import; +#define grpc_byte_buffer_destroy grpc_byte_buffer_destroy_import +typedef void(*grpc_byte_buffer_reader_init_type)(grpc_byte_buffer_reader *reader, grpc_byte_buffer *buffer); +extern grpc_byte_buffer_reader_init_type grpc_byte_buffer_reader_init_import; +#define grpc_byte_buffer_reader_init grpc_byte_buffer_reader_init_import +typedef void(*grpc_byte_buffer_reader_destroy_type)(grpc_byte_buffer_reader *reader); +extern grpc_byte_buffer_reader_destroy_type grpc_byte_buffer_reader_destroy_import; +#define grpc_byte_buffer_reader_destroy grpc_byte_buffer_reader_destroy_import +typedef int(*grpc_byte_buffer_reader_next_type)(grpc_byte_buffer_reader *reader, gpr_slice *slice); +extern grpc_byte_buffer_reader_next_type grpc_byte_buffer_reader_next_import; +#define grpc_byte_buffer_reader_next grpc_byte_buffer_reader_next_import +typedef gpr_slice(*grpc_byte_buffer_reader_readall_type)(grpc_byte_buffer_reader *reader); +extern grpc_byte_buffer_reader_readall_type grpc_byte_buffer_reader_readall_import; +#define grpc_byte_buffer_reader_readall grpc_byte_buffer_reader_readall_import +typedef grpc_byte_buffer *(*grpc_raw_byte_buffer_from_reader_type)(grpc_byte_buffer_reader *reader); +extern grpc_raw_byte_buffer_from_reader_type grpc_raw_byte_buffer_from_reader_import; +#define grpc_raw_byte_buffer_from_reader grpc_raw_byte_buffer_from_reader_import +typedef void(*gpr_log_type)(const char *file, int line, gpr_log_severity severity, const char *format, ...); +extern gpr_log_type gpr_log_import; +#define gpr_log gpr_log_import +typedef void(*gpr_log_message_type)(const char *file, int line, gpr_log_severity severity, const char *message); +extern gpr_log_message_type gpr_log_message_import; +#define gpr_log_message gpr_log_message_import +typedef void(*gpr_set_log_function_type)(gpr_log_func func); +extern gpr_set_log_function_type gpr_set_log_function_import; +#define gpr_set_log_function gpr_set_log_function_import +typedef gpr_slice(*gpr_slice_ref_type)(gpr_slice s); +extern gpr_slice_ref_type gpr_slice_ref_import; +#define gpr_slice_ref gpr_slice_ref_import +typedef void(*gpr_slice_unref_type)(gpr_slice s); +extern gpr_slice_unref_type gpr_slice_unref_import; +#define gpr_slice_unref gpr_slice_unref_import +typedef gpr_slice(*gpr_slice_new_type)(void *p, size_t len, void (*destroy)(void *)); +extern gpr_slice_new_type gpr_slice_new_import; +#define gpr_slice_new gpr_slice_new_import +typedef gpr_slice(*gpr_slice_new_with_len_type)(void *p, size_t len, void (*destroy)(void *, size_t)); +extern gpr_slice_new_with_len_type gpr_slice_new_with_len_import; +#define gpr_slice_new_with_len gpr_slice_new_with_len_import +typedef gpr_slice(*gpr_slice_malloc_type)(size_t length); +extern gpr_slice_malloc_type gpr_slice_malloc_import; +#define gpr_slice_malloc gpr_slice_malloc_import +typedef gpr_slice(*gpr_slice_from_copied_string_type)(const char *source); +extern gpr_slice_from_copied_string_type gpr_slice_from_copied_string_import; +#define gpr_slice_from_copied_string gpr_slice_from_copied_string_import +typedef gpr_slice(*gpr_slice_from_copied_buffer_type)(const char *source, size_t len); +extern gpr_slice_from_copied_buffer_type gpr_slice_from_copied_buffer_import; +#define gpr_slice_from_copied_buffer gpr_slice_from_copied_buffer_import +typedef gpr_slice(*gpr_slice_from_static_string_type)(const char *source); +extern gpr_slice_from_static_string_type gpr_slice_from_static_string_import; +#define gpr_slice_from_static_string gpr_slice_from_static_string_import +typedef gpr_slice(*gpr_slice_sub_type)(gpr_slice s, size_t begin, size_t end); +extern gpr_slice_sub_type gpr_slice_sub_import; +#define gpr_slice_sub gpr_slice_sub_import +typedef gpr_slice(*gpr_slice_sub_no_ref_type)(gpr_slice s, size_t begin, size_t end); +extern gpr_slice_sub_no_ref_type gpr_slice_sub_no_ref_import; +#define gpr_slice_sub_no_ref gpr_slice_sub_no_ref_import +typedef gpr_slice(*gpr_slice_split_tail_type)(gpr_slice *s, size_t split); +extern gpr_slice_split_tail_type gpr_slice_split_tail_import; +#define gpr_slice_split_tail gpr_slice_split_tail_import +typedef gpr_slice(*gpr_slice_split_head_type)(gpr_slice *s, size_t split); +extern gpr_slice_split_head_type gpr_slice_split_head_import; +#define gpr_slice_split_head gpr_slice_split_head_import +typedef gpr_slice(*gpr_empty_slice_type)(void); +extern gpr_empty_slice_type gpr_empty_slice_import; +#define gpr_empty_slice gpr_empty_slice_import +typedef int(*gpr_slice_cmp_type)(gpr_slice a, gpr_slice b); +extern gpr_slice_cmp_type gpr_slice_cmp_import; +#define gpr_slice_cmp gpr_slice_cmp_import +typedef int(*gpr_slice_str_cmp_type)(gpr_slice a, const char *b); +extern gpr_slice_str_cmp_type gpr_slice_str_cmp_import; +#define gpr_slice_str_cmp gpr_slice_str_cmp_import +typedef void(*gpr_slice_buffer_init_type)(gpr_slice_buffer *sb); +extern gpr_slice_buffer_init_type gpr_slice_buffer_init_import; +#define gpr_slice_buffer_init gpr_slice_buffer_init_import +typedef void(*gpr_slice_buffer_destroy_type)(gpr_slice_buffer *sb); +extern gpr_slice_buffer_destroy_type gpr_slice_buffer_destroy_import; +#define gpr_slice_buffer_destroy gpr_slice_buffer_destroy_import +typedef void(*gpr_slice_buffer_add_type)(gpr_slice_buffer *sb, gpr_slice slice); +extern gpr_slice_buffer_add_type gpr_slice_buffer_add_import; +#define gpr_slice_buffer_add gpr_slice_buffer_add_import +typedef size_t(*gpr_slice_buffer_add_indexed_type)(gpr_slice_buffer *sb, gpr_slice slice); +extern gpr_slice_buffer_add_indexed_type gpr_slice_buffer_add_indexed_import; +#define gpr_slice_buffer_add_indexed gpr_slice_buffer_add_indexed_import +typedef void(*gpr_slice_buffer_addn_type)(gpr_slice_buffer *sb, gpr_slice *slices, size_t n); +extern gpr_slice_buffer_addn_type gpr_slice_buffer_addn_import; +#define gpr_slice_buffer_addn gpr_slice_buffer_addn_import +typedef uint8_t *(*gpr_slice_buffer_tiny_add_type)(gpr_slice_buffer *sb, size_t len); +extern gpr_slice_buffer_tiny_add_type gpr_slice_buffer_tiny_add_import; +#define gpr_slice_buffer_tiny_add gpr_slice_buffer_tiny_add_import +typedef void(*gpr_slice_buffer_pop_type)(gpr_slice_buffer *sb); +extern gpr_slice_buffer_pop_type gpr_slice_buffer_pop_import; +#define gpr_slice_buffer_pop gpr_slice_buffer_pop_import +typedef void(*gpr_slice_buffer_reset_and_unref_type)(gpr_slice_buffer *sb); +extern gpr_slice_buffer_reset_and_unref_type gpr_slice_buffer_reset_and_unref_import; +#define gpr_slice_buffer_reset_and_unref gpr_slice_buffer_reset_and_unref_import +typedef void(*gpr_slice_buffer_swap_type)(gpr_slice_buffer *a, gpr_slice_buffer *b); +extern gpr_slice_buffer_swap_type gpr_slice_buffer_swap_import; +#define gpr_slice_buffer_swap gpr_slice_buffer_swap_import +typedef void(*gpr_slice_buffer_move_into_type)(gpr_slice_buffer *src, gpr_slice_buffer *dst); +extern gpr_slice_buffer_move_into_type gpr_slice_buffer_move_into_import; +#define gpr_slice_buffer_move_into gpr_slice_buffer_move_into_import +typedef void(*gpr_slice_buffer_trim_end_type)(gpr_slice_buffer *src, size_t n, gpr_slice_buffer *garbage); +extern gpr_slice_buffer_trim_end_type gpr_slice_buffer_trim_end_import; +#define gpr_slice_buffer_trim_end gpr_slice_buffer_trim_end_import +typedef void(*gpr_slice_buffer_move_first_type)(gpr_slice_buffer *src, size_t n, gpr_slice_buffer *dst); +extern gpr_slice_buffer_move_first_type gpr_slice_buffer_move_first_import; +#define gpr_slice_buffer_move_first gpr_slice_buffer_move_first_import +typedef gpr_slice(*gpr_slice_buffer_take_first_type)(gpr_slice_buffer *src); +extern gpr_slice_buffer_take_first_type gpr_slice_buffer_take_first_import; +#define gpr_slice_buffer_take_first gpr_slice_buffer_take_first_import +typedef void(*gpr_mu_init_type)(gpr_mu *mu); +extern gpr_mu_init_type gpr_mu_init_import; +#define gpr_mu_init gpr_mu_init_import +typedef void(*gpr_mu_destroy_type)(gpr_mu *mu); +extern gpr_mu_destroy_type gpr_mu_destroy_import; +#define gpr_mu_destroy gpr_mu_destroy_import +typedef void(*gpr_mu_lock_type)(gpr_mu *mu); +extern gpr_mu_lock_type gpr_mu_lock_import; +#define gpr_mu_lock gpr_mu_lock_import +typedef void(*gpr_mu_unlock_type)(gpr_mu *mu); +extern gpr_mu_unlock_type gpr_mu_unlock_import; +#define gpr_mu_unlock gpr_mu_unlock_import +typedef int(*gpr_mu_trylock_type)(gpr_mu *mu); +extern gpr_mu_trylock_type gpr_mu_trylock_import; +#define gpr_mu_trylock gpr_mu_trylock_import +typedef void(*gpr_cv_init_type)(gpr_cv *cv); +extern gpr_cv_init_type gpr_cv_init_import; +#define gpr_cv_init gpr_cv_init_import +typedef void(*gpr_cv_destroy_type)(gpr_cv *cv); +extern gpr_cv_destroy_type gpr_cv_destroy_import; +#define gpr_cv_destroy gpr_cv_destroy_import +typedef int(*gpr_cv_wait_type)(gpr_cv *cv, gpr_mu *mu, gpr_timespec abs_deadline); +extern gpr_cv_wait_type gpr_cv_wait_import; +#define gpr_cv_wait gpr_cv_wait_import +typedef void(*gpr_cv_signal_type)(gpr_cv *cv); +extern gpr_cv_signal_type gpr_cv_signal_import; +#define gpr_cv_signal gpr_cv_signal_import +typedef void(*gpr_cv_broadcast_type)(gpr_cv *cv); +extern gpr_cv_broadcast_type gpr_cv_broadcast_import; +#define gpr_cv_broadcast gpr_cv_broadcast_import +typedef void(*gpr_once_init_type)(gpr_once *once, void (*init_routine)(void)); +extern gpr_once_init_type gpr_once_init_import; +#define gpr_once_init gpr_once_init_import +typedef void(*gpr_event_init_type)(gpr_event *ev); +extern gpr_event_init_type gpr_event_init_import; +#define gpr_event_init gpr_event_init_import +typedef void(*gpr_event_set_type)(gpr_event *ev, void *value); +extern gpr_event_set_type gpr_event_set_import; +#define gpr_event_set gpr_event_set_import +typedef void *(*gpr_event_get_type)(gpr_event *ev); +extern gpr_event_get_type gpr_event_get_import; +#define gpr_event_get gpr_event_get_import +typedef void *(*gpr_event_wait_type)(gpr_event *ev, gpr_timespec abs_deadline); +extern gpr_event_wait_type gpr_event_wait_import; +#define gpr_event_wait gpr_event_wait_import +typedef void(*gpr_ref_init_type)(gpr_refcount *r, int n); +extern gpr_ref_init_type gpr_ref_init_import; +#define gpr_ref_init gpr_ref_init_import +typedef void(*gpr_ref_type)(gpr_refcount *r); +extern gpr_ref_type gpr_ref_import; +#define gpr_ref gpr_ref_import +typedef void(*gpr_refn_type)(gpr_refcount *r, int n); +extern gpr_refn_type gpr_refn_import; +#define gpr_refn gpr_refn_import +typedef int(*gpr_unref_type)(gpr_refcount *r); +extern gpr_unref_type gpr_unref_import; +#define gpr_unref gpr_unref_import +typedef void(*gpr_stats_init_type)(gpr_stats_counter *c, intptr_t n); +extern gpr_stats_init_type gpr_stats_init_import; +#define gpr_stats_init gpr_stats_init_import +typedef void(*gpr_stats_inc_type)(gpr_stats_counter *c, intptr_t inc); +extern gpr_stats_inc_type gpr_stats_inc_import; +#define gpr_stats_inc gpr_stats_inc_import +typedef intptr_t(*gpr_stats_read_type)(const gpr_stats_counter *c); +extern gpr_stats_read_type gpr_stats_read_import; +#define gpr_stats_read gpr_stats_read_import +typedef gpr_timespec(*gpr_time_0_type)(gpr_clock_type type); +extern gpr_time_0_type gpr_time_0_import; +#define gpr_time_0 gpr_time_0_import +typedef gpr_timespec(*gpr_inf_future_type)(gpr_clock_type type); +extern gpr_inf_future_type gpr_inf_future_import; +#define gpr_inf_future gpr_inf_future_import +typedef gpr_timespec(*gpr_inf_past_type)(gpr_clock_type type); +extern gpr_inf_past_type gpr_inf_past_import; +#define gpr_inf_past gpr_inf_past_import +typedef void(*gpr_time_init_type)(void); +extern gpr_time_init_type gpr_time_init_import; +#define gpr_time_init gpr_time_init_import +typedef gpr_timespec(*gpr_now_type)(gpr_clock_type clock); +extern gpr_now_type gpr_now_import; +#define gpr_now gpr_now_import +typedef gpr_timespec(*gpr_convert_clock_type_type)(gpr_timespec t, gpr_clock_type target_clock); +extern gpr_convert_clock_type_type gpr_convert_clock_type_import; +#define gpr_convert_clock_type gpr_convert_clock_type_import +typedef int(*gpr_time_cmp_type)(gpr_timespec a, gpr_timespec b); +extern gpr_time_cmp_type gpr_time_cmp_import; +#define gpr_time_cmp gpr_time_cmp_import +typedef gpr_timespec(*gpr_time_max_type)(gpr_timespec a, gpr_timespec b); +extern gpr_time_max_type gpr_time_max_import; +#define gpr_time_max gpr_time_max_import +typedef gpr_timespec(*gpr_time_min_type)(gpr_timespec a, gpr_timespec b); +extern gpr_time_min_type gpr_time_min_import; +#define gpr_time_min gpr_time_min_import +typedef gpr_timespec(*gpr_time_add_type)(gpr_timespec a, gpr_timespec b); +extern gpr_time_add_type gpr_time_add_import; +#define gpr_time_add gpr_time_add_import +typedef gpr_timespec(*gpr_time_sub_type)(gpr_timespec a, gpr_timespec b); +extern gpr_time_sub_type gpr_time_sub_import; +#define gpr_time_sub gpr_time_sub_import +typedef gpr_timespec(*gpr_time_from_micros_type)(long x, gpr_clock_type clock_type); +extern gpr_time_from_micros_type gpr_time_from_micros_import; +#define gpr_time_from_micros gpr_time_from_micros_import +typedef gpr_timespec(*gpr_time_from_nanos_type)(long x, gpr_clock_type clock_type); +extern gpr_time_from_nanos_type gpr_time_from_nanos_import; +#define gpr_time_from_nanos gpr_time_from_nanos_import +typedef gpr_timespec(*gpr_time_from_millis_type)(long x, gpr_clock_type clock_type); +extern gpr_time_from_millis_type gpr_time_from_millis_import; +#define gpr_time_from_millis gpr_time_from_millis_import +typedef gpr_timespec(*gpr_time_from_seconds_type)(long x, gpr_clock_type clock_type); +extern gpr_time_from_seconds_type gpr_time_from_seconds_import; +#define gpr_time_from_seconds gpr_time_from_seconds_import +typedef gpr_timespec(*gpr_time_from_minutes_type)(long x, gpr_clock_type clock_type); +extern gpr_time_from_minutes_type gpr_time_from_minutes_import; +#define gpr_time_from_minutes gpr_time_from_minutes_import +typedef gpr_timespec(*gpr_time_from_hours_type)(long x, gpr_clock_type clock_type); +extern gpr_time_from_hours_type gpr_time_from_hours_import; +#define gpr_time_from_hours gpr_time_from_hours_import +typedef int32_t(*gpr_time_to_millis_type)(gpr_timespec timespec); +extern gpr_time_to_millis_type gpr_time_to_millis_import; +#define gpr_time_to_millis gpr_time_to_millis_import +typedef int(*gpr_time_similar_type)(gpr_timespec a, gpr_timespec b, gpr_timespec threshold); +extern gpr_time_similar_type gpr_time_similar_import; +#define gpr_time_similar gpr_time_similar_import +typedef void(*gpr_sleep_until_type)(gpr_timespec until); +extern gpr_sleep_until_type gpr_sleep_until_import; +#define gpr_sleep_until gpr_sleep_until_import +typedef double(*gpr_timespec_to_micros_type)(gpr_timespec t); +extern gpr_timespec_to_micros_type gpr_timespec_to_micros_import; +#define gpr_timespec_to_micros gpr_timespec_to_micros_import +typedef gpr_avl(*gpr_avl_create_type)(const gpr_avl_vtable *vtable); +extern gpr_avl_create_type gpr_avl_create_import; +#define gpr_avl_create gpr_avl_create_import +typedef gpr_avl(*gpr_avl_ref_type)(gpr_avl avl); +extern gpr_avl_ref_type gpr_avl_ref_import; +#define gpr_avl_ref gpr_avl_ref_import +typedef void(*gpr_avl_unref_type)(gpr_avl avl); +extern gpr_avl_unref_type gpr_avl_unref_import; +#define gpr_avl_unref gpr_avl_unref_import +typedef gpr_avl(*gpr_avl_add_type)(gpr_avl avl, void *key, void *value); +extern gpr_avl_add_type gpr_avl_add_import; +#define gpr_avl_add gpr_avl_add_import +typedef gpr_avl(*gpr_avl_remove_type)(gpr_avl avl, void *key); +extern gpr_avl_remove_type gpr_avl_remove_import; +#define gpr_avl_remove gpr_avl_remove_import +typedef void *(*gpr_avl_get_type)(gpr_avl avl, void *key); +extern gpr_avl_get_type gpr_avl_get_import; +#define gpr_avl_get gpr_avl_get_import +typedef gpr_cmdline *(*gpr_cmdline_create_type)(const char *description); +extern gpr_cmdline_create_type gpr_cmdline_create_import; +#define gpr_cmdline_create gpr_cmdline_create_import +typedef void(*gpr_cmdline_add_int_type)(gpr_cmdline *cl, const char *name, const char *help, int *value); +extern gpr_cmdline_add_int_type gpr_cmdline_add_int_import; +#define gpr_cmdline_add_int gpr_cmdline_add_int_import +typedef void(*gpr_cmdline_add_flag_type)(gpr_cmdline *cl, const char *name, const char *help, int *value); +extern gpr_cmdline_add_flag_type gpr_cmdline_add_flag_import; +#define gpr_cmdline_add_flag gpr_cmdline_add_flag_import +typedef void(*gpr_cmdline_add_string_type)(gpr_cmdline *cl, const char *name, const char *help, char **value); +extern gpr_cmdline_add_string_type gpr_cmdline_add_string_import; +#define gpr_cmdline_add_string gpr_cmdline_add_string_import +typedef void(*gpr_cmdline_on_extra_arg_type)(gpr_cmdline *cl, const char *name, const char *help, void (*on_extra_arg)(void *user_data, const char *arg), void *user_data); +extern gpr_cmdline_on_extra_arg_type gpr_cmdline_on_extra_arg_import; +#define gpr_cmdline_on_extra_arg gpr_cmdline_on_extra_arg_import +typedef void(*gpr_cmdline_set_survive_failure_type)(gpr_cmdline *cl); +extern gpr_cmdline_set_survive_failure_type gpr_cmdline_set_survive_failure_import; +#define gpr_cmdline_set_survive_failure gpr_cmdline_set_survive_failure_import +typedef int(*gpr_cmdline_parse_type)(gpr_cmdline *cl, int argc, char **argv); +extern gpr_cmdline_parse_type gpr_cmdline_parse_import; +#define gpr_cmdline_parse gpr_cmdline_parse_import +typedef void(*gpr_cmdline_destroy_type)(gpr_cmdline *cl); +extern gpr_cmdline_destroy_type gpr_cmdline_destroy_import; +#define gpr_cmdline_destroy gpr_cmdline_destroy_import +typedef char *(*gpr_cmdline_usage_string_type)(gpr_cmdline *cl, const char *argv0); +extern gpr_cmdline_usage_string_type gpr_cmdline_usage_string_import; +#define gpr_cmdline_usage_string gpr_cmdline_usage_string_import +typedef unsigned(*gpr_cpu_num_cores_type)(void); +extern gpr_cpu_num_cores_type gpr_cpu_num_cores_import; +#define gpr_cpu_num_cores gpr_cpu_num_cores_import +typedef unsigned(*gpr_cpu_current_cpu_type)(void); +extern gpr_cpu_current_cpu_type gpr_cpu_current_cpu_import; +#define gpr_cpu_current_cpu gpr_cpu_current_cpu_import +typedef gpr_histogram *(*gpr_histogram_create_type)(double resolution, double max_bucket_start); +extern gpr_histogram_create_type gpr_histogram_create_import; +#define gpr_histogram_create gpr_histogram_create_import +typedef void(*gpr_histogram_destroy_type)(gpr_histogram *h); +extern gpr_histogram_destroy_type gpr_histogram_destroy_import; +#define gpr_histogram_destroy gpr_histogram_destroy_import +typedef void(*gpr_histogram_add_type)(gpr_histogram *h, double x); +extern gpr_histogram_add_type gpr_histogram_add_import; +#define gpr_histogram_add gpr_histogram_add_import +typedef int(*gpr_histogram_merge_type)(gpr_histogram *dst, const gpr_histogram *src); +extern gpr_histogram_merge_type gpr_histogram_merge_import; +#define gpr_histogram_merge gpr_histogram_merge_import +typedef double(*gpr_histogram_percentile_type)(gpr_histogram *histogram, double percentile); +extern gpr_histogram_percentile_type gpr_histogram_percentile_import; +#define gpr_histogram_percentile gpr_histogram_percentile_import +typedef double(*gpr_histogram_mean_type)(gpr_histogram *histogram); +extern gpr_histogram_mean_type gpr_histogram_mean_import; +#define gpr_histogram_mean gpr_histogram_mean_import +typedef double(*gpr_histogram_stddev_type)(gpr_histogram *histogram); +extern gpr_histogram_stddev_type gpr_histogram_stddev_import; +#define gpr_histogram_stddev gpr_histogram_stddev_import +typedef double(*gpr_histogram_variance_type)(gpr_histogram *histogram); +extern gpr_histogram_variance_type gpr_histogram_variance_import; +#define gpr_histogram_variance gpr_histogram_variance_import +typedef double(*gpr_histogram_maximum_type)(gpr_histogram *histogram); +extern gpr_histogram_maximum_type gpr_histogram_maximum_import; +#define gpr_histogram_maximum gpr_histogram_maximum_import +typedef double(*gpr_histogram_minimum_type)(gpr_histogram *histogram); +extern gpr_histogram_minimum_type gpr_histogram_minimum_import; +#define gpr_histogram_minimum gpr_histogram_minimum_import +typedef double(*gpr_histogram_count_type)(gpr_histogram *histogram); +extern gpr_histogram_count_type gpr_histogram_count_import; +#define gpr_histogram_count gpr_histogram_count_import +typedef double(*gpr_histogram_sum_type)(gpr_histogram *histogram); +extern gpr_histogram_sum_type gpr_histogram_sum_import; +#define gpr_histogram_sum gpr_histogram_sum_import +typedef double(*gpr_histogram_sum_of_squares_type)(gpr_histogram *histogram); +extern gpr_histogram_sum_of_squares_type gpr_histogram_sum_of_squares_import; +#define gpr_histogram_sum_of_squares gpr_histogram_sum_of_squares_import +typedef const uint32_t *(*gpr_histogram_get_contents_type)(gpr_histogram *histogram, size_t *count); +extern gpr_histogram_get_contents_type gpr_histogram_get_contents_import; +#define gpr_histogram_get_contents gpr_histogram_get_contents_import +typedef void(*gpr_histogram_merge_contents_type)(gpr_histogram *histogram, const uint32_t *data, size_t data_count, double min_seen, double max_seen, double sum, double sum_of_squares, double count); +extern gpr_histogram_merge_contents_type gpr_histogram_merge_contents_import; +#define gpr_histogram_merge_contents gpr_histogram_merge_contents_import +typedef int(*gpr_join_host_port_type)(char **out, const char *host, int port); +extern gpr_join_host_port_type gpr_join_host_port_import; +#define gpr_join_host_port gpr_join_host_port_import +typedef int(*gpr_split_host_port_type)(const char *name, char **host, char **port); +extern gpr_split_host_port_type gpr_split_host_port_import; +#define gpr_split_host_port gpr_split_host_port_import +typedef char *(*gpr_format_message_type)(int messageid); +extern gpr_format_message_type gpr_format_message_import; +#define gpr_format_message gpr_format_message_import +typedef char *(*gpr_strdup_type)(const char *src); +extern gpr_strdup_type gpr_strdup_import; +#define gpr_strdup gpr_strdup_import +typedef int(*gpr_asprintf_type)(char **strp, const char *format, ...); +extern gpr_asprintf_type gpr_asprintf_import; +#define gpr_asprintf gpr_asprintf_import +typedef const char *(*gpr_subprocess_binary_extension_type)(); +extern gpr_subprocess_binary_extension_type gpr_subprocess_binary_extension_import; +#define gpr_subprocess_binary_extension gpr_subprocess_binary_extension_import +typedef gpr_subprocess *(*gpr_subprocess_create_type)(int argc, const char **argv); +extern gpr_subprocess_create_type gpr_subprocess_create_import; +#define gpr_subprocess_create gpr_subprocess_create_import +typedef void(*gpr_subprocess_destroy_type)(gpr_subprocess *p); +extern gpr_subprocess_destroy_type gpr_subprocess_destroy_import; +#define gpr_subprocess_destroy gpr_subprocess_destroy_import +typedef int(*gpr_subprocess_join_type)(gpr_subprocess *p); +extern gpr_subprocess_join_type gpr_subprocess_join_import; +#define gpr_subprocess_join gpr_subprocess_join_import +typedef void(*gpr_subprocess_interrupt_type)(gpr_subprocess *p); +extern gpr_subprocess_interrupt_type gpr_subprocess_interrupt_import; +#define gpr_subprocess_interrupt gpr_subprocess_interrupt_import +typedef int(*gpr_thd_new_type)(gpr_thd_id *t, void (*thd_body)(void *arg), void *arg, const gpr_thd_options *options); +extern gpr_thd_new_type gpr_thd_new_import; +#define gpr_thd_new gpr_thd_new_import +typedef gpr_thd_options(*gpr_thd_options_default_type)(void); +extern gpr_thd_options_default_type gpr_thd_options_default_import; +#define gpr_thd_options_default gpr_thd_options_default_import +typedef void(*gpr_thd_options_set_detached_type)(gpr_thd_options *options); +extern gpr_thd_options_set_detached_type gpr_thd_options_set_detached_import; +#define gpr_thd_options_set_detached gpr_thd_options_set_detached_import +typedef void(*gpr_thd_options_set_joinable_type)(gpr_thd_options *options); +extern gpr_thd_options_set_joinable_type gpr_thd_options_set_joinable_import; +#define gpr_thd_options_set_joinable gpr_thd_options_set_joinable_import +typedef int(*gpr_thd_options_is_detached_type)(const gpr_thd_options *options); +extern gpr_thd_options_is_detached_type gpr_thd_options_is_detached_import; +#define gpr_thd_options_is_detached gpr_thd_options_is_detached_import +typedef int(*gpr_thd_options_is_joinable_type)(const gpr_thd_options *options); +extern gpr_thd_options_is_joinable_type gpr_thd_options_is_joinable_import; +#define gpr_thd_options_is_joinable gpr_thd_options_is_joinable_import +typedef gpr_thd_id(*gpr_thd_currentid_type)(void); +extern gpr_thd_currentid_type gpr_thd_currentid_import; +#define gpr_thd_currentid gpr_thd_currentid_import +typedef void(*gpr_thd_join_type)(gpr_thd_id t); +extern gpr_thd_join_type gpr_thd_join_import; +#define gpr_thd_join gpr_thd_join_import + +void pygrpc_load_imports(HMODULE library); + +#else /* !GPR_WIN32 */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#endif /* !GPR_WIN32 */ + +#endif diff --git a/src/core/census/context.h b/src/python/grpcio/grpc/_cython/loader.c similarity index 76% rename from src/core/census/context.h rename to src/python/grpcio/grpc/_cython/loader.c index 700bcf86cfb..cdd47deed30 100644 --- a/src/core/census/context.h +++ b/src/python/grpcio/grpc/_cython/loader.c @@ -1,6 +1,6 @@ /* * - * Copyright 2015, Google Inc. + * Copyright 2016, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -31,17 +31,29 @@ * */ -#ifndef GRPC_INTERNAL_CORE_CENSUS_CONTEXT_H -#define GRPC_INTERNAL_CORE_CENSUS_CONTEXT_H +#include "loader.h" -#include +#if GPR_WIN32 -#define GRPC_CENSUS_MAX_ON_THE_WIRE_TAG_BYTES 2048 +int pygrpc_load_core(char *path) { + HMODULE grpc_c; +#ifdef GPR_ARCH_32 + /* Close your eyes for a moment, it'll all be over soon. */ + char *six = strrchr(path, '6'); + *six++ = '3'; + *six = '2'; +#endif + grpc_c = LoadLibraryA(path); + if (grpc_c) { + pygrpc_load_imports(grpc_c); + return 1; + } -/* census_context is the in-memory representation of information needed to - * maintain tracing, RPC statistics and resource usage information. */ -struct census_context { - census_tag_set *tags; /* Opaque data structure for census tags. */ -}; + return 0; +} -#endif /* GRPC_INTERNAL_CORE_CENSUS_CONTEXT_H */ +#else + +int pygrpc_load_core(char *path) { return 1; } + +#endif diff --git a/src/python/grpcio/grpc/_cython/loader.h b/src/python/grpcio/grpc/_cython/loader.h new file mode 100644 index 00000000000..dd31e1561b5 --- /dev/null +++ b/src/python/grpcio/grpc/_cython/loader.h @@ -0,0 +1,45 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef PYGRPC_LOADER_H_ +#define PYGRPC_LOADER_H_ + +#include "imports.generated.h" + +/* Additional inclusions not covered by "imports.generated.h" */ +#include + +/* Attempts to load the core if necessary, and return non-zero upon succes. */ +int pygrpc_load_core(char *path); + +#endif /* GRPC_RB_BYTE_BUFFER_H_ */ diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 1b2490e9ffc..6e89c87436a 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -225,7 +225,6 @@ CORE_SOURCE_FILES = [ 'src/core/census/initialize.c', 'src/core/census/operation.c', 'src/core/census/placeholders.c', - 'src/core/census/tag_set.c', 'src/core/census/tracing.c', 'src/boringssl/err_data.c', 'third_party/boringssl/crypto/aes/aes.c', diff --git a/src/ruby/ext/grpc/extconf.rb b/src/ruby/ext/grpc/extconf.rb index f6f78f78102..426a6e67a08 100644 --- a/src/ruby/ext/grpc/extconf.rb +++ b/src/ruby/ext/grpc/extconf.rb @@ -67,14 +67,15 @@ else end unless File.exist?(File.join(grpc_lib_dir, 'libgrpc.a')) or windows - for var in %w( CC AR ) do - ENV[var] = RbConfig::CONFIG[var] - end - + ENV['AR'] = RbConfig::CONFIG['AR'] + ' rcs' + ENV['CC'] = RbConfig::CONFIG['CC'] ENV['LD'] = ENV['CC'] + ENV['AR'] = 'libtool -o' if RUBY_PLATFORM =~ /darwin/ + ENV['EMBED_OPENSSL'] = 'true' ENV['EMBED_ZLIB'] = 'true' + ENV['ARCH_FLAGS'] = '-arch i386 -arch x86_64' if RUBY_PLATFORM =~ /darwin/ output_dir = File.expand_path(RbConfig::CONFIG['topdir']) grpc_lib_dir = File.join(output_dir, 'libs', grpc_config) @@ -107,6 +108,7 @@ puts 'Generating Makefile for ' + output create_makefile(output) strip_tool = RbConfig::CONFIG['STRIP'] +strip_tool = 'strip -x' if RUBY_PLATFORM =~ /darwin/ if grpc_config == 'opt' File.open('Makefile.new', 'w') do |o| diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.c b/src/ruby/ext/grpc/rb_grpc_imports.generated.c index a278b2ba997..d4ddb734c0d 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.c +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.c @@ -41,7 +41,14 @@ census_initialize_type census_initialize_import; census_shutdown_type census_shutdown_import; census_supported_type census_supported_import; census_enabled_type census_enabled_import; -census_context_serialize_type census_context_serialize_import; +census_context_create_type census_context_create_import; +census_context_destroy_type census_context_destroy_import; +census_context_get_status_type census_context_get_status_import; +census_context_initialize_iterator_type census_context_initialize_iterator_import; +census_context_next_tag_type census_context_next_tag_import; +census_context_get_tag_type census_context_get_tag_import; +census_context_encode_type census_context_encode_import; +census_context_decode_type census_context_decode_import; census_trace_mask_type census_trace_mask_import; census_set_trace_mask_type census_set_trace_mask_import; census_start_rpc_op_timestamp_type census_start_rpc_op_timestamp_import; @@ -54,15 +61,6 @@ census_trace_print_type census_trace_print_import; census_trace_scan_start_type census_trace_scan_start_import; census_get_trace_record_type census_get_trace_record_import; census_trace_scan_end_type census_trace_scan_end_import; -census_tag_set_create_type census_tag_set_create_import; -census_tag_set_destroy_type census_tag_set_destroy_import; -census_tag_set_get_create_status_type census_tag_set_get_create_status_import; -census_tag_set_initialize_iterator_type census_tag_set_initialize_iterator_import; -census_tag_set_next_tag_type census_tag_set_next_tag_import; -census_tag_set_get_tag_by_key_type census_tag_set_get_tag_by_key_import; -census_tag_set_encode_type census_tag_set_encode_import; -census_tag_set_decode_type census_tag_set_decode_import; -census_context_tag_set_type census_context_tag_set_import; census_record_values_type census_record_values_import; census_view_create_type census_view_create_import; census_view_delete_type census_view_delete_import; @@ -303,7 +301,14 @@ void grpc_rb_load_imports(HMODULE library) { census_shutdown_import = (census_shutdown_type) GetProcAddress(library, "census_shutdown"); census_supported_import = (census_supported_type) GetProcAddress(library, "census_supported"); census_enabled_import = (census_enabled_type) GetProcAddress(library, "census_enabled"); - census_context_serialize_import = (census_context_serialize_type) GetProcAddress(library, "census_context_serialize"); + census_context_create_import = (census_context_create_type) GetProcAddress(library, "census_context_create"); + census_context_destroy_import = (census_context_destroy_type) GetProcAddress(library, "census_context_destroy"); + census_context_get_status_import = (census_context_get_status_type) GetProcAddress(library, "census_context_get_status"); + census_context_initialize_iterator_import = (census_context_initialize_iterator_type) GetProcAddress(library, "census_context_initialize_iterator"); + census_context_next_tag_import = (census_context_next_tag_type) GetProcAddress(library, "census_context_next_tag"); + census_context_get_tag_import = (census_context_get_tag_type) GetProcAddress(library, "census_context_get_tag"); + census_context_encode_import = (census_context_encode_type) GetProcAddress(library, "census_context_encode"); + census_context_decode_import = (census_context_decode_type) GetProcAddress(library, "census_context_decode"); census_trace_mask_import = (census_trace_mask_type) GetProcAddress(library, "census_trace_mask"); census_set_trace_mask_import = (census_set_trace_mask_type) GetProcAddress(library, "census_set_trace_mask"); census_start_rpc_op_timestamp_import = (census_start_rpc_op_timestamp_type) GetProcAddress(library, "census_start_rpc_op_timestamp"); @@ -316,15 +321,6 @@ void grpc_rb_load_imports(HMODULE library) { census_trace_scan_start_import = (census_trace_scan_start_type) GetProcAddress(library, "census_trace_scan_start"); census_get_trace_record_import = (census_get_trace_record_type) GetProcAddress(library, "census_get_trace_record"); census_trace_scan_end_import = (census_trace_scan_end_type) GetProcAddress(library, "census_trace_scan_end"); - census_tag_set_create_import = (census_tag_set_create_type) GetProcAddress(library, "census_tag_set_create"); - census_tag_set_destroy_import = (census_tag_set_destroy_type) GetProcAddress(library, "census_tag_set_destroy"); - census_tag_set_get_create_status_import = (census_tag_set_get_create_status_type) GetProcAddress(library, "census_tag_set_get_create_status"); - census_tag_set_initialize_iterator_import = (census_tag_set_initialize_iterator_type) GetProcAddress(library, "census_tag_set_initialize_iterator"); - census_tag_set_next_tag_import = (census_tag_set_next_tag_type) GetProcAddress(library, "census_tag_set_next_tag"); - census_tag_set_get_tag_by_key_import = (census_tag_set_get_tag_by_key_type) GetProcAddress(library, "census_tag_set_get_tag_by_key"); - census_tag_set_encode_import = (census_tag_set_encode_type) GetProcAddress(library, "census_tag_set_encode"); - census_tag_set_decode_import = (census_tag_set_decode_type) GetProcAddress(library, "census_tag_set_decode"); - census_context_tag_set_import = (census_context_tag_set_type) GetProcAddress(library, "census_context_tag_set"); census_record_values_import = (census_record_values_type) GetProcAddress(library, "census_record_values"); census_view_create_import = (census_view_create_type) GetProcAddress(library, "census_view_create"); census_view_delete_import = (census_view_delete_type) GetProcAddress(library, "census_view_delete"); diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.h b/src/ruby/ext/grpc/rb_grpc_imports.generated.h index 3e29496a438..45e9b475743 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.h +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.h @@ -73,9 +73,30 @@ extern census_supported_type census_supported_import; typedef int(*census_enabled_type)(void); extern census_enabled_type census_enabled_import; #define census_enabled census_enabled_import -typedef size_t(*census_context_serialize_type)(const census_context *context, char *buffer, size_t buf_size); -extern census_context_serialize_type census_context_serialize_import; -#define census_context_serialize census_context_serialize_import +typedef census_context *(*census_context_create_type)(const census_context *base, const census_tag *tags, int ntags, census_context_status const **status); +extern census_context_create_type census_context_create_import; +#define census_context_create census_context_create_import +typedef void(*census_context_destroy_type)(census_context *context); +extern census_context_destroy_type census_context_destroy_import; +#define census_context_destroy census_context_destroy_import +typedef const census_context_status *(*census_context_get_status_type)(const census_context *context); +extern census_context_get_status_type census_context_get_status_import; +#define census_context_get_status census_context_get_status_import +typedef void(*census_context_initialize_iterator_type)(const census_context *context, census_context_iterator *iterator); +extern census_context_initialize_iterator_type census_context_initialize_iterator_import; +#define census_context_initialize_iterator census_context_initialize_iterator_import +typedef int(*census_context_next_tag_type)(census_context_iterator *iterator, census_tag *tag); +extern census_context_next_tag_type census_context_next_tag_import; +#define census_context_next_tag census_context_next_tag_import +typedef int(*census_context_get_tag_type)(const census_context *context, const char *key, census_tag *tag); +extern census_context_get_tag_type census_context_get_tag_import; +#define census_context_get_tag census_context_get_tag_import +typedef char *(*census_context_encode_type)(const census_context *context, char *buffer, size_t buf_size, size_t *print_buf_size, size_t *bin_buf_size); +extern census_context_encode_type census_context_encode_import; +#define census_context_encode census_context_encode_import +typedef census_context *(*census_context_decode_type)(const char *buffer, size_t size, const char *bin_buffer, size_t bin_size); +extern census_context_decode_type census_context_decode_import; +#define census_context_decode census_context_decode_import typedef int(*census_trace_mask_type)(const census_context *context); extern census_trace_mask_type census_trace_mask_import; #define census_trace_mask census_trace_mask_import @@ -112,37 +133,10 @@ extern census_get_trace_record_type census_get_trace_record_import; typedef void(*census_trace_scan_end_type)(); extern census_trace_scan_end_type census_trace_scan_end_import; #define census_trace_scan_end census_trace_scan_end_import -typedef census_tag_set *(*census_tag_set_create_type)(const census_tag_set *base, const census_tag *tags, int ntags, census_tag_set_create_status const **status); -extern census_tag_set_create_type census_tag_set_create_import; -#define census_tag_set_create census_tag_set_create_import -typedef void(*census_tag_set_destroy_type)(census_tag_set *tags); -extern census_tag_set_destroy_type census_tag_set_destroy_import; -#define census_tag_set_destroy census_tag_set_destroy_import -typedef const census_tag_set_create_status *(*census_tag_set_get_create_status_type)(const census_tag_set *tags); -extern census_tag_set_get_create_status_type census_tag_set_get_create_status_import; -#define census_tag_set_get_create_status census_tag_set_get_create_status_import -typedef void(*census_tag_set_initialize_iterator_type)(const census_tag_set *tags, census_tag_set_iterator *iterator); -extern census_tag_set_initialize_iterator_type census_tag_set_initialize_iterator_import; -#define census_tag_set_initialize_iterator census_tag_set_initialize_iterator_import -typedef int(*census_tag_set_next_tag_type)(census_tag_set_iterator *iterator, census_tag *tag); -extern census_tag_set_next_tag_type census_tag_set_next_tag_import; -#define census_tag_set_next_tag census_tag_set_next_tag_import -typedef int(*census_tag_set_get_tag_by_key_type)(const census_tag_set *tags, const char *key, census_tag *tag); -extern census_tag_set_get_tag_by_key_type census_tag_set_get_tag_by_key_import; -#define census_tag_set_get_tag_by_key census_tag_set_get_tag_by_key_import -typedef char *(*census_tag_set_encode_type)(const census_tag_set *tags, char *buffer, size_t buf_size, size_t *print_buf_size, size_t *bin_buf_size); -extern census_tag_set_encode_type census_tag_set_encode_import; -#define census_tag_set_encode census_tag_set_encode_import -typedef census_tag_set *(*census_tag_set_decode_type)(const char *buffer, size_t size, const char *bin_buffer, size_t bin_size); -extern census_tag_set_decode_type census_tag_set_decode_import; -#define census_tag_set_decode census_tag_set_decode_import -typedef census_tag_set *(*census_context_tag_set_type)(census_context *context); -extern census_context_tag_set_type census_context_tag_set_import; -#define census_context_tag_set census_context_tag_set_import typedef void(*census_record_values_type)(census_context *context, census_value *values, size_t nvalues); extern census_record_values_type census_record_values_import; #define census_record_values census_record_values_import -typedef census_view *(*census_view_create_type)(uint32_t metric_id, const census_tag_set *tags, const census_aggregation *aggregations, size_t naggregations); +typedef census_view *(*census_view_create_type)(uint32_t metric_id, const census_context *tags, const census_aggregation *aggregations, size_t naggregations); extern census_view_create_type census_view_create_import; #define census_view_create census_view_create_import typedef void(*census_view_delete_type)(census_view *view); @@ -154,7 +148,7 @@ extern census_view_metric_type census_view_metric_import; typedef size_t(*census_view_naggregations_type)(const census_view *view); extern census_view_naggregations_type census_view_naggregations_import; #define census_view_naggregations census_view_naggregations_import -typedef const census_tag_set *(*census_view_tags_type)(const census_view *view); +typedef const census_context *(*census_view_tags_type)(const census_view *view); extern census_view_tags_type census_view_tags_import; #define census_view_tags census_view_tags_import typedef const census_aggregation *(*census_view_aggregrations_type)(const census_view *view); diff --git a/templates/Makefile.template b/templates/Makefile.template index ef17d745e63..1a38e267a7f 100644 --- a/templates/Makefile.template +++ b/templates/Makefile.template @@ -151,15 +151,21 @@ LD = $(LD_$(CONFIG)) endif LDXX ?= $(LDXX_$(CONFIG)) + ifeq ($(SYSTEM),Linux) ifeq ($(origin AR), default) - AR = ar + AR = ar rcs endif - ifeq ($(SYSTEM),Linux) STRIP ?= strip --strip-unneeded else ifeq ($(SYSTEM),Darwin) + ifeq ($(origin AR), default) + AR = libtool -o + endif STRIP ?= strip -x else + ifeq ($(origin AR), default) + AR = ar rcs + endif STRIP ?= strip endif endif @@ -468,6 +474,7 @@ ifeq ($(EMBED_ZLIB),true) ZLIB_DEP = $(LIBDIR)/$(CONFIG)/libz.a ZLIB_MERGE_LIBS = $(LIBDIR)/$(CONFIG)/libz.a + ZLIB_MERGE_OBJS = $(LIBZ_OBJS) CPPFLAGS += -Ithird_party/zlib LDFLAGS += -L$(LIBDIR)/$(CONFIG)/zlib else @@ -510,6 +517,7 @@ ifeq ($(EMBED_OPENSSL),true) OPENSSL_DEP += $(LIBDIR)/$(CONFIG)/libboringssl.a OPENSSL_MERGE_LIBS += $(LIBDIR)/$(CONFIG)/libboringssl.a + OPENSSL_MERGE_OBJS += $(LIBBORINGSSL_OBJS) # need to prefix these to ensure overriding system libraries CPPFLAGS := -Ithird_party/boringssl/include $(CPPFLAGS) else # EMBED_OPENSSL=false @@ -1333,7 +1341,7 @@ % endfor endif - install-pkg-config_c: pr pc_c pc_c_unsecure pc_c_zookeeper + install-pkg-config_c: pc_c pc_c_unsecure pc_c_zookeeper $(E) "[INSTALL] Installing C pkg-config files" $(Q) $(INSTALL) -d $(prefix)/lib/pkgconfig $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/pkgconfig/grpc.pc $(prefix)/lib/pkgconfig/grpc.pc @@ -1474,38 +1482,25 @@ % if lib.language == 'c++': $(PROTOBUF_DEP)\ % endif - $(LIB${lib.name.upper()}_OBJS) + $(LIB${lib.name.upper()}_OBJS) \ + % if lib.get('baselib', False): + $(ZLIB_MERGE_OBJS) \ + % if lib.get('secure', 'check') == True: + $(OPENSSL_MERGE_OBJS) \ + % endif + % endif + $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` $(Q) rm -f $(LIBDIR)/$(CONFIG)/lib${lib.name}.a - $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/lib${lib.name}.a $(LIB${lib.name.upper()}_OBJS) + $(Q) $(AR) $(LIBDIR)/$(CONFIG)/lib${lib.name}.a $(LIB${lib.name.upper()}_OBJS) \ % if lib.get('baselib', False): - $(Q) rm -rf $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name} - $(Q) ( mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}/grpc ; <%text>\ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}/grpc ; <%text>\ - $(AR) x $(LIBDIR)/$(CONFIG)/lib${lib.name}.a ) - $(Q) for l in $(ZLIB_MERGE_LIBS) ; do ( <%text>\ - mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}/zlib ; <%text>\ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}/zlib ; <%text>\ - <%text>$(AR) x $${l} ) ; done - $(Q) for l in $(ZLIB_MERGE_LIBS) ; do ( <%text>\ - mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}/zlib ; <%text>\ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}/zlib ; <%text>\ - <%text>$(AR) x $${l} ) ; done + $(ZLIB_MERGE_OBJS) \ % if lib.get('secure', 'check') == True: - $(Q) for l in $(OPENSSL_MERGE_LIBS) ; do ( <%text>\ - mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}/ssl ; <%text>\ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}/ssl ; <%text>\ - <%text>$(AR) x $${l} ) ; done - $(Q) for l in $(OPENSSL_MERGE_LIBS) ; do ( <%text>\ - mkdir -p $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}/ssl ; <%text>\ - cd $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}/ssl ; <%text>\ - <%text>$(AR) x $${l} ) ; done - % endif - $(Q) rm -f $(LIBDIR)/$(CONFIG)/lib${lib.name}.a $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}/*/__.SYMDEF* - $(Q) ar rcs $(LIBDIR)/$(CONFIG)/lib${lib.name}.a $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}/*/* - $(Q) rm -rf $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name} + $(OPENSSL_MERGE_OBJS) \ + % endif % endif + ifeq ($(SYSTEM),Darwin) $(Q) ranlib $(LIBDIR)/$(CONFIG)/lib${lib.name}.a endif diff --git a/templates/src/python/grpcio/grpc/_cython/imports.generated.c.template b/templates/src/python/grpcio/grpc/_cython/imports.generated.c.template new file mode 100644 index 00000000000..be33280c0ce --- /dev/null +++ b/templates/src/python/grpcio/grpc/_cython/imports.generated.c.template @@ -0,0 +1,52 @@ +%YAML 1.2 +--- | + /* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + + #include + + #include "imports.generated.h" + + #ifdef GPR_WIN32 + + %for api in c_apis: + ${api.name}_type ${api.name}_import; + %endfor + + void pygrpc_load_imports(HMODULE library) { + %for api in c_apis: + ${api.name}_import = (${api.name}_type) GetProcAddress(library, "${api.name}"); + %endfor + } + + #endif /* !GPR_WIN32 */ diff --git a/templates/src/python/grpcio/grpc/_cython/imports.generated.h.template b/templates/src/python/grpcio/grpc/_cython/imports.generated.h.template new file mode 100644 index 00000000000..6866a61caef --- /dev/null +++ b/templates/src/python/grpcio/grpc/_cython/imports.generated.h.template @@ -0,0 +1,70 @@ +%YAML 1.2 +--- | + /* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + + #ifndef PYGRPC_CYTHON_WINDOWS_IMPORTS_H_ + #define PYGRPC_CYTHON_WINDOWS_IMPORTS_H_ + + #include + + #ifdef GPR_WIN32 + + #include + + %for header in sorted(set(api.header for api in c_apis)): + #include <${'/'.join(header.split('/')[1:])}> + %endfor + + %for api in c_apis: + typedef ${api.return_type}(*${api.name}_type)(${api.arguments}); + extern ${api.name}_type ${api.name}_import; + #define ${api.name} ${api.name}_import + %endfor + + void pygrpc_load_imports(HMODULE library); + + #else /* !GPR_WIN32 */ + + #include + #include + #include + #include + #include + #include + #include + #include + + #endif /* !GPR_WIN32 */ + + #endif diff --git a/test/core/census/tag_set_test.c b/test/core/census/context_test.c similarity index 54% rename from test/core/census/tag_set_test.c rename to test/core/census/context_test.c index 1056e98d55c..63e7103ddce 100644 --- a/test/core/census/tag_set_test.c +++ b/test/core/census/context_test.c @@ -31,7 +31,7 @@ * */ -// Test census_tag_set functions, including encoding/decoding +// Test census_context functions, including encoding/decoding #include #include @@ -46,7 +46,7 @@ static uint8_t one_byte_val = 7; static uint32_t four_byte_val = 0x12345678; static uint64_t eight_byte_val = 0x1234567890abcdef; -// A set of tags Used to create a basic tag_set for testing. Each tag has a +// A set of tags Used to create a basic context for testing. Each tag has a // unique set of flags. Note that replace_add_delete_test() relies on specific // offsets into this array - if you add or delete entries, you will also need // to change the test. @@ -65,7 +65,7 @@ static census_tag basic_tags[BASIC_TAG_COUNT] = { /* 7 */ {"k7", (char *)&four_byte_val, 4, CENSUS_TAG_PROPAGATE | CENSUS_TAG_STATS | CENSUS_TAG_BINARY}}; -// Set of tags used to modify the basic tag_set. Note that +// Set of tags used to modify the basic context. Note that // replace_add_delete_test() relies on specific offsets into this array - if // you add or delete entries, you will also need to change the test. Other // tests that rely on specific instances have XXX_XXX_OFFSET definitions (also @@ -99,35 +99,34 @@ static bool compare_tag(const census_tag *t1, const census_tag *t2) { t1->flags == t2->flags); } -// Utility function to validate a tag exists in tag set. -static bool validate_tag(const census_tag_set *cts, const census_tag *tag) { +// Utility function to validate a tag exists in context. +static bool validate_tag(const census_context *context, const census_tag *tag) { census_tag tag2; - if (census_tag_set_get_tag_by_key(cts, tag->key, &tag2) != 1) return false; + if (census_context_get_tag(context, tag->key, &tag2) != 1) return false; return compare_tag(tag, &tag2); } -// Create an empty tag_set. +// Create an empty context. static void empty_test(void) { - struct census_tag_set *cts = census_tag_set_create(NULL, NULL, 0, NULL); - GPR_ASSERT(cts != NULL); - const census_tag_set_create_status *status = - census_tag_set_get_create_status(cts); - census_tag_set_create_status expected = {0, 0, 0, 0, 0, 0, 0, 0}; + struct census_context *context = census_context_create(NULL, NULL, 0, NULL); + GPR_ASSERT(context != NULL); + const census_context_status *status = census_context_get_status(context); + census_context_status expected = {0, 0, 0, 0, 0, 0, 0, 0}; GPR_ASSERT(memcmp(status, &expected, sizeof(expected)) == 0); - census_tag_set_destroy(cts); + census_context_destroy(context); } -// Test create and iteration over basic tag set. +// Test create and iteration over basic context. static void basic_test(void) { - const census_tag_set_create_status *status; - struct census_tag_set *cts = - census_tag_set_create(NULL, basic_tags, BASIC_TAG_COUNT, &status); - census_tag_set_create_status expected = {2, 2, 4, 0, 8, 0, 0, 0}; + const census_context_status *status; + struct census_context *context = + census_context_create(NULL, basic_tags, BASIC_TAG_COUNT, &status); + census_context_status expected = {2, 2, 4, 0, 8, 0, 0, 0}; GPR_ASSERT(memcmp(status, &expected, sizeof(expected)) == 0); - census_tag_set_iterator it; - census_tag_set_initialize_iterator(cts, &it); + census_context_iterator it; + census_context_initialize_iterator(context, &it); census_tag tag; - while (census_tag_set_next_tag(&it, &tag)) { + while (census_context_next_tag(&it, &tag)) { // can't rely on tag return order: make sure it matches exactly one. int matches = 0; for (int i = 0; i < BASIC_TAG_COUNT; i++) { @@ -135,29 +134,28 @@ static void basic_test(void) { } GPR_ASSERT(matches == 1); } - census_tag_set_destroy(cts); + census_context_destroy(context); } -// Test that census_tag_set_get_tag_by_key(). +// Test census_context_get_tag(). static void lookup_by_key_test(void) { - struct census_tag_set *cts = - census_tag_set_create(NULL, basic_tags, BASIC_TAG_COUNT, NULL); + struct census_context *context = + census_context_create(NULL, basic_tags, BASIC_TAG_COUNT, NULL); census_tag tag; for (int i = 0; i < BASIC_TAG_COUNT; i++) { - GPR_ASSERT(census_tag_set_get_tag_by_key(cts, basic_tags[i].key, &tag) == - 1); + GPR_ASSERT(census_context_get_tag(context, basic_tags[i].key, &tag) == 1); GPR_ASSERT(compare_tag(&tag, &basic_tags[i])); } // non-existent keys - GPR_ASSERT(census_tag_set_get_tag_by_key(cts, "key", &tag) == 0); - GPR_ASSERT(census_tag_set_get_tag_by_key(cts, "key01", &tag) == 0); - GPR_ASSERT(census_tag_set_get_tag_by_key(cts, "k9", &tag) == 0); - GPR_ASSERT(census_tag_set_get_tag_by_key(cts, "random", &tag) == 0); - GPR_ASSERT(census_tag_set_get_tag_by_key(cts, "", &tag) == 0); - census_tag_set_destroy(cts); + GPR_ASSERT(census_context_get_tag(context, "key", &tag) == 0); + GPR_ASSERT(census_context_get_tag(context, "key01", &tag) == 0); + GPR_ASSERT(census_context_get_tag(context, "k9", &tag) == 0); + GPR_ASSERT(census_context_get_tag(context, "random", &tag) == 0); + GPR_ASSERT(census_context_get_tag(context, "", &tag) == 0); + census_context_destroy(context); } -// Try creating tag set with invalid entries. +// Try creating context with invalid entries. static void invalid_test(void) { char key[300]; memset(key, 'k', 299); @@ -168,155 +166,156 @@ static void invalid_test(void) { // long keys, short value. Key lengths (including terminator) should be // <= 255 (CENSUS_MAX_TAG_KV_LEN) GPR_ASSERT(strlen(key) == 299); - const census_tag_set_create_status *status; - struct census_tag_set *cts = census_tag_set_create(NULL, &tag, 1, &status); - census_tag_set_create_status expected = {0, 0, 0, 0, 0, 0, 1, 0}; + const census_context_status *status; + struct census_context *context = + census_context_create(NULL, &tag, 1, &status); + census_context_status expected = {0, 0, 0, 0, 0, 0, 1, 0}; GPR_ASSERT(memcmp(status, &expected, sizeof(expected)) == 0); - census_tag_set_destroy(cts); + census_context_destroy(context); key[CENSUS_MAX_TAG_KV_LEN] = 0; GPR_ASSERT(strlen(key) == CENSUS_MAX_TAG_KV_LEN); - cts = census_tag_set_create(NULL, &tag, 1, &status); + context = census_context_create(NULL, &tag, 1, &status); GPR_ASSERT(memcmp(status, &expected, sizeof(expected)) == 0); - census_tag_set_destroy(cts); + census_context_destroy(context); key[CENSUS_MAX_TAG_KV_LEN - 1] = 0; GPR_ASSERT(strlen(key) == CENSUS_MAX_TAG_KV_LEN - 1); - cts = census_tag_set_create(NULL, &tag, 1, &status); - census_tag_set_create_status expected2 = {0, 0, 1, 0, 1, 0, 0, 0}; + context = census_context_create(NULL, &tag, 1, &status); + census_context_status expected2 = {0, 0, 1, 0, 1, 0, 0, 0}; GPR_ASSERT(memcmp(status, &expected2, sizeof(expected2)) == 0); - census_tag_set_destroy(cts); + census_context_destroy(context); // now try with long values tag.value_len = 300; - cts = census_tag_set_create(NULL, &tag, 1, &status); + context = census_context_create(NULL, &tag, 1, &status); GPR_ASSERT(memcmp(status, &expected, sizeof(expected)) == 0); - census_tag_set_destroy(cts); + census_context_destroy(context); tag.value_len = CENSUS_MAX_TAG_KV_LEN + 1; - cts = census_tag_set_create(NULL, &tag, 1, &status); + context = census_context_create(NULL, &tag, 1, &status); GPR_ASSERT(memcmp(status, &expected, sizeof(expected)) == 0); - census_tag_set_destroy(cts); + census_context_destroy(context); tag.value_len = CENSUS_MAX_TAG_KV_LEN; - cts = census_tag_set_create(NULL, &tag, 1, &status); + context = census_context_create(NULL, &tag, 1, &status); GPR_ASSERT(memcmp(status, &expected2, sizeof(expected2)) == 0); - census_tag_set_destroy(cts); + census_context_destroy(context); // 0 length key. key[0] = 0; - cts = census_tag_set_create(NULL, &tag, 1, &status); + context = census_context_create(NULL, &tag, 1, &status); GPR_ASSERT(memcmp(status, &expected, sizeof(expected)) == 0); - census_tag_set_destroy(cts); + census_context_destroy(context); } -// Make a copy of a tag set +// Make a copy of a context static void copy_test(void) { - struct census_tag_set *cts = - census_tag_set_create(NULL, basic_tags, BASIC_TAG_COUNT, NULL); - const census_tag_set_create_status *status; - struct census_tag_set *cts2 = census_tag_set_create(cts, NULL, 0, &status); - census_tag_set_create_status expected = {2, 2, 4, 0, 0, 0, 0, 0}; + struct census_context *context = + census_context_create(NULL, basic_tags, BASIC_TAG_COUNT, NULL); + const census_context_status *status; + struct census_context *context2 = + census_context_create(context, NULL, 0, &status); + census_context_status expected = {2, 2, 4, 0, 0, 0, 0, 0}; GPR_ASSERT(memcmp(status, &expected, sizeof(expected)) == 0); for (int i = 0; i < BASIC_TAG_COUNT; i++) { census_tag tag; - GPR_ASSERT(census_tag_set_get_tag_by_key(cts2, basic_tags[i].key, &tag) == - 1); + GPR_ASSERT(census_context_get_tag(context2, basic_tags[i].key, &tag) == 1); GPR_ASSERT(compare_tag(&tag, &basic_tags[i])); } - census_tag_set_destroy(cts); - census_tag_set_destroy(cts2); + census_context_destroy(context); + census_context_destroy(context2); } // replace a single tag value static void replace_value_test(void) { - struct census_tag_set *cts = - census_tag_set_create(NULL, basic_tags, BASIC_TAG_COUNT, NULL); - const census_tag_set_create_status *status; - struct census_tag_set *cts2 = census_tag_set_create( - cts, modify_tags + REPLACE_VALUE_OFFSET, 1, &status); - census_tag_set_create_status expected = {2, 2, 4, 0, 0, 1, 0, 0}; + struct census_context *context = + census_context_create(NULL, basic_tags, BASIC_TAG_COUNT, NULL); + const census_context_status *status; + struct census_context *context2 = census_context_create( + context, modify_tags + REPLACE_VALUE_OFFSET, 1, &status); + census_context_status expected = {2, 2, 4, 0, 0, 1, 0, 0}; GPR_ASSERT(memcmp(status, &expected, sizeof(expected)) == 0); census_tag tag; - GPR_ASSERT(census_tag_set_get_tag_by_key( - cts2, modify_tags[REPLACE_VALUE_OFFSET].key, &tag) == 1); + GPR_ASSERT(census_context_get_tag( + context2, modify_tags[REPLACE_VALUE_OFFSET].key, &tag) == 1); GPR_ASSERT(compare_tag(&tag, &modify_tags[REPLACE_VALUE_OFFSET])); - census_tag_set_destroy(cts); - census_tag_set_destroy(cts2); + census_context_destroy(context); + census_context_destroy(context2); } // replace a single tags flags static void replace_flags_test(void) { - struct census_tag_set *cts = - census_tag_set_create(NULL, basic_tags, BASIC_TAG_COUNT, NULL); - const census_tag_set_create_status *status; - struct census_tag_set *cts2 = - census_tag_set_create(cts, modify_tags + REPLACE_FLAG_OFFSET, 1, &status); - census_tag_set_create_status expected = {1, 2, 5, 0, 0, 1, 0, 0}; + struct census_context *context = + census_context_create(NULL, basic_tags, BASIC_TAG_COUNT, NULL); + const census_context_status *status; + struct census_context *context2 = census_context_create( + context, modify_tags + REPLACE_FLAG_OFFSET, 1, &status); + census_context_status expected = {1, 2, 5, 0, 0, 1, 0, 0}; GPR_ASSERT(memcmp(status, &expected, sizeof(expected)) == 0); census_tag tag; - GPR_ASSERT(census_tag_set_get_tag_by_key( - cts2, modify_tags[REPLACE_FLAG_OFFSET].key, &tag) == 1); + GPR_ASSERT(census_context_get_tag( + context2, modify_tags[REPLACE_FLAG_OFFSET].key, &tag) == 1); GPR_ASSERT(compare_tag(&tag, &modify_tags[REPLACE_FLAG_OFFSET])); - census_tag_set_destroy(cts); - census_tag_set_destroy(cts2); + census_context_destroy(context); + census_context_destroy(context2); } // delete a single tag. static void delete_tag_test(void) { - struct census_tag_set *cts = - census_tag_set_create(NULL, basic_tags, BASIC_TAG_COUNT, NULL); - const census_tag_set_create_status *status; - struct census_tag_set *cts2 = - census_tag_set_create(cts, modify_tags + DELETE_TAG_OFFSET, 1, &status); - census_tag_set_create_status expected = {2, 1, 4, 1, 0, 0, 0, 0}; + struct census_context *context = + census_context_create(NULL, basic_tags, BASIC_TAG_COUNT, NULL); + const census_context_status *status; + struct census_context *context2 = census_context_create( + context, modify_tags + DELETE_TAG_OFFSET, 1, &status); + census_context_status expected = {2, 1, 4, 1, 0, 0, 0, 0}; GPR_ASSERT(memcmp(status, &expected, sizeof(expected)) == 0); census_tag tag; - GPR_ASSERT(census_tag_set_get_tag_by_key( - cts2, modify_tags[DELETE_TAG_OFFSET].key, &tag) == 0); - census_tag_set_destroy(cts); - census_tag_set_destroy(cts2); + GPR_ASSERT(census_context_get_tag( + context2, modify_tags[DELETE_TAG_OFFSET].key, &tag) == 0); + census_context_destroy(context); + census_context_destroy(context2); } // add a single new tag. static void add_tag_test(void) { - struct census_tag_set *cts = - census_tag_set_create(NULL, basic_tags, BASIC_TAG_COUNT, NULL); - const census_tag_set_create_status *status; - struct census_tag_set *cts2 = - census_tag_set_create(cts, modify_tags + ADD_TAG_OFFSET, 1, &status); - census_tag_set_create_status expected = {2, 2, 5, 0, 1, 0, 0, 0}; + struct census_context *context = + census_context_create(NULL, basic_tags, BASIC_TAG_COUNT, NULL); + const census_context_status *status; + struct census_context *context2 = + census_context_create(context, modify_tags + ADD_TAG_OFFSET, 1, &status); + census_context_status expected = {2, 2, 5, 0, 1, 0, 0, 0}; GPR_ASSERT(memcmp(status, &expected, sizeof(expected)) == 0); census_tag tag; - GPR_ASSERT(census_tag_set_get_tag_by_key( - cts2, modify_tags[ADD_TAG_OFFSET].key, &tag) == 1); + GPR_ASSERT(census_context_get_tag(context2, modify_tags[ADD_TAG_OFFSET].key, + &tag) == 1); GPR_ASSERT(compare_tag(&tag, &modify_tags[ADD_TAG_OFFSET])); - census_tag_set_destroy(cts); - census_tag_set_destroy(cts2); + census_context_destroy(context); + census_context_destroy(context2); } // test many changes at once. static void replace_add_delete_test(void) { - struct census_tag_set *cts = - census_tag_set_create(NULL, basic_tags, BASIC_TAG_COUNT, NULL); - const census_tag_set_create_status *status; - struct census_tag_set *cts2 = - census_tag_set_create(cts, modify_tags, MODIFY_TAG_COUNT, &status); - census_tag_set_create_status expected = {2, 1, 6, 2, 3, 4, 0, 2}; + struct census_context *context = + census_context_create(NULL, basic_tags, BASIC_TAG_COUNT, NULL); + const census_context_status *status; + struct census_context *context2 = + census_context_create(context, modify_tags, MODIFY_TAG_COUNT, &status); + census_context_status expected = {2, 1, 6, 2, 3, 4, 0, 2}; GPR_ASSERT(memcmp(status, &expected, sizeof(expected)) == 0); - // validate tag set contents. Use specific indices into the two arrays + // validate context contents. Use specific indices into the two arrays // holding tag values. - GPR_ASSERT(validate_tag(cts2, &basic_tags[3])); - GPR_ASSERT(validate_tag(cts2, &basic_tags[4])); - GPR_ASSERT(validate_tag(cts2, &modify_tags[0])); - GPR_ASSERT(validate_tag(cts2, &modify_tags[1])); - GPR_ASSERT(validate_tag(cts2, &modify_tags[6])); - GPR_ASSERT(validate_tag(cts2, &modify_tags[7])); - GPR_ASSERT(validate_tag(cts2, &modify_tags[8])); - GPR_ASSERT(validate_tag(cts2, &modify_tags[9])); - GPR_ASSERT(validate_tag(cts2, &modify_tags[10])); - GPR_ASSERT(!validate_tag(cts2, &basic_tags[0])); - GPR_ASSERT(!validate_tag(cts2, &basic_tags[1])); - GPR_ASSERT(!validate_tag(cts2, &basic_tags[2])); - GPR_ASSERT(!validate_tag(cts2, &basic_tags[5])); - GPR_ASSERT(!validate_tag(cts2, &basic_tags[6])); - GPR_ASSERT(!validate_tag(cts2, &basic_tags[7])); - census_tag_set_destroy(cts); - census_tag_set_destroy(cts2); + GPR_ASSERT(validate_tag(context2, &basic_tags[3])); + GPR_ASSERT(validate_tag(context2, &basic_tags[4])); + GPR_ASSERT(validate_tag(context2, &modify_tags[0])); + GPR_ASSERT(validate_tag(context2, &modify_tags[1])); + GPR_ASSERT(validate_tag(context2, &modify_tags[6])); + GPR_ASSERT(validate_tag(context2, &modify_tags[7])); + GPR_ASSERT(validate_tag(context2, &modify_tags[8])); + GPR_ASSERT(validate_tag(context2, &modify_tags[9])); + GPR_ASSERT(validate_tag(context2, &modify_tags[10])); + GPR_ASSERT(!validate_tag(context2, &basic_tags[0])); + GPR_ASSERT(!validate_tag(context2, &basic_tags[1])); + GPR_ASSERT(!validate_tag(context2, &basic_tags[2])); + GPR_ASSERT(!validate_tag(context2, &basic_tags[5])); + GPR_ASSERT(!validate_tag(context2, &basic_tags[6])); + GPR_ASSERT(!validate_tag(context2, &basic_tags[7])); + census_context_destroy(context); + census_context_destroy(context2); } #define BUF_SIZE 200 @@ -324,38 +323,37 @@ static void replace_add_delete_test(void) { // test encode/decode. static void encode_decode_test(void) { char buffer[BUF_SIZE]; - struct census_tag_set *cts = - census_tag_set_create(NULL, basic_tags, BASIC_TAG_COUNT, NULL); + struct census_context *context = + census_context_create(NULL, basic_tags, BASIC_TAG_COUNT, NULL); size_t print_bsize; size_t bin_bsize; // Test with too small a buffer - GPR_ASSERT(census_tag_set_encode(cts, buffer, 2, &print_bsize, &bin_bsize) == - NULL); - char *b_buffer = - census_tag_set_encode(cts, buffer, BUF_SIZE, &print_bsize, &bin_bsize); + GPR_ASSERT(census_context_encode(context, buffer, 2, &print_bsize, + &bin_bsize) == NULL); + char *b_buffer = census_context_encode(context, buffer, BUF_SIZE, + &print_bsize, &bin_bsize); GPR_ASSERT(b_buffer != NULL && print_bsize > 0 && bin_bsize > 0 && print_bsize + bin_bsize <= BUF_SIZE && b_buffer == buffer + print_bsize); - census_tag_set *cts2 = - census_tag_set_decode(buffer, print_bsize, b_buffer, bin_bsize); - GPR_ASSERT(cts2 != NULL); - const census_tag_set_create_status *status = - census_tag_set_get_create_status(cts2); - census_tag_set_create_status expected = {2, 2, 0, 0, 0, 0, 0, 0}; + census_context *context2 = + census_context_decode(buffer, print_bsize, b_buffer, bin_bsize); + GPR_ASSERT(context2 != NULL); + const census_context_status *status = census_context_get_status(context2); + census_context_status expected = {2, 2, 0, 0, 0, 0, 0, 0}; GPR_ASSERT(memcmp(status, &expected, sizeof(expected)) == 0); for (int i = 0; i < BASIC_TAG_COUNT; i++) { census_tag tag; if (CENSUS_TAG_IS_PROPAGATED(basic_tags[i].flags)) { - GPR_ASSERT(census_tag_set_get_tag_by_key(cts2, basic_tags[i].key, &tag) == + GPR_ASSERT(census_context_get_tag(context2, basic_tags[i].key, &tag) == 1); GPR_ASSERT(compare_tag(&tag, &basic_tags[i])); } else { - GPR_ASSERT(census_tag_set_get_tag_by_key(cts2, basic_tags[i].key, &tag) == + GPR_ASSERT(census_context_get_tag(context2, basic_tags[i].key, &tag) == 0); } } - census_tag_set_destroy(cts2); - census_tag_set_destroy(cts); + census_context_destroy(context2); + census_context_destroy(context); } int main(int argc, char *argv[]) { diff --git a/test/core/surface/server_chttp2_test.c b/test/core/surface/server_chttp2_test.c index 0a3652a27a8..84b345bb504 100644 --- a/test/core/surface/server_chttp2_test.c +++ b/test/core/surface/server_chttp2_test.c @@ -1,6 +1,6 @@ /* * - * Copyright 2015, Google Inc. + * Copyright 2015-2016, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without diff --git a/test/cpp/end2end/hybrid_end2end_test.cc b/test/cpp/end2end/hybrid_end2end_test.cc index f8405627f9f..c72e20628f9 100644 --- a/test/cpp/end2end/hybrid_end2end_test.cc +++ b/test/cpp/end2end/hybrid_end2end_test.cc @@ -216,7 +216,7 @@ class HybridEnd2endTest : public ::testing::Test { } // Create a separate cq for each potential handler. for (int i = 0; i < 5; i++) { - cqs_.push_back(std::move(builder.AddCompletionQueue())); + cqs_.push_back(builder.AddCompletionQueue()); } server_ = builder.BuildAndStart(); } diff --git a/test/cpp/end2end/thread_stress_test.cc b/test/cpp/end2end/thread_stress_test.cc index 4e8860e8432..4c7caa9b878 100644 --- a/test/cpp/end2end/thread_stress_test.cc +++ b/test/cpp/end2end/thread_stress_test.cc @@ -45,6 +45,7 @@ #include #include +#include "src/core/surface/api_trace.h" #include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h" #include "src/proto/grpc/testing/echo.grpc.pb.h" #include "test/core/util/port.h" @@ -54,6 +55,9 @@ using grpc::testing::EchoRequest; using grpc::testing::EchoResponse; using std::chrono::system_clock; +const int kNumThreads = 100; // Number of threads +const int kNumRpcs = 1000; // Number of RPCs per thread + namespace grpc { namespace testing { @@ -84,7 +88,7 @@ class TestServiceImpl : public ::grpc::testing::EchoTestService::Service { MaybeEchoDeadline(context, request, response); if (request->has_param() && request->param().client_cancel_after_us()) { { - std::unique_lock lock(mu_); + unique_lock lock(mu_); signal_client_ = true; } while (!context->IsCancelled()) { @@ -149,13 +153,13 @@ class TestServiceImpl : public ::grpc::testing::EchoTestService::Service { } bool signal_client() { - std::unique_lock lock(mu_); + unique_lock lock(mu_); return signal_client_; } private: bool signal_client_; - std::mutex mu_; + mutex mu_; }; class TestServiceImplDupPkg @@ -168,11 +172,10 @@ class TestServiceImplDupPkg } }; -class End2endTest : public ::testing::Test { - protected: - End2endTest() : kMaxMessageSize_(8192) {} - - void SetUp() GRPC_OVERRIDE { +class CommonStressTest { + public: + CommonStressTest() : kMaxMessageSize_(8192) {} + void SetUp() { int port = grpc_pick_unused_port_or_die(); server_address_ << "localhost:" << port; // Setup server @@ -185,15 +188,15 @@ class End2endTest : public ::testing::Test { builder.RegisterService(&dup_pkg_service_); server_ = builder.BuildAndStart(); } - - void TearDown() GRPC_OVERRIDE { server_->Shutdown(); } - + void TearDown() { server_->Shutdown(); } void ResetStub() { std::shared_ptr channel = CreateChannel(server_address_.str(), InsecureChannelCredentials()); stub_ = grpc::testing::EchoTestService::NewStub(channel); } + grpc::testing::EchoTestService::Stub* GetStub() { return stub_.get(); } + private: std::unique_ptr stub_; std::unique_ptr server_; std::ostringstream server_address_; @@ -202,6 +205,16 @@ class End2endTest : public ::testing::Test { TestServiceImplDupPkg dup_pkg_service_; }; +class End2endTest : public ::testing::Test { + protected: + End2endTest() {} + void SetUp() GRPC_OVERRIDE { common_.SetUp(); } + void TearDown() GRPC_OVERRIDE { common_.TearDown(); } + void ResetStub() { common_.ResetStub(); } + + CommonStressTest common_; +}; + static void SendRpc(grpc::testing::EchoTestService::Stub* stub, int num_rpcs) { EchoRequest request; EchoResponse response; @@ -216,17 +229,113 @@ static void SendRpc(grpc::testing::EchoTestService::Stub* stub, int num_rpcs) { } TEST_F(End2endTest, ThreadStress) { - ResetStub(); + common_.ResetStub(); std::vector threads; - for (int i = 0; i < 100; ++i) { - threads.push_back(new std::thread(SendRpc, stub_.get(), 1000)); + for (int i = 0; i < kNumThreads; ++i) { + threads.push_back(new std::thread(SendRpc, common_.GetStub(), kNumRpcs)); } - for (int i = 0; i < 100; ++i) { + for (int i = 0; i < kNumThreads; ++i) { threads[i]->join(); delete threads[i]; } } +class AsyncClientEnd2endTest : public ::testing::Test { + protected: + AsyncClientEnd2endTest() : rpcs_outstanding_(0) {} + + void SetUp() GRPC_OVERRIDE { common_.SetUp(); } + void TearDown() GRPC_OVERRIDE { + void* ignored_tag; + bool ignored_ok; + while (cq_.Next(&ignored_tag, &ignored_ok)) + ; + common_.TearDown(); + } + + void Wait() { + unique_lock l(mu_); + while (rpcs_outstanding_ != 0) { + cv_.wait(l); + } + + cq_.Shutdown(); + } + + struct AsyncClientCall { + EchoResponse response; + ClientContext context; + Status status; + std::unique_ptr> response_reader; + }; + + void AsyncSendRpc(int num_rpcs) { + for (int i = 0; i < num_rpcs; ++i) { + AsyncClientCall* call = new AsyncClientCall; + EchoRequest request; + request.set_message("Hello"); + call->response_reader = + common_.GetStub()->AsyncEcho(&call->context, request, &cq_); + call->response_reader->Finish(&call->response, &call->status, + (void*)call); + + unique_lock l(mu_); + rpcs_outstanding_++; + } + } + + void AsyncCompleteRpc() { + while (true) { + void* got_tag; + bool ok = false; + if (!cq_.Next(&got_tag, &ok)) break; + AsyncClientCall* call = static_cast(got_tag); + GPR_ASSERT(ok); + delete call; + + bool notify; + { + unique_lock l(mu_); + rpcs_outstanding_--; + notify = (rpcs_outstanding_ == 0); + } + if (notify) { + cv_.notify_all(); + } + } + } + + CommonStressTest common_; + CompletionQueue cq_; + mutex mu_; + condition_variable cv_; + int rpcs_outstanding_; +}; + +TEST_F(AsyncClientEnd2endTest, ThreadStress) { + common_.ResetStub(); + std::vector send_threads, completion_threads; + for (int i = 0; i < kNumThreads / 2; ++i) { + completion_threads.push_back(new std::thread( + &AsyncClientEnd2endTest_ThreadStress_Test::AsyncCompleteRpc, this)); + } + for (int i = 0; i < kNumThreads / 2; ++i) { + send_threads.push_back( + new std::thread(&AsyncClientEnd2endTest_ThreadStress_Test::AsyncSendRpc, + this, kNumRpcs)); + } + for (int i = 0; i < kNumThreads / 2; ++i) { + send_threads[i]->join(); + delete send_threads[i]; + } + + Wait(); + for (int i = 0; i < kNumThreads / 2; ++i) { + completion_threads[i]->join(); + delete completion_threads[i]; + } +} + } // namespace testing } // namespace grpc diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc index f3f8f37051b..6b6294ba518 100644 --- a/test/cpp/qps/client_async.cc +++ b/test/cpp/qps/client_async.cc @@ -96,7 +96,8 @@ class ClientRpcContextUnaryImpl : public ClientRpcContext { std::function< std::unique_ptr>( BenchmarkService::Stub*, grpc::ClientContext*, const RequestType&, - CompletionQueue*)> start_req, + CompletionQueue*)> + start_req, std::function on_done) : ClientRpcContext(channel_id), context_(), @@ -142,7 +143,8 @@ class ClientRpcContextUnaryImpl : public ClientRpcContext { std::function callback_; std::function>( BenchmarkService::Stub*, grpc::ClientContext*, const RequestType&, - CompletionQueue*)> start_req_; + CompletionQueue*)> + start_req_; grpc::Status status_; double start_; std::unique_ptr> @@ -162,11 +164,12 @@ class AsyncClient : public ClientImpl { using ClientImpl::cores_; using ClientImpl::channels_; using ClientImpl::request_; - AsyncClient(const ClientConfig& config, - std::function setup_ctx, - std::function(std::shared_ptr)> - create_stub) + AsyncClient( + const ClientConfig& config, + std::function + setup_ctx, + std::function(std::shared_ptr)> + create_stub) : ClientImpl(config, create_stub), num_async_threads_(NumThreads(config)), channel_lock_(new std::mutex[config.client_channels()]), @@ -408,7 +411,8 @@ class ClientRpcContextStreamingImpl : public ClientRpcContext { std::function>( BenchmarkService::Stub*, grpc::ClientContext*, CompletionQueue*, - void*)> start_req, + void*)> + start_req, std::function on_done) : ClientRpcContext(channel_id), context_(), @@ -460,10 +464,10 @@ class ClientRpcContextStreamingImpl : public ClientRpcContext { ResponseType response_; bool (ClientRpcContextStreamingImpl::*next_state_)(bool, Histogram*); std::function callback_; - std::function< - std::unique_ptr>( - BenchmarkService::Stub*, grpc::ClientContext*, CompletionQueue*, - void*)> start_req_; + std::function>( + BenchmarkService::Stub*, grpc::ClientContext*, CompletionQueue*, void*)> + start_req_; grpc::Status status_; double start_; std::unique_ptr> @@ -507,7 +511,8 @@ class ClientRpcContextGenericStreamingImpl : public ClientRpcContext { int channel_id, grpc::GenericStub* stub, const ByteBuffer& req, std::function( grpc::GenericStub*, grpc::ClientContext*, - const grpc::string& method_name, CompletionQueue*, void*)> start_req, + const grpc::string& method_name, CompletionQueue*, void*)> + start_req, std::function on_done) : ClientRpcContext(channel_id), context_(), @@ -564,7 +569,8 @@ class ClientRpcContextGenericStreamingImpl : public ClientRpcContext { std::function callback_; std::function( grpc::GenericStub*, grpc::ClientContext*, const grpc::string&, - CompletionQueue*, void*)> start_req_; + CompletionQueue*, void*)> + start_req_; grpc::Status status_; double start_; std::unique_ptr stream_; diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 337d628942e..e91b47c6f4b 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -953,7 +953,6 @@ src/core/support/string_win32.h \ src/core/support/thd_internal.h \ src/core/support/time_precise.h \ src/core/census/aggregation.h \ -src/core/census/context.h \ src/core/census/rpc_metric_id.h \ src/core/httpcli/httpcli_security_connector.c \ src/core/security/base64.c \ @@ -1150,7 +1149,6 @@ src/core/census/context.c \ src/core/census/initialize.c \ src/core/census/operation.c \ src/core/census/placeholders.c \ -src/core/census/tag_set.c \ src/core/census/tracing.c # This tag can be used to specify the character encoding of the source files diff --git a/tools/jenkins/build_packages.sh b/tools/jenkins/build_packages.sh old mode 100644 new mode 100755 diff --git a/tools/run_tests/artifact_targets.py b/tools/run_tests/artifact_targets.py index 317111e4df8..b37f968c064 100644 --- a/tools/run_tests/artifact_targets.py +++ b/tools/run_tests/artifact_targets.py @@ -96,13 +96,19 @@ class PythonArtifact: if self.platform == 'windows': raise Exception('Not supported yet.') else: + environ = {} if self.platform == 'linux': + if self.arch == 'x86': + environ['SETARCH_CMD'] = 'linux32' return create_docker_jobspec(self.name, 'tools/dockerfile/grpc_artifact_linux_%s' % self.arch, - 'tools/run_tests/build_artifact_python.sh') + 'tools/run_tests/build_artifact_python.sh', + environ=environ) else: + environ['SKIP_PIP_INSTALL'] = 'TRUE' return create_jobspec(self.name, - ['tools/run_tests/build_artifact_python.sh']) + ['tools/run_tests/build_artifact_python.sh'], + environ=environ) def __str__(self): return self.name @@ -127,7 +133,7 @@ class RubyArtifact: if self.platform == 'linux': environ = {} if self.arch == 'x86': - environ['SETARCH_CMD'] = 'i386' + environ['SETARCH_CMD'] = 'linux32' return create_docker_jobspec(self.name, 'tools/dockerfile/grpc_artifact_linux_%s' % self.arch, 'tools/run_tests/build_artifact_ruby.sh', @@ -227,5 +233,7 @@ def targets(): for arch in ('x86', 'x64')] + [PythonArtifact('linux', 'x86'), PythonArtifact('linux', 'x64'), + PythonArtifact('macos', 'x64'), RubyArtifact('linux', 'x86'), - RubyArtifact('linux', 'x64')]) + RubyArtifact('linux', 'x64'), + RubyArtifact('macos', 'x64')]) diff --git a/tools/run_tests/build_artifact_python.sh b/tools/run_tests/build_artifact_python.sh index 0ff6b2f8c05..48cf390f696 100755 --- a/tools/run_tests/build_artifact_python.sh +++ b/tools/run_tests/build_artifact_python.sh @@ -32,12 +32,14 @@ set -ex cd $(dirname $0)/../.. -pip install --upgrade six -pip install --upgrade setuptools +if [ "$SKIP_PIP_INSTALL" == "" ] +then + pip install --upgrade six + pip install --upgrade setuptools + pip install -rrequirements.txt +fi -pip install -rrequirements.txt - -GRPC_PYTHON_BUILD_WITH_CYTHON=1 python setup.py \ +GRPC_PYTHON_BUILD_WITH_CYTHON=1 ${SETARCH_CMD} python setup.py \ bdist_wheel \ sdist \ bdist_egg_grpc_custom diff --git a/tools/run_tests/build_artifact_ruby.sh b/tools/run_tests/build_artifact_ruby.sh index 8f722ee420d..482d128be3b 100755 --- a/tools/run_tests/build_artifact_ruby.sh +++ b/tools/run_tests/build_artifact_ruby.sh @@ -32,7 +32,7 @@ set -ex cd $(dirname $0)/../.. -bundle install +${SETARCH_CMD} bundle install ${SETARCH_CMD} rake native gem diff --git a/tools/run_tests/build_package_node.sh b/tools/run_tests/build_package_node.sh old mode 100644 new mode 100755 index 137d914cb3d..13587402647 --- a/tools/run_tests/build_package_node.sh +++ b/tools/run_tests/build_package_node.sh @@ -32,6 +32,7 @@ set -ex cd $(dirname $0)/../.. +mkdir -p artifacts/ cp -r $EXTERNAL_GIT_ROOT/architecture={x86,x64},language=node,platform={windows,linux,macos}/artifacts/* artifacts/ || true npm pack diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 76065e99c79..d2938ae3cab 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -61,6 +61,18 @@ "test/core/transport/chttp2/bin_encoder_test.c" ] }, + { + "deps": [ + "grpc", + "grpc_test_util" + ], + "headers": [], + "language": "c", + "name": "census_context_test", + "src": [ + "test/core/census/context_test.c" + ] + }, { "deps": [ "grpc", @@ -981,18 +993,6 @@ "test/core/iomgr/socket_utils_test.c" ] }, - { - "deps": [ - "grpc", - "grpc_test_util" - ], - "headers": [], - "language": "c", - "name": "tag_set_test", - "src": [ - "test/core/census/tag_set_test.c" - ] - }, { "deps": [ "grpc", @@ -2506,7 +2506,6 @@ "include/grpc/support/tls_pthread.h", "include/grpc/support/useful.h", "src/core/census/aggregation.h", - "src/core/census/context.h", "src/core/census/grpc_filter.h", "src/core/census/rpc_metric_id.h", "src/core/channel/channel_args.h", @@ -2706,7 +2705,6 @@ "include/grpc/support/useful.h", "src/core/census/aggregation.h", "src/core/census/context.c", - "src/core/census/context.h", "src/core/census/grpc_context.c", "src/core/census/grpc_filter.c", "src/core/census/grpc_filter.h", @@ -2714,7 +2712,6 @@ "src/core/census/operation.c", "src/core/census/placeholders.c", "src/core/census/rpc_metric_id.h", - "src/core/census/tag_set.c", "src/core/census/tracing.c", "src/core/channel/channel_args.c", "src/core/channel/channel_args.h", @@ -3181,7 +3178,6 @@ "include/grpc/support/tls_pthread.h", "include/grpc/support/useful.h", "src/core/census/aggregation.h", - "src/core/census/context.h", "src/core/census/grpc_filter.h", "src/core/census/rpc_metric_id.h", "src/core/channel/channel_args.h", @@ -3366,7 +3362,6 @@ "include/grpc/support/useful.h", "src/core/census/aggregation.h", "src/core/census/context.c", - "src/core/census/context.h", "src/core/census/grpc_context.c", "src/core/census/grpc_filter.c", "src/core/census/grpc_filter.h", @@ -3374,7 +3369,6 @@ "src/core/census/operation.c", "src/core/census/placeholders.c", "src/core/census/rpc_metric_id.h", - "src/core/census/tag_set.c", "src/core/census/tracing.c", "src/core/channel/channel_args.c", "src/core/channel/channel_args.h", diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index a23a340b6c4..4669d37bb1b 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -101,6 +101,26 @@ "windows" ] }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "census_context_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, { "args": [], "ci_platforms": [ @@ -1419,26 +1439,6 @@ "posix" ] }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "tag_set_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] - }, { "args": [], "ci_platforms": [ diff --git a/vsprojects/buildtests_c.sln b/vsprojects/buildtests_c.sln index 1b7261d3a96..f56a69f1ae7 100644 --- a/vsprojects/buildtests_c.sln +++ b/vsprojects/buildtests_c.sln @@ -126,6 +126,15 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bin_encoder_test", "vcxproj {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "census_context_test", "vcxproj\test\census_context_test\census_context_test.vcxproj", "{5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}" + ProjectSection(myProperties) = preProject + lib = "False" + EndProjectSection + ProjectSection(ProjectDependencies) = postProject + {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} + {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} + EndProjectSection +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "channel_create_test", "vcxproj\test\channel_create_test\channel_create_test.vcxproj", "{AFC88484-3A2E-32BC-25B2-23DF741D4F3D}" ProjectSection(myProperties) = preProject lib = "False" @@ -724,15 +733,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sockaddr_utils_test", "vcxp {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tag_set_test", "vcxproj\test\tag_set_test\tag_set_test.vcxproj", "{430F8F07-6AAD-0150-B35B-DB9E2E21941A}" - ProjectSection(myProperties) = preProject - lib = "False" - EndProjectSection - ProjectSection(ProjectDependencies) = postProject - {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} - {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "time_averaged_stats_test", "vcxproj\test\time_averaged_stats_test\time_averaged_stats_test.vcxproj", "{D1EB2A9B-8508-62D7-8FC4-11A11B1CBFD3}" ProjectSection(myProperties) = preProject lib = "False" @@ -1349,6 +1349,22 @@ Global {D5C70922-D68E-0E9D-9988-995E0F9A79AE}.Release-DLL|Win32.Build.0 = Release|Win32 {D5C70922-D68E-0E9D-9988-995E0F9A79AE}.Release-DLL|x64.ActiveCfg = Release|x64 {D5C70922-D68E-0E9D-9988-995E0F9A79AE}.Release-DLL|x64.Build.0 = Release|x64 + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Debug|Win32.ActiveCfg = Debug|Win32 + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Debug|x64.ActiveCfg = Debug|x64 + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Release|Win32.ActiveCfg = Release|Win32 + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Release|x64.ActiveCfg = Release|x64 + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Debug|Win32.Build.0 = Debug|Win32 + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Debug|x64.Build.0 = Debug|x64 + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Release|Win32.Build.0 = Release|Win32 + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Release|x64.Build.0 = Release|x64 + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Debug-DLL|Win32.Build.0 = Debug|Win32 + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Debug-DLL|x64.ActiveCfg = Debug|x64 + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Debug-DLL|x64.Build.0 = Debug|x64 + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Release-DLL|Win32.ActiveCfg = Release|Win32 + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Release-DLL|Win32.Build.0 = Release|Win32 + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Release-DLL|x64.ActiveCfg = Release|x64 + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73}.Release-DLL|x64.Build.0 = Release|x64 {AFC88484-3A2E-32BC-25B2-23DF741D4F3D}.Debug|Win32.ActiveCfg = Debug|Win32 {AFC88484-3A2E-32BC-25B2-23DF741D4F3D}.Debug|x64.ActiveCfg = Debug|x64 {AFC88484-3A2E-32BC-25B2-23DF741D4F3D}.Release|Win32.ActiveCfg = Release|Win32 @@ -2421,22 +2437,6 @@ Global {529771F0-10B0-9B1A-1E7E-8A8E01870348}.Release-DLL|Win32.Build.0 = Release|Win32 {529771F0-10B0-9B1A-1E7E-8A8E01870348}.Release-DLL|x64.ActiveCfg = Release|x64 {529771F0-10B0-9B1A-1E7E-8A8E01870348}.Release-DLL|x64.Build.0 = Release|x64 - {430F8F07-6AAD-0150-B35B-DB9E2E21941A}.Debug|Win32.ActiveCfg = Debug|Win32 - {430F8F07-6AAD-0150-B35B-DB9E2E21941A}.Debug|x64.ActiveCfg = Debug|x64 - {430F8F07-6AAD-0150-B35B-DB9E2E21941A}.Release|Win32.ActiveCfg = Release|Win32 - {430F8F07-6AAD-0150-B35B-DB9E2E21941A}.Release|x64.ActiveCfg = Release|x64 - {430F8F07-6AAD-0150-B35B-DB9E2E21941A}.Debug|Win32.Build.0 = Debug|Win32 - {430F8F07-6AAD-0150-B35B-DB9E2E21941A}.Debug|x64.Build.0 = Debug|x64 - {430F8F07-6AAD-0150-B35B-DB9E2E21941A}.Release|Win32.Build.0 = Release|Win32 - {430F8F07-6AAD-0150-B35B-DB9E2E21941A}.Release|x64.Build.0 = Release|x64 - {430F8F07-6AAD-0150-B35B-DB9E2E21941A}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 - {430F8F07-6AAD-0150-B35B-DB9E2E21941A}.Debug-DLL|Win32.Build.0 = Debug|Win32 - {430F8F07-6AAD-0150-B35B-DB9E2E21941A}.Debug-DLL|x64.ActiveCfg = Debug|x64 - {430F8F07-6AAD-0150-B35B-DB9E2E21941A}.Debug-DLL|x64.Build.0 = Debug|x64 - {430F8F07-6AAD-0150-B35B-DB9E2E21941A}.Release-DLL|Win32.ActiveCfg = Release|Win32 - {430F8F07-6AAD-0150-B35B-DB9E2E21941A}.Release-DLL|Win32.Build.0 = Release|Win32 - {430F8F07-6AAD-0150-B35B-DB9E2E21941A}.Release-DLL|x64.ActiveCfg = Release|x64 - {430F8F07-6AAD-0150-B35B-DB9E2E21941A}.Release-DLL|x64.Build.0 = Release|x64 {D1EB2A9B-8508-62D7-8FC4-11A11B1CBFD3}.Debug|Win32.ActiveCfg = Debug|Win32 {D1EB2A9B-8508-62D7-8FC4-11A11B1CBFD3}.Debug|x64.ActiveCfg = Debug|x64 {D1EB2A9B-8508-62D7-8FC4-11A11B1CBFD3}.Release|Win32.ActiveCfg = Release|Win32 diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index 02c5936f2a6..f7a19de4a71 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -462,7 +462,6 @@ - @@ -856,8 +855,6 @@ - - diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index d6c9ebbc50e..b9fa984390d 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -586,9 +586,6 @@ src\core\census - - src\core\census - src\core\census @@ -1175,9 +1172,6 @@ src\core\census - - src\core\census - src\core\census diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index 98cf423e2b2..3220dbdc700 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -438,7 +438,6 @@ - @@ -792,8 +791,6 @@ - - diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index 31e2157b029..a9cdf19c665 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -526,9 +526,6 @@ src\core\census - - src\core\census - src\core\census @@ -1070,9 +1067,6 @@ src\core\census - - src\core\census - src\core\census diff --git a/vsprojects/vcxproj/test/tag_set_test/tag_set_test.vcxproj b/vsprojects/vcxproj/test/census_context_test/census_context_test.vcxproj similarity index 98% rename from vsprojects/vcxproj/test/tag_set_test/tag_set_test.vcxproj rename to vsprojects/vcxproj/test/census_context_test/census_context_test.vcxproj index 26ddfe13ef3..c29f3db7d83 100644 --- a/vsprojects/vcxproj/test/tag_set_test/tag_set_test.vcxproj +++ b/vsprojects/vcxproj/test/census_context_test/census_context_test.vcxproj @@ -20,7 +20,7 @@ - {430F8F07-6AAD-0150-B35B-DB9E2E21941A} + {5C1CFC2D-AF3C-D7CB-BA74-D267E91CBC73} true $(SolutionDir)IntDir\$(MSBuildProjectName)\ @@ -60,14 +60,14 @@ - tag_set_test + census_context_test static Debug static Debug - tag_set_test + census_context_test static Release static @@ -158,7 +158,7 @@ - + diff --git a/vsprojects/vcxproj/test/tag_set_test/tag_set_test.vcxproj.filters b/vsprojects/vcxproj/test/census_context_test/census_context_test.vcxproj.filters similarity index 62% rename from vsprojects/vcxproj/test/tag_set_test/tag_set_test.vcxproj.filters rename to vsprojects/vcxproj/test/census_context_test/census_context_test.vcxproj.filters index 6b315322519..53a7a66e2ea 100644 --- a/vsprojects/vcxproj/test/tag_set_test/tag_set_test.vcxproj.filters +++ b/vsprojects/vcxproj/test/census_context_test/census_context_test.vcxproj.filters @@ -1,20 +1,20 @@ - + test\core\census - {500aa440-5924-8047-996a-4c5096d1ef96} + {bc15bb31-7dbe-17f2-fb1c-4bc140ce1707} - {a3bf80f0-5b13-f623-277b-05f0231dd933} + {806f9b58-6a48-ae09-3cc6-bb36e3126f27} - {b6ed1b86-7795-4da9-a169-9eccf836852c} + {85e37a47-e797-dcd1-b1e0-df553a454d8f}