diff --git a/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang b/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang new file mode 100644 index 00000000000..3a0599b7235 --- /dev/null +++ b/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang @@ -0,0 +1,2 @@ +_Init_grpc_c +_rb_tr_abi_version diff --git a/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc b/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc new file mode 100644 index 00000000000..f6b159d07d5 --- /dev/null +++ b/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc @@ -0,0 +1,7 @@ +grpc_1.0 { + global: + Init_grpc_c; + rb_tr_abi_version; + local: + *; +}; \ No newline at end of file diff --git a/src/ruby/ext/grpc/ext-export-truffleruby.clang b/src/ruby/ext/grpc/ext-export-truffleruby.clang index 3a0599b7235..d568e8e40e0 100644 --- a/src/ruby/ext/grpc/ext-export-truffleruby.clang +++ b/src/ruby/ext/grpc/ext-export-truffleruby.clang @@ -1,2 +1 @@ _Init_grpc_c -_rb_tr_abi_version diff --git a/src/ruby/ext/grpc/ext-export-truffleruby.gcc b/src/ruby/ext/grpc/ext-export-truffleruby.gcc index f6b159d07d5..58b6943fe04 100644 --- a/src/ruby/ext/grpc/ext-export-truffleruby.gcc +++ b/src/ruby/ext/grpc/ext-export-truffleruby.gcc @@ -1,7 +1,6 @@ grpc_1.0 { global: Init_grpc_c; - rb_tr_abi_version; local: *; -}; \ No newline at end of file +}; diff --git a/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang b/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang new file mode 100644 index 00000000000..5b6dc5b3969 --- /dev/null +++ b/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang @@ -0,0 +1,2 @@ +_Init_grpc_c +_ruby_abi_version diff --git a/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc b/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc new file mode 100644 index 00000000000..d6623cfdd98 --- /dev/null +++ b/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc @@ -0,0 +1,7 @@ +grpc_1.0 { + global: + Init_grpc_c; + ruby_abi_version; + local: + *; +}; \ No newline at end of file diff --git a/src/ruby/ext/grpc/ext-export.clang b/src/ruby/ext/grpc/ext-export.clang index 5b6dc5b3969..d568e8e40e0 100644 --- a/src/ruby/ext/grpc/ext-export.clang +++ b/src/ruby/ext/grpc/ext-export.clang @@ -1,2 +1 @@ _Init_grpc_c -_ruby_abi_version diff --git a/src/ruby/ext/grpc/ext-export.gcc b/src/ruby/ext/grpc/ext-export.gcc index d6623cfdd98..58b6943fe04 100644 --- a/src/ruby/ext/grpc/ext-export.gcc +++ b/src/ruby/ext/grpc/ext-export.gcc @@ -1,7 +1,6 @@ grpc_1.0 { global: Init_grpc_c; - ruby_abi_version; local: *; -}; \ No newline at end of file +}; diff --git a/src/ruby/ext/grpc/extconf.rb b/src/ruby/ext/grpc/extconf.rb index 5261dc6be51..35abbb9189d 100644 --- a/src/ruby/ext/grpc/extconf.rb +++ b/src/ruby/ext/grpc/extconf.rb @@ -113,8 +113,30 @@ end $CFLAGS << ' -DGRPC_RUBY_WINDOWS_UCRT' if windows_ucrt $CFLAGS << ' -I' + File.join(grpc_root, 'include') -ext_export_file = File.join(grpc_root, 'src', 'ruby', 'ext', 'grpc', 'ext-export') -ext_export_file += '-truffleruby' if RUBY_ENGINE == 'truffleruby' +def have_ruby_abi_version() + m = /(\d+)\.(\d+)/.match(RUBY_VERSION) + if m.nil? + puts "Failed to parse ruby version: #{RUBY_VERSION}. Assuming ruby_abi_version symbol is NOT present." + return false + end + major = m[1].to_i + minor = m[2].to_i + if major >= 3 and minor >= 2 + puts "Ruby version #{RUBY_VERSION} >= 3.2. Assuming ruby_abi_version symbol is present." + return true + end + puts "Ruby version #{RUBY_VERSION} < 3.2. Assuming ruby_abi_version symbol is NOT present." + false +end + +def ext_export_filename() + name = 'ext-export' + name += '-truffleruby' if RUBY_ENGINE == 'truffleruby' + name += '-with-ruby-abi-version' if have_ruby_abi_version() + name +end + +ext_export_file = File.join(grpc_root, 'src', 'ruby', 'ext', 'grpc', ext_export_filename()) $LDFLAGS << ' -Wl,--version-script="' + ext_export_file + '.gcc"' if linux $LDFLAGS << ' -Wl,-exported_symbols_list,"' + ext_export_file + '.clang"' if apple_toolchain