grpc.mk 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. ################################################################################
  2. #
  3. # grpc
  4. #
  5. ################################################################################
  6. GRPC_VERSION = 1.51.1
  7. GRPC_SITE = $(call github,grpc,grpc,v$(GRPC_VERSION))
  8. GRPC_LICENSE = Apache-2.0, BSD-3-Clause (third_party code), MPL-2.0 (etc/roots.pem)
  9. GRPC_LICENSE_FILES = LICENSE
  10. GRPC_CPE_ID_VENDOR = grpc
  11. GRPC_INSTALL_STAGING = YES
  12. # Need to use host grpc_cpp_plugin during cross compilation.
  13. GRPC_DEPENDENCIES = c-ares host-grpc libabseil-cpp openssl protobuf re2 zlib
  14. HOST_GRPC_DEPENDENCIES = host-protobuf
  15. # gRPC_CARES_PROVIDER=package won't work because it requires c-ares to have
  16. # installed a cmake config file, but buildroot uses c-ares' autotools build,
  17. # which doesn't do this. These CARES settings trick the gRPC cmake code into
  18. # not looking for c-ares at all and yet still linking with the library.
  19. GRPC_CONF_OPTS = \
  20. -DCMAKE_EXE_LINKER_FLAGS="$(GRPC_EXE_LINKER_FLAGS)" \
  21. -DgRPC_ABSL_PROVIDER=package \
  22. -D_gRPC_CARES_LIBRARIES=cares \
  23. -DgRPC_CARES_PROVIDER=none \
  24. -DgRPC_PROTOBUF_PROVIDER=package \
  25. -DgRPC_RE2_PROVIDER=package \
  26. -DgRPC_SSL_PROVIDER=package \
  27. -DgRPC_ZLIB_PROVIDER=package \
  28. -DgRPC_BUILD_GRPC_CPP_PLUGIN=OFF \
  29. -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF \
  30. -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF \
  31. -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF \
  32. -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF \
  33. -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF \
  34. -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF
  35. ifeq ($(BR2_PACKAGE_LIBEXECINFO),y)
  36. GRPC_DEPENDENCIES += libexecinfo
  37. GRPC_EXE_LINKER_FLAGS += -lexecinfo
  38. endif
  39. # grpc can use __atomic builtins, so we need to link with
  40. # libatomic when available
  41. ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y)
  42. GRPC_EXE_LINKER_FLAGS += -latomic
  43. endif
  44. GRPC_CFLAGS = $(TARGET_CFLAGS)
  45. GRPC_CXXFLAGS = $(TARGET_CXXFLAGS)
  46. # Set GPR_DISABLE_WRAPPED_MEMCPY otherwise build will fail on x86_64 with uclibc
  47. # because grpc tries to link with memcpy@GLIBC_2.2.5
  48. ifeq ($(BR2_x86_64):$(BR2_TOOLCHAIN_USES_GLIBC),y:)
  49. GRPC_CFLAGS += -DGPR_DISABLE_WRAPPED_MEMCPY
  50. GRPC_CXXFLAGS += -DGPR_DISABLE_WRAPPED_MEMCPY
  51. endif
  52. ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y)
  53. GRPC_CFLAGS += -O0
  54. GRPC_CXXFLAGS += -O0
  55. endif
  56. GRPC_CONF_OPTS += \
  57. -DCMAKE_C_FLAGS="$(GRPC_CFLAGS)" \
  58. -DCMAKE_CXX_FLAGS="$(GRPC_CXXFLAGS)"
  59. # For host-grpc, we only need the 'grpc_cpp_plugin' binary, which is needed for
  60. # target grpc compilation. To avoid unnecessary build steps and host
  61. # dependencies, supply enough options to pass the configure checks without
  62. # requiring other host packages, unless those needed by grpc_cpp_plugin.
  63. HOST_GRPC_CONF_OPTS = \
  64. -DgRPC_PROTOBUF_PROVIDER=package \
  65. -DgRPC_ABSL_PROVIDER=none \
  66. -DgRPC_CARES_PROVIDER=none \
  67. -DgRPC_RE2_PROVIDER=none \
  68. -DgRPC_SSL_PROVIDER=none \
  69. -DgRPC_ZLIB_PROVIDER=none \
  70. -DgRPC_BUILD_CODEGEN=OFF \
  71. -DgRPC_BUILD_CSHARP_EXT=OFF \
  72. -DgRPC_BUILD_PLUGIN_SUPPORT_ONLY=ON \
  73. -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF \
  74. -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF \
  75. -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF \
  76. -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF \
  77. -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF \
  78. -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF
  79. $(eval $(cmake-package))
  80. $(eval $(host-cmake-package))