xref: /OK3568_Linux_fs/buildroot/package/grpc/grpc.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1################################################################################
2#
3# grpc
4#
5################################################################################
6
7GRPC_VERSION = 1.41.0
8GRPC_SITE = $(call github,grpc,grpc,v$(GRPC_VERSION))
9GRPC_LICENSE = Apache-2.0
10GRPC_LICENSE_FILES = LICENSE
11GRPC_CPE_ID_VENDOR = grpc
12
13GRPC_INSTALL_STAGING = YES
14
15# Need to use host grpc_cpp_plugin during cross compilation.
16GRPC_DEPENDENCIES = c-ares host-grpc libabseil-cpp openssl protobuf re2 zlib
17HOST_GRPC_DEPENDENCIES = host-c-ares host-libabseil-cpp host-openssl host-protobuf \
18	host-re2 host-zlib
19
20# gRPC_CARES_PROVIDER=package won't work because it requires c-ares to have
21# installed a cmake config file, but buildroot uses c-ares' autotools build,
22# which doesn't do this.  These CARES settings trick the gRPC cmake code into
23# not looking for c-ares at all and yet still linking with the library.
24GRPC_CONF_OPTS = \
25	-DgRPC_ABSL_PROVIDER=package \
26	-D_gRPC_CARES_LIBRARIES=cares \
27	-DgRPC_CARES_PROVIDER=none \
28	-DgRPC_PROTOBUF_PROVIDER=package \
29	-DgRPC_RE2_PROVIDER=package \
30	-DgRPC_SSL_PROVIDER=package \
31	-DgRPC_ZLIB_PROVIDER=package \
32	-DgRPC_BUILD_GRPC_CPP_PLUGIN=OFF \
33	-DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF \
34	-DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF \
35	-DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF \
36	-DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF \
37	-DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF \
38	-DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF
39
40# grpc can use __atomic builtins, so we need to link with
41# libatomic when available
42ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y)
43GRPC_CONF_OPTS += -DCMAKE_EXE_LINKER_FLAGS=-latomic
44endif
45
46GRPC_CFLAGS = $(TARGET_CFLAGS)
47GRPC_CXXFLAGS = $(TARGET_CXXFLAGS)
48
49# Set GPR_DISABLE_WRAPPED_MEMCPY otherwise build will fail on x86_64 with uclibc
50# because grpc tries to link with memcpy@GLIBC_2.2.5
51ifeq ($(BR2_x86_64):$(BR2_TOOLCHAIN_USES_GLIBC),y:)
52GRPC_CFLAGS += -DGPR_DISABLE_WRAPPED_MEMCPY
53GRPC_CXXFLAGS += -DGPR_DISABLE_WRAPPED_MEMCPY
54endif
55
56ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y)
57GRPC_CFLAGS += -O0
58GRPC_CXXFLAGS += -O0
59endif
60
61# Toolchains older than gcc5 will fail to compile with -0s due to:
62# error: failure memory model cannot be stronger than success memory model for
63# '__atomic_compare_exchange', so we use -O2 in these cases
64ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_5):$(BR2_OPTIMIZE_S),:y)
65GRPC_CFLAGS += -O2
66GRPC_CXXFLAGS += -O2
67endif
68
69GRPC_CONF_OPTS += \
70	-DCMAKE_C_FLAGS="$(GRPC_CFLAGS)" \
71	-DCMAKE_CXX_FLAGS="$(GRPC_CXXFLAGS)"
72
73HOST_GRPC_CONF_OPTS = \
74	-DgRPC_ABSL_PROVIDER=package \
75	-D_gRPC_CARES_LIBRARIES=cares \
76	-DgRPC_CARES_PROVIDER=none \
77	-DgRPC_PROTOBUF_PROVIDER=package \
78	-DgRPC_RE2_PROVIDER=package \
79	-DgRPC_SSL_PROVIDER=package \
80	-DgRPC_ZLIB_PROVIDER=package
81
82$(eval $(cmake-package))
83$(eval $(host-cmake-package))
84