distributable: url: git+https://github.com/grpc/grpc ref: v{{version}} versions: github: grpc/grpc provides: - bin/grpc_csharp_plugin - bin/grpc_node_plugin - bin/grpc_cpp_plugin - bin/grpc_python_plugin - bin/grpc_objective_c_plugin - bin/grpc_ruby_plugin - bin/grpc_php_plugin - bin/grpc_cli dependencies: abseil.io: ^20240116 c-ares.org: '*' openssl.org: ^1.1 protobuf.dev: 26.1.0 # grpc links to specific versions, so we have to pick one. github.com/google/re2: '*' zlib.net: '*' linux: gnu.org/gcc/libstdcxx: '*' build: dependencies: gnu.org/autoconf: '*' gnu.org/automake: '*' gnu.org/libtool: '*' darwin: gnu.org/patch: '*' cmake.org: ^3 freedesktop.org/pkg-config: ^0 git-scm.org: ^2 working-directory: cmake/build script: - run: git submodule update --init --recursive working-directory: ../.. # darwin issues: # https://github.com/grpc/grpc/issues/36654 - run: | if test "{{hw.platform}}" = "darwin"; then patch -i $PROP || true fi if: '>=1.63' working-directory: ../.. prop: | --- CMakeLists.txt.orig 2024-05-16 01:01:03.000000000 +0000 +++ CMakeLists.txt @@ -3682,6 +3682,7 @@ target_include_directories(upb_json_lib ) target_link_libraries(upb_json_lib ${_gRPC_ALLTARGETS_LIBRARIES} + grpc++_unsecure utf8_range_lib upb_message_lib ) @@ -3883,6 +3884,7 @@ target_include_directories(upb_textforma ) target_link_libraries(upb_textformat_lib ${_gRPC_ALLTARGETS_LIBRARIES} + grpc++_unsecure utf8_range_lib upb_message_lib ) - cmake $COMMON_ARGS $ARGS ../.. - make install # Build the cli - cmake $COMMON_ARGS $CLI_ARGS ../.. - make grpc_cli - cp grpc_cli "{{prefix}}/bin" - cp libgrpc++_test_config.* "{{prefix}}/lib" # grpc has libs and binaries that end up with name @rpath/libgrpc_plugin_support.{{version}}.dylib (offset 24) # so we need to add @loader_path to the rpath - run: | for f in bin/* lib/libgrpc++_test_config.dylib; do if test -f $f && ! otool -l $f | grep @loader_path/../lib; then install_name_tool -add_rpath @loader_path/../lib $f fi done working-directory: '{{prefix}}' if: darwin env: COMMON_ARGS: - -DCMAKE_BUILD_TYPE=Release - -DCMAKE_INSTALL_PREFIX="{{prefix}}" - -DCMAKE_INSTALL_RPATH={{prefix}} - -DBUILD_SHARED_LIBS=ON ARGS: - -DCMAKE_CXX_STANDARD=17 - -DCMAKE_CXX_STANDARD_REQUIRED=TRUE - -DgRPC_BUILD_TESTS=OFF - -DgRPC_INSTALL=ON - -DgRPC_ABSL_PROVIDER=package - -DgRPC_CARES_PROVIDER=package - -DgRPC_SSL_PROVIDER=package - -DgRPC_ZLIB_PROVIDER=package - -DgRPC_RE2_PROVIDER=package CLI_ARGS: - -DgRPC_BUILD_TESTS=ON darwin: ARGS: - -DgRPC_PROTOBUF_PROVIDER=module linux: CC: clang CXX: clang++ LD: clang ARGS: - -DgRPC_PROTOBUF_PROVIDER=package CLI_ARGS: # otherwise we get linker errors - -DCMAKE_EXE_LINKER_FLAGS=-W,-labsl_log_internal_message test: dependencies: freedesktop.org/pkg-config: ^0 fixture: | #include int main() { grpc_init(); grpc_shutdown(); return GRPC_STATUS_OK; } script: - cp $FIXTURE test.cpp - PKG_CONFIG=$(pkg-config --cflags --libs libcares protobuf re2 grpc++) - clang++ $PKG_CONFIG test.cpp -o test $LIBS - ./test - (grpc_cli ls localhost:58931 2>&1 || true) | grep -E "(failed to connect to all addresses|rpc failed)" env: linux: LIBS: -lstdc++