aboutsummaryrefslogtreecommitdiffhomepage
path: root/third_party/grpc
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/grpc')
-rw-r--r--third_party/grpc/BUILD3
-rw-r--r--third_party/grpc/README.bazel.md1
-rw-r--r--third_party/grpc/grpc.patch224
-rw-r--r--third_party/grpc/include/grpc/impl/codegen/port_platform.h40
-rw-r--r--third_party/grpc/src/core/iomgr/tcp_server_posix.c39
5 files changed, 298 insertions, 9 deletions
diff --git a/third_party/grpc/BUILD b/third_party/grpc/BUILD
index 51e861f036..a635ebc6f5 100644
--- a/third_party/grpc/BUILD
+++ b/third_party/grpc/BUILD
@@ -438,7 +438,7 @@ cc_library(
],
copts = [
"-std=gnu99",
- "-Wno-implicit-function-declaration",
+ "-w",
],
includes = [
".",
@@ -570,6 +570,7 @@ cc_library(
"include/grpc++/support/sync_stream.h",
"include/grpc++/support/time.h",
],
+ copts = ["-w"],
includes = [
".",
"include",
diff --git a/third_party/grpc/README.bazel.md b/third_party/grpc/README.bazel.md
index dacbe7ff7a..7631dd759c 100644
--- a/third_party/grpc/README.bazel.md
+++ b/third_party/grpc/README.bazel.md
@@ -6,6 +6,7 @@ How to update the C++ sources of gRPC:
4. `cp -R <gRPC git tree>/src/{compiler,core-cpp} third_party/grpc/src`
5. `cp -R <gRPC git tree>/include third_party/grpc`
6. Update BUILD files by copying the rules from the BUILD file of gRPC
+7. Patch in grpc.patch. It makes gRPC work under msys2.
How to update the Java plugin:
diff --git a/third_party/grpc/grpc.patch b/third_party/grpc/grpc.patch
new file mode 100644
index 0000000000..448776a2d0
--- /dev/null
+++ b/third_party/grpc/grpc.patch
@@ -0,0 +1,224 @@
+diff --git a/third_party/grpc/BUILD b/third_party/grpc/BUILD
+index 51e861f..a635ebc 100644
+--- a/third_party/grpc/BUILD
++++ b/third_party/grpc/BUILD
+@@ -438,7 +438,7 @@ cc_library(
+ ],
+ copts = [
+ "-std=gnu99",
+- "-Wno-implicit-function-declaration",
++ "-w",
+ ],
+ includes = [
+ ".",
+@@ -570,6 +570,7 @@ cc_library(
+ "include/grpc++/support/sync_stream.h",
+ "include/grpc++/support/time.h",
+ ],
++ copts = ["-w"],
+ includes = [
+ ".",
+ "include",
+diff --git a/third_party/grpc/include/grpc/impl/codegen/port_platform.h b/third_party/grpc/include/grpc/impl/codegen/port_platform.h
+index d265e9b..d22bffb 100644
+--- a/third_party/grpc/include/grpc/impl/codegen/port_platform.h
++++ b/third_party/grpc/include/grpc/impl/codegen/port_platform.h
+@@ -74,7 +74,45 @@
+ things. */
+
+ #if !defined(GPR_NO_AUTODETECT_PLATFORM)
+-#if defined(_WIN64) || defined(WIN64)
++
++#if defined(__MSYS__)
++#define GPR_PLATFORM_STRING "msys2"
++#define GPR_POSIX_CRASH_HANDLER 1
++#ifndef _BSD_SOURCE
++#define _BSD_SOURCE
++#endif
++#ifndef _DEFAULT_SOURCE
++#define _DEFAULT_SOURCE
++#endif
++#ifndef _GNU_SOURCE
++#define _GNU_SOURCE
++#endif
++#include <features.h>
++#define GPR_CPU_POSIX 1
++#define GPR_GCC_ATOMIC 1
++#define GPR_GCC_TLS 1
++#define GPR_POSIX_MULTIPOLL_WITH_POLL
++#define GPR_POSIX_WAKEUP_FD 1
++#define GPR_POSIX_SOCKET 1
++#define GPR_POSIX_SOCKETADDR 1
++#define GPR_POSIX_ENV 1
++#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1
++#define GPR_POSIX_SOCKETUTILS
++#define GPR_POSIX_FILE 1
++#define GPR_POSIX_STRING 1
++#define GPR_POSIX_SUBPROCESS 1
++#define GPR_POSIX_SYNC 1
++#define GPR_POSIX_TIME 1
++#define GPR_POSIX_LOG 1
++#define GPR_GETPID_IN_UNISTD_H 1
++#define GPR_HAVE_MSG_NOSIGNAL 1
++#ifdef _LP64
++#define GPR_ARCH_64 1
++#else /* _LP64 */
++#define GPR_ARCH_32 1
++#endif /* _LP64 */
++
++#elif defined(_WIN64) || defined(WIN64)
+ #define GPR_PLATFORM_STRING "windows"
+ #define GPR_WIN32 1
+ #define GPR_ARCH_64 1
+diff --git a/third_party/grpc/src/core/iomgr/tcp_server_posix.c b/third_party/grpc/src/core/iomgr/tcp_server_posix.c
+index 5e07f82..44b970d 100644
+--- a/third_party/grpc/src/core/iomgr/tcp_server_posix.c
++++ b/third_party/grpc/src/core/iomgr/tcp_server_posix.c
+@@ -280,13 +280,38 @@ static int prepare_socket(int fd, const struct sockaddr *addr,
+ goto error;
+ }
+
+- if (!grpc_set_socket_nonblocking(fd, 1) || !grpc_set_socket_cloexec(fd, 1) ||
+- (addr->sa_family != AF_UNIX && (!grpc_set_socket_low_latency(fd, 1) ||
+- !grpc_set_socket_reuse_addr(fd, 1))) ||
+- !grpc_set_socket_no_sigpipe_if_possible(fd)) {
+- gpr_log(GPR_ERROR, "Unable to configure socket %d: %s", fd,
+- strerror(errno));
+- goto error;
++
++ if (!grpc_set_socket_nonblocking(fd, 1)) {
++ gpr_log(GPR_ERROR, "Unable to set socket %d to nonblocking mode: %s", fd,
++ strerror(errno));
++ goto error;
++ }
++ if (!grpc_set_socket_cloexec(fd, 1)) {
++ gpr_log(GPR_ERROR, "Unable to set socket %d to close-on-exec: %s", fd,
++ strerror(errno));
++ goto error;
++ }
++
++ if (addr->sa_family != AF_UNIX) {
++ if (!grpc_set_socket_low_latency(fd, 1)) {
++ gpr_log(GPR_ERROR, "Unable to set socket %d to low-latency mode: %s", fd,
++ strerror(errno));
++ goto error;
++ }
++
++#if !defined(__MSYS__)
++ if (!grpc_set_socket_reuse_addr(fd, 1)) {
++ gpr_log(GPR_ERROR, "Unable to set SO_REUSEADDR on socket %d: %s", fd,
++ strerror(errno));
++ goto error;
++ }
++#endif
++
++ if (!grpc_set_socket_no_sigpipe_if_possible(fd)) {
++ gpr_log(GPR_ERROR, "Unable to set SO_NOSIGPIPE on socket %d: %s", fd,
++ strerror(errno));
++ goto error;
++ }
+ }
+
+ GPR_ASSERT(addr_len < ~(socklen_t)0);
+diff --git a/tools/build_rules/genproto.bzl b/tools/build_rules/genproto.bzl
+index 62284a3..bc76cd1 100644
+--- a/tools/build_rules/genproto.bzl
++++ b/tools/build_rules/genproto.bzl
+@@ -25,6 +25,8 @@ def gensrcjar_impl(ctx):
+ "JAR='%s'" % ctx.executable._jar.path,
+ "OUTPUT='%s'" % out.path,
+ "PROTO_COMPILER='%s'" % ctx.executable._proto_compiler.path,
++ "GRPC_JAVA_PLUGIN='%s'" % ctx.executable.grpc_java_plugin.path if \
++ ctx.executable.grpc_java_plugin else "",
+ "SOURCE='%s'" % ctx.file.src.path,
+ ctx.executable._gensrcjar.path,
+ ]),
+@@ -43,14 +45,19 @@ gensrcjar = rule(
+ allow_files = proto_filetype,
+ single_file = True,
+ ),
++ "grpc_java_plugin": attr.label(
++ cfg = HOST_CFG,
++ executable = True,
++ single_file = True,
++ ),
+ "_gensrcjar": attr.label(
+- default = Label("@bazel_tools//tools/build_rules:gensrcjar"),
++ default = Label("//tools/build_rules:gensrcjar"),
+ executable = True,
+ ),
+ # TODO(bazel-team): this should be a hidden attribute with a default
+ # value, but Skylark needs to support select first.
+ "_proto_compiler": attr.label(
+- default = Label("@bazel_tools//third_party/protobuf:protoc"),
++ default = Label("//third_party/protobuf:protoc"),
+ allow_files = True,
+ executable = True,
+ single_file = True,
+@@ -73,13 +80,42 @@ gensrcjar = rule(
+ outputs = {"srcjar": "lib%{name}.srcjar"},
+ )
+
++def cc_grpc_library(name, src):
++ basename = src[:-len(".proto")]
++
++ native.genrule(
++ name = name + "_codegen",
++ srcs = [src],
++ tools = ["//third_party/protobuf:protoc", "//third_party/grpc:cpp_plugin"],
++ cmd = "\\\n".join([
++ "$(location //third_party/protobuf:protoc)",
++ " --plugin=protoc-gen-grpc=$(location //third_party/grpc:cpp_plugin)",
++ " --cpp_out=$(GENDIR)",
++ " --grpc_out=$(GENDIR)",
++ " $(location " + src + ")"]),
++ outs = [basename + ".grpc.pb.h", basename + ".grpc.pb.cc", basename + ".pb.cc", basename + ".pb.h"])
++
++ native.cc_library(
++ name = name,
++ srcs = [basename + ".grpc.pb.cc", basename + ".pb.cc"],
++ hdrs = [basename + ".grpc.pb.h", basename + ".pb.h"],
++ deps = ["//third_party/grpc:grpc++"],
++ includes = ["."])
++
+ # TODO(bazel-team): support proto => proto dependencies too
+-def java_proto_library(name, src):
+- gensrcjar(name=name + "_srcjar", src=src)
++def java_proto_library(name, src, use_grpc_plugin=False):
++ grpc_java_plugin = None
++ if use_grpc_plugin:
++ grpc_java_plugin = "//third_party/grpc:grpc-java-plugin"
++
++ gensrcjar(name=name + "_srcjar", src=src, grpc_java_plugin=grpc_java_plugin)
++ deps = ["//third_party/protobuf"]
++ if use_grpc_plugin:
++ deps += ["//third_party/grpc:grpc-jar", "//third_party:guava"]
+ native.java_library(
+ name=name,
+ srcs=[name + "_srcjar"],
+- deps=["@bazel_tools//third_party/protobuf"],
++ deps=deps,
+ # The generated code has lots of 'rawtypes' warnings.
+ javacopts=["-Xlint:-rawtypes"],
+ )
+diff --git a/tools/build_rules/gensrcjar.sh b/tools/build_rules/gensrcjar.sh
+index b94408a..c1674a3 100755
+--- a/tools/build_rules/gensrcjar.sh
++++ b/tools/build_rules/gensrcjar.sh
+@@ -65,8 +65,14 @@ main() {
+ "${PREPROCESSOR}" <"${SOURCE}" >"${processed_source}" \
+ || err "Preprocessor ${PREPROCESSOR} failed"
+
+- "${PROTO_COMPILER}" --java_out="${proto_output}" "${processed_source}" \
+- || err "proto_compiler failed"
++ if [ -n "${GRPC_JAVA_PLUGIN}" ]; then
++ "${PROTO_COMPILER}" --plugin=protoc-gen-grpc="${GRPC_JAVA_PLUGIN}" \
++ --grpc_out="${proto_output}" --java_out="${proto_output}" "${processed_source}" \
++ || err "proto_compiler failed"
++ else
++ "${PROTO_COMPILER}" --java_out="${proto_output}" "${processed_source}" \
++ || err "proto_compiler failed"
++ fi
+ find "${proto_output}" -exec touch -t "${TIMESTAMP}" '{}' \; \
+ || err "Failed to reset timestamps"
+ "${JAR}" cMf "${OUTPUT}.tmp" -C "${proto_output}" . \
diff --git a/third_party/grpc/include/grpc/impl/codegen/port_platform.h b/third_party/grpc/include/grpc/impl/codegen/port_platform.h
index d265e9b392..d22bffb0b8 100644
--- a/third_party/grpc/include/grpc/impl/codegen/port_platform.h
+++ b/third_party/grpc/include/grpc/impl/codegen/port_platform.h
@@ -74,7 +74,45 @@
things. */
#if !defined(GPR_NO_AUTODETECT_PLATFORM)
-#if defined(_WIN64) || defined(WIN64)
+
+#if defined(__MSYS__)
+#define GPR_PLATFORM_STRING "msys2"
+#define GPR_POSIX_CRASH_HANDLER 1
+#ifndef _BSD_SOURCE
+#define _BSD_SOURCE
+#endif
+#ifndef _DEFAULT_SOURCE
+#define _DEFAULT_SOURCE
+#endif
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include <features.h>
+#define GPR_CPU_POSIX 1
+#define GPR_GCC_ATOMIC 1
+#define GPR_GCC_TLS 1
+#define GPR_POSIX_MULTIPOLL_WITH_POLL
+#define GPR_POSIX_WAKEUP_FD 1
+#define GPR_POSIX_SOCKET 1
+#define GPR_POSIX_SOCKETADDR 1
+#define GPR_POSIX_ENV 1
+#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1
+#define GPR_POSIX_SOCKETUTILS
+#define GPR_POSIX_FILE 1
+#define GPR_POSIX_STRING 1
+#define GPR_POSIX_SUBPROCESS 1
+#define GPR_POSIX_SYNC 1
+#define GPR_POSIX_TIME 1
+#define GPR_POSIX_LOG 1
+#define GPR_GETPID_IN_UNISTD_H 1
+#define GPR_HAVE_MSG_NOSIGNAL 1
+#ifdef _LP64
+#define GPR_ARCH_64 1
+#else /* _LP64 */
+#define GPR_ARCH_32 1
+#endif /* _LP64 */
+
+#elif defined(_WIN64) || defined(WIN64)
#define GPR_PLATFORM_STRING "windows"
#define GPR_WIN32 1
#define GPR_ARCH_64 1
diff --git a/third_party/grpc/src/core/iomgr/tcp_server_posix.c b/third_party/grpc/src/core/iomgr/tcp_server_posix.c
index 5e07f8261c..44b970d72e 100644
--- a/third_party/grpc/src/core/iomgr/tcp_server_posix.c
+++ b/third_party/grpc/src/core/iomgr/tcp_server_posix.c
@@ -280,13 +280,38 @@ static int prepare_socket(int fd, const struct sockaddr *addr,
goto error;
}
- if (!grpc_set_socket_nonblocking(fd, 1) || !grpc_set_socket_cloexec(fd, 1) ||
- (addr->sa_family != AF_UNIX && (!grpc_set_socket_low_latency(fd, 1) ||
- !grpc_set_socket_reuse_addr(fd, 1))) ||
- !grpc_set_socket_no_sigpipe_if_possible(fd)) {
- gpr_log(GPR_ERROR, "Unable to configure socket %d: %s", fd,
- strerror(errno));
- goto error;
+
+ if (!grpc_set_socket_nonblocking(fd, 1)) {
+ gpr_log(GPR_ERROR, "Unable to set socket %d to nonblocking mode: %s", fd,
+ strerror(errno));
+ goto error;
+ }
+ if (!grpc_set_socket_cloexec(fd, 1)) {
+ gpr_log(GPR_ERROR, "Unable to set socket %d to close-on-exec: %s", fd,
+ strerror(errno));
+ goto error;
+ }
+
+ if (addr->sa_family != AF_UNIX) {
+ if (!grpc_set_socket_low_latency(fd, 1)) {
+ gpr_log(GPR_ERROR, "Unable to set socket %d to low-latency mode: %s", fd,
+ strerror(errno));
+ goto error;
+ }
+
+#if !defined(__MSYS__)
+ if (!grpc_set_socket_reuse_addr(fd, 1)) {
+ gpr_log(GPR_ERROR, "Unable to set SO_REUSEADDR on socket %d: %s", fd,
+ strerror(errno));
+ goto error;
+ }
+#endif
+
+ if (!grpc_set_socket_no_sigpipe_if_possible(fd)) {
+ gpr_log(GPR_ERROR, "Unable to set SO_NOSIGPIPE on socket %d: %s", fd,
+ strerror(errno));
+ goto error;
+ }
}
GPR_ASSERT(addr_len < ~(socklen_t)0);