aboutsummaryrefslogtreecommitdiffhomepage
path: root/third_party/grpc
diff options
context:
space:
mode:
authorGravatar Lukacs T. Berki <lberki@google.com>2016-04-11 09:37:42 +0200
committerGravatar Lukacs T. Berki <lberki@google.com>2016-04-11 09:38:35 +0200
commitd699a28f486efba71da9df0e278edd7193b2e465 (patch)
treef1b04ce05437427072a8b41e0d63952496d06086 /third_party/grpc
parent97f8148005a8e974b9460c3c7b77d708b33a7e36 (diff)
Patch gRPC so that it compiles and works under msys2.
The patch is being upstreamed, but for the time being, we need to maintain it in our source tree. Change-Id: I6a52dd0b0b57828030693dacdda23a906a2bee4f
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);