Open
Description
Summary by @eregon:
The grpc gem should install fine.
On macOS you might need truffleruby-dev.
At runtime, require 'grpc'
works on Linux.
Using GRPC functionality does not work yet in general.
Requiring the grpc
gem causes an Invalid ElementType of Vector failure. This is affecting the storefront-renderer
repository's use of require "semian/grpc"
.
How to reproduce
irb(main):001:0> require 'grpc'
Stacktrace
The below issue is resolved by grpc/grpc#24632, but grpc did not merge that PR yet.
truffleruby: an internal exception escaped out of the interpreter,
please report it to https://github.com/oracle/truffleruby/issues.
Invalid ElementType of Vector: VariableBitWidthType (java.lang.AssertionError)
from com.oracle.truffle.llvm.runtime.types.VectorType.setElementType(VectorType.java:80)
from com.oracle.truffle.llvm.parser.listeners.Types.setType(Types.java:246)
from com.oracle.truffle.llvm.parser.listeners.Types.record(Types.java:171)
from com.oracle.truffle.llvm.parser.scanner.LLVMScanner.passRecordToParser(LLVMScanner.java:434)
from com.oracle.truffle.llvm.parser.scanner.LLVMScanner.unabbreviatedRecord(LLVMScanner.java:450)
from com.oracle.truffle.llvm.parser.scanner.LLVMScanner.scanToOffset(LLVMScanner.java:164)
from com.oracle.truffle.llvm.parser.scanner.LLVMScanner.scanToEnd(LLVMScanner.java:143)
from com.oracle.truffle.llvm.parser.scanner.LLVMScanner.parseBitcode(LLVMScanner.java:102)
from com.oracle.truffle.llvm.ParserDriver.parseBinary(ParserDriver.java:340)
from com.oracle.truffle.llvm.ParserDriver.parseLibraryWithSource(ParserDriver.java:398)
from com.oracle.truffle.llvm.ParserDriver.parseWithDependencies(ParserDriver.java:144)
from com.oracle.truffle.llvm.ParserDriver.parseWithDependencies(ParserDriver.java:130)
from com.oracle.truffle.llvm.ParserDriver.parse(ParserDriver.java:101)
from com.oracle.truffle.llvm.DefaultLoader.load(DefaultLoader.java:45)
from com.oracle.truffle.llvm.runtime.LLVMLanguage.parse(LLVMLanguage.java:480)
from com.oracle.truffle.api.TruffleLanguage$ParsingRequest.parse(TruffleLanguage.java:848)
from com.oracle.truffle.api.TruffleLanguage.parse(TruffleLanguage.java:1502)
from com.oracle.truffle.api.LanguageAccessor$LanguageImpl.parse(LanguageAccessor.java:311)
from com.oracle.truffle.polyglot.PolyglotSourceCache.parseImpl(PolyglotSourceCache.java:94)
from com.oracle.truffle.polyglot.PolyglotSourceCache.access$300(PolyglotSourceCache.java:56)
from com.oracle.truffle.polyglot.PolyglotSourceCache$WeakCache.lookup(PolyglotSourceCache.java:223)
from com.oracle.truffle.polyglot.PolyglotSourceCache.parseCached(PolyglotSourceCache.java:80)
from com.oracle.truffle.polyglot.PolyglotLanguageContext.parseCached(PolyglotLanguageContext.java:371)
from com.oracle.truffle.polyglot.EngineAccessor$EngineImpl.parseForLanguage(EngineAccessor.java:242)
from com.oracle.truffle.api.TruffleLanguage$Env.parseInternal(TruffleLanguage.java:2471)
from org.truffleruby.language.loader.FeatureLoader.loadCExtLibrary(FeatureLoader.java:484)
from org.truffleruby.language.loader.RequireNode.requireCExtension(RequireNode.java:268)
from org.truffleruby.language.loader.RequireNode.parseAndCall(RequireNode.java:211)
from org.truffleruby.language.loader.RequireNode.doRequire(RequireNode.java:196)
from org.truffleruby.language.loader.RequireNode.requireConsideringAutoload(RequireNode.java:125)
from org.truffleruby.language.loader.RequireNode.lambda$requireWithMetrics$0(RequireNode.java:78)
from org.truffleruby.debug.MetricsProfiler.callWithMetrics(MetricsProfiler.java:40)
from org.truffleruby.language.loader.RequireNode.requireWithMetrics(RequireNode.java:75)
from org.truffleruby.language.loader.RequireNode.require(RequireNode.java:67)
from org.truffleruby.language.loader.RequireNodeGen.executeRequire(RequireNodeGen.java:30)
from org.truffleruby.core.kernel.KernelNodes$LoadFeatureNode.loadFeature(KernelNodes.java:343)
from org.truffleruby.core.kernel.KernelNodesFactory$LoadFeatureNodeFactory$LoadFeatureNodeGen.execute(KernelNodesFactory.java:726)
from org.truffleruby.language.control.IfElseNode.execute(IfElseNode.java:43)
from org.truffleruby.language.control.IfElseNode.execute(IfElseNode.java:45)
from org.truffleruby.language.control.SequenceNode.execute(SequenceNode.java:36)
from org.truffleruby.language.arguments.CheckArityNode.execute(CheckArityNode.java:41)
from org.truffleruby.language.control.SequenceNode.execute(SequenceNode.java:36)
from org.truffleruby.language.methods.CatchForMethodNode.execute(CatchForMethodNode.java:42)
from org.truffleruby.language.methods.ExceptionTranslatingNode.execute(ExceptionTranslatingNode.java:33)
from org.truffleruby.language.RubyRootNode.execute(RubyRootNode.java:61)
from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:591)
/Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/rubygems/core_ext/kernel_require.rb:72:in `gem_original_require'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/rubygems/core_ext/kernel_require.rb:72:in `require'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/gems/gems/grpc-1.35.0/src/ruby/lib/grpc/grpc.rb:22:in `<top (required)>'
from <internal:core> core/kernel.rb:293:in `require_relative'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/gems/gems/grpc-1.35.0/src/ruby/lib/grpc.rb:19:in `<top (required)>'
from <internal:core> core/kernel.rb:234:in `gem_original_require'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/rubygems/core_ext/kernel_require.rb:168:in `require'
from (irb):1:in `irb_binding'
from <internal:core> core/kernel.rb:325:in `eval'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb/workspace.rb:114:in `evaluate'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb/context.rb:459:in `evaluate'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb.rb:541:in `block (2 levels) in eval_input'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb.rb:704:in `signal_status'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb.rb:538:in `block in eval_input'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb/ruby-lex.rb:166:in `block (2 levels) in each_top_level_statement'
from <internal:core> core/kernel.rb:437:in `loop'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb/ruby-lex.rb:151:in `block in each_top_level_statement'
from <internal:core> core/throw_catch.rb:36:in `catch'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb/ruby-lex.rb:150:in `each_top_level_statement'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb.rb:537:in `eval_input'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb.rb:472:in `block in run'
from <internal:core> core/throw_catch.rb:36:in `catch'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb.rb:471:in `run'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/mri/irb.rb:400:in `start'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/lib/gems/gems/irb-1.2.6/exe/irb:11:in `<top (required)>'
from <internal:core> core/kernel.rb:400:in `load'
from <internal:core> core/kernel.rb:400:in `load'
from /Users/mapleong/src/github.com/Shopify/truffleruby/mxbuild/truffleruby-jvm-ce/jre/languages/ruby/bin/irb:42:in `<main>'
As chatted about in our call, it seems like a C language feature that Sulong doesn't support.
Issue about compiling/installing grpc: #1982
General internal issue about grpc: GR-23874