xref: /aosp_15_r20/external/grpc-grpc/Rakefile (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker# -*- ruby -*-
2*cc02d7e2SAndroid Build Coastguard Workerrequire 'rake/extensiontask'
3*cc02d7e2SAndroid Build Coastguard Workerrequire 'rspec/core/rake_task'
4*cc02d7e2SAndroid Build Coastguard Workerrequire 'rubocop/rake_task'
5*cc02d7e2SAndroid Build Coastguard Workerrequire 'bundler/gem_tasks'
6*cc02d7e2SAndroid Build Coastguard Workerrequire 'fileutils'
7*cc02d7e2SAndroid Build Coastguard Workerrequire 'tmpdir'
8*cc02d7e2SAndroid Build Coastguard Worker
9*cc02d7e2SAndroid Build Coastguard Workerrequire_relative 'build_config.rb'
10*cc02d7e2SAndroid Build Coastguard Worker
11*cc02d7e2SAndroid Build Coastguard Workerload 'tools/distrib/rake_compiler_docker_image.rb'
12*cc02d7e2SAndroid Build Coastguard Worker
13*cc02d7e2SAndroid Build Coastguard Worker# Add rubocop style checking tasks
14*cc02d7e2SAndroid Build Coastguard WorkerRuboCop::RakeTask.new(:rubocop) do |task|
15*cc02d7e2SAndroid Build Coastguard Worker  task.options = ['-c', 'src/ruby/.rubocop.yml']
16*cc02d7e2SAndroid Build Coastguard Worker  # add end2end tests to formatter but don't add generated proto _pb.rb's
17*cc02d7e2SAndroid Build Coastguard Worker  task.patterns = ['src/ruby/{lib,spec}/**/*.rb', 'src/ruby/end2end/*.rb']
18*cc02d7e2SAndroid Build Coastguard Workerend
19*cc02d7e2SAndroid Build Coastguard Worker
20*cc02d7e2SAndroid Build Coastguard Workerspec = Gem::Specification.load('grpc.gemspec')
21*cc02d7e2SAndroid Build Coastguard Worker
22*cc02d7e2SAndroid Build Coastguard WorkerGem::PackageTask.new(spec) do |pkg|
23*cc02d7e2SAndroid Build Coastguard Workerend
24*cc02d7e2SAndroid Build Coastguard Worker
25*cc02d7e2SAndroid Build Coastguard Worker# Add the extension compiler task
26*cc02d7e2SAndroid Build Coastguard WorkerRake::ExtensionTask.new('grpc_c', spec) do |ext|
27*cc02d7e2SAndroid Build Coastguard Worker  ext.source_pattern = '**/*.{c,h}'
28*cc02d7e2SAndroid Build Coastguard Worker  ext.ext_dir = File.join('src', 'ruby', 'ext', 'grpc')
29*cc02d7e2SAndroid Build Coastguard Worker  ext.lib_dir = File.join('src', 'ruby', 'lib', 'grpc')
30*cc02d7e2SAndroid Build Coastguard Worker  ext.cross_compile = true
31*cc02d7e2SAndroid Build Coastguard Worker  ext.cross_platform = [
32*cc02d7e2SAndroid Build Coastguard Worker    'x86-mingw32', 'x64-mingw32', 'x64-mingw-ucrt',
33*cc02d7e2SAndroid Build Coastguard Worker    'x86_64-linux', 'x86-linux', 'aarch64-linux',
34*cc02d7e2SAndroid Build Coastguard Worker    'x86_64-darwin', 'arm64-darwin',
35*cc02d7e2SAndroid Build Coastguard Worker  ]
36*cc02d7e2SAndroid Build Coastguard Worker  ext.cross_compiling do |spec|
37*cc02d7e2SAndroid Build Coastguard Worker    spec.files = spec.files.select {
38*cc02d7e2SAndroid Build Coastguard Worker      |file| file.start_with?(
39*cc02d7e2SAndroid Build Coastguard Worker        "src/ruby/bin/", "src/ruby/ext/", "src/ruby/lib/", "src/ruby/pb/")
40*cc02d7e2SAndroid Build Coastguard Worker    }
41*cc02d7e2SAndroid Build Coastguard Worker    spec.files += %w( etc/roots.pem grpc_c.32-msvcrt.ruby grpc_c.64-msvcrt.ruby grpc_c.64-ucrt.ruby )
42*cc02d7e2SAndroid Build Coastguard Worker  end
43*cc02d7e2SAndroid Build Coastguard Workerend
44*cc02d7e2SAndroid Build Coastguard Worker
45*cc02d7e2SAndroid Build Coastguard WorkerCLEAN.add "src/ruby/lib/grpc/[0-9].[0-9]", "src/ruby/lib/grpc/grpc_c.{bundle,so}"
46*cc02d7e2SAndroid Build Coastguard Worker
47*cc02d7e2SAndroid Build Coastguard Worker# Define the test suites
48*cc02d7e2SAndroid Build Coastguard WorkerSPEC_SUITES = [
49*cc02d7e2SAndroid Build Coastguard Worker  { id: :wrapper, title: 'wrapper layer', files: %w(src/ruby/spec/*.rb) },
50*cc02d7e2SAndroid Build Coastguard Worker  { id: :idiomatic, title: 'idiomatic layer', dir: %w(src/ruby/spec/generic),
51*cc02d7e2SAndroid Build Coastguard Worker    tags: ['~bidi', '~server'] },
52*cc02d7e2SAndroid Build Coastguard Worker  { id: :bidi, title: 'bidi tests', dir: %w(src/ruby/spec/generic),
53*cc02d7e2SAndroid Build Coastguard Worker    tag: 'bidi' },
54*cc02d7e2SAndroid Build Coastguard Worker  { id: :server, title: 'rpc server thread tests', dir: %w(src/ruby/spec/generic),
55*cc02d7e2SAndroid Build Coastguard Worker    tag: 'server' },
56*cc02d7e2SAndroid Build Coastguard Worker  { id: :pb, title: 'protobuf service tests', dir: %w(src/ruby/spec/pb) }
57*cc02d7e2SAndroid Build Coastguard Worker]
58*cc02d7e2SAndroid Build Coastguard Workernamespace :suite do
59*cc02d7e2SAndroid Build Coastguard Worker  SPEC_SUITES.each do |suite|
60*cc02d7e2SAndroid Build Coastguard Worker    desc "Run all specs in the #{suite[:title]} spec suite"
61*cc02d7e2SAndroid Build Coastguard Worker    RSpec::Core::RakeTask.new(suite[:id]) do |t|
62*cc02d7e2SAndroid Build Coastguard Worker      ENV['COVERAGE_NAME'] = suite[:id].to_s
63*cc02d7e2SAndroid Build Coastguard Worker      spec_files = []
64*cc02d7e2SAndroid Build Coastguard Worker      suite[:files].each { |f| spec_files += Dir[f] } if suite[:files]
65*cc02d7e2SAndroid Build Coastguard Worker
66*cc02d7e2SAndroid Build Coastguard Worker      if suite[:dir]
67*cc02d7e2SAndroid Build Coastguard Worker        suite[:dir].each { |f| spec_files += Dir["#{f}/**/*_spec.rb"] }
68*cc02d7e2SAndroid Build Coastguard Worker      end
69*cc02d7e2SAndroid Build Coastguard Worker      helper = 'src/ruby/spec/spec_helper.rb'
70*cc02d7e2SAndroid Build Coastguard Worker      spec_files << helper unless spec_files.include?(helper)
71*cc02d7e2SAndroid Build Coastguard Worker
72*cc02d7e2SAndroid Build Coastguard Worker      t.pattern = spec_files
73*cc02d7e2SAndroid Build Coastguard Worker      t.rspec_opts = "--tag #{suite[:tag]}" if suite[:tag]
74*cc02d7e2SAndroid Build Coastguard Worker      if suite[:tags]
75*cc02d7e2SAndroid Build Coastguard Worker        t.rspec_opts = suite[:tags].map { |x| "--tag #{x}" }.join(' ')
76*cc02d7e2SAndroid Build Coastguard Worker      end
77*cc02d7e2SAndroid Build Coastguard Worker    end
78*cc02d7e2SAndroid Build Coastguard Worker  end
79*cc02d7e2SAndroid Build Coastguard Workerend
80*cc02d7e2SAndroid Build Coastguard Worker
81*cc02d7e2SAndroid Build Coastguard Workerdesc 'Build the Windows gRPC DLLs for Ruby. The argument contains the list of platforms for which to build dll. Empty placeholder files will be created for platforms that were not selected.'
82*cc02d7e2SAndroid Build Coastguard Workertask 'dlls', [:plat] do |t, args|
83*cc02d7e2SAndroid Build Coastguard Worker  grpc_config = ENV['GRPC_CONFIG'] || 'opt'
84*cc02d7e2SAndroid Build Coastguard Worker  verbose = ENV['V'] || '0'
85*cc02d7e2SAndroid Build Coastguard Worker  # use env variable to set artifact build paralellism
86*cc02d7e2SAndroid Build Coastguard Worker  nproc_override = ENV['GRPC_RUBY_BUILD_PROCS'] || `nproc`.strip
87*cc02d7e2SAndroid Build Coastguard Worker  plat_list = args[:plat]
88*cc02d7e2SAndroid Build Coastguard Worker
89*cc02d7e2SAndroid Build Coastguard Worker  build_configs = [
90*cc02d7e2SAndroid Build Coastguard Worker    { cross: 'x86_64-w64-mingw32', out: 'grpc_c.64-ucrt.ruby', platform: 'x64-mingw-ucrt' },
91*cc02d7e2SAndroid Build Coastguard Worker    { cross: 'x86_64-w64-mingw32', out: 'grpc_c.64-msvcrt.ruby', platform: 'x64-mingw32' },
92*cc02d7e2SAndroid Build Coastguard Worker    { cross: 'i686-w64-mingw32', out: 'grpc_c.32-msvcrt.ruby', platform: 'x86-mingw32' }
93*cc02d7e2SAndroid Build Coastguard Worker  ]
94*cc02d7e2SAndroid Build Coastguard Worker  selected_build_configs = []
95*cc02d7e2SAndroid Build Coastguard Worker  build_configs.each do |config|
96*cc02d7e2SAndroid Build Coastguard Worker    if plat_list.include?(config[:platform])
97*cc02d7e2SAndroid Build Coastguard Worker      # build the DLL (as grpc_c.*.ruby)
98*cc02d7e2SAndroid Build Coastguard Worker      selected_build_configs.append(config)
99*cc02d7e2SAndroid Build Coastguard Worker    else
100*cc02d7e2SAndroid Build Coastguard Worker      # create an empty grpc_c.*.ruby file as a placeholder
101*cc02d7e2SAndroid Build Coastguard Worker      FileUtils.touch config[:out]
102*cc02d7e2SAndroid Build Coastguard Worker    end
103*cc02d7e2SAndroid Build Coastguard Worker  end
104*cc02d7e2SAndroid Build Coastguard Worker
105*cc02d7e2SAndroid Build Coastguard Worker  env = 'CPPFLAGS="-D_WIN32_WINNT=0x600 -DNTDDI_VERSION=0x06000000 -DUNICODE -D_UNICODE -Wno-unused-variable -Wno-unused-result -DCARES_STATICLIB -Wno-error=conversion -Wno-sign-compare -Wno-parentheses -Wno-format -DWIN32_LEAN_AND_MEAN" '
106*cc02d7e2SAndroid Build Coastguard Worker  env += 'CFLAGS="-Wno-incompatible-pointer-types" '
107*cc02d7e2SAndroid Build Coastguard Worker  env += 'CXXFLAGS="-std=c++14 -fno-exceptions" '
108*cc02d7e2SAndroid Build Coastguard Worker  env += 'LDFLAGS=-static '
109*cc02d7e2SAndroid Build Coastguard Worker  env += 'SYSTEM=MINGW32 '
110*cc02d7e2SAndroid Build Coastguard Worker  env += 'EMBED_ZLIB=true '
111*cc02d7e2SAndroid Build Coastguard Worker  env += 'EMBED_OPENSSL=true '
112*cc02d7e2SAndroid Build Coastguard Worker  env += 'BUILDDIR=/tmp '
113*cc02d7e2SAndroid Build Coastguard Worker  env += "V=#{verbose} "
114*cc02d7e2SAndroid Build Coastguard Worker  env += "GRPC_RUBY_BUILD_PROCS=#{nproc_override} "
115*cc02d7e2SAndroid Build Coastguard Worker
116*cc02d7e2SAndroid Build Coastguard Worker  out = GrpcBuildConfig::CORE_WINDOWS_DLL
117*cc02d7e2SAndroid Build Coastguard Worker
118*cc02d7e2SAndroid Build Coastguard Worker  # propagate env variables with ccache configuration to the rake-compiler-dock docker container
119*cc02d7e2SAndroid Build Coastguard Worker  # and setup ccache symlinks as needed.
120*cc02d7e2SAndroid Build Coastguard Worker  # TODO(jtattermusch): deduplicate creation of prepare_ccache_cmd
121*cc02d7e2SAndroid Build Coastguard Worker  prepare_ccache_cmd = "export GRPC_BUILD_ENABLE_CCACHE=\"#{ENV.fetch('GRPC_BUILD_ENABLE_CCACHE', '')}\" && "
122*cc02d7e2SAndroid Build Coastguard Worker  prepare_ccache_cmd += "export CCACHE_SECONDARY_STORAGE=\"#{ENV.fetch('CCACHE_SECONDARY_STORAGE', '')}\" && "
123*cc02d7e2SAndroid Build Coastguard Worker  prepare_ccache_cmd += "export PATH=\"$PATH:/usr/local/bin\" && "
124*cc02d7e2SAndroid Build Coastguard Worker  prepare_ccache_cmd += "source tools/internal_ci/helper_scripts/prepare_ccache_symlinks_rc "
125*cc02d7e2SAndroid Build Coastguard Worker
126*cc02d7e2SAndroid Build Coastguard Worker  selected_build_configs.each do |opt|
127*cc02d7e2SAndroid Build Coastguard Worker    env_comp = "CC=#{opt[:cross]}-gcc "
128*cc02d7e2SAndroid Build Coastguard Worker    env_comp += "CXX=#{opt[:cross]}-g++ "
129*cc02d7e2SAndroid Build Coastguard Worker    env_comp += "LD=#{opt[:cross]}-gcc "
130*cc02d7e2SAndroid Build Coastguard Worker    env_comp += "LDXX=#{opt[:cross]}-g++ "
131*cc02d7e2SAndroid Build Coastguard Worker    run_rake_compiler(opt[:platform], <<~EOT)
132*cc02d7e2SAndroid Build Coastguard Worker      #{prepare_ccache_cmd} && \
133*cc02d7e2SAndroid Build Coastguard Worker      gem update --system --no-document && \
134*cc02d7e2SAndroid Build Coastguard Worker      #{env} #{env_comp} make -j#{nproc_override} #{out} && \
135*cc02d7e2SAndroid Build Coastguard Worker      #{opt[:cross]}-strip -x -S #{out} && \
136*cc02d7e2SAndroid Build Coastguard Worker      cp #{out} #{opt[:out]}
137*cc02d7e2SAndroid Build Coastguard Worker    EOT
138*cc02d7e2SAndroid Build Coastguard Worker  end
139*cc02d7e2SAndroid Build Coastguard Workerend
140*cc02d7e2SAndroid Build Coastguard Worker
141*cc02d7e2SAndroid Build Coastguard Workerdesc 'Build the native gem file under rake_compiler_dock. Optionally one can pass argument to build only native gem for a chosen platform.'
142*cc02d7e2SAndroid Build Coastguard Workertask 'gem:native', [:plat] do |t, args|
143*cc02d7e2SAndroid Build Coastguard Worker  verbose = ENV['V'] || '0'
144*cc02d7e2SAndroid Build Coastguard Worker
145*cc02d7e2SAndroid Build Coastguard Worker  grpc_config = ENV['GRPC_CONFIG'] || 'opt'
146*cc02d7e2SAndroid Build Coastguard Worker  ruby_cc_versions = ['3.3.0', '3.2.0', '3.1.0', '3.0.0', '2.7.0'].join(':')
147*cc02d7e2SAndroid Build Coastguard Worker  selected_plat = "#{args[:plat]}"
148*cc02d7e2SAndroid Build Coastguard Worker
149*cc02d7e2SAndroid Build Coastguard Worker  # use env variable to set artifact build paralellism
150*cc02d7e2SAndroid Build Coastguard Worker  nproc_override = ENV['GRPC_RUBY_BUILD_PROCS'] || `nproc`.strip
151*cc02d7e2SAndroid Build Coastguard Worker
152*cc02d7e2SAndroid Build Coastguard Worker  # propagate env variables with ccache configuration to the rake-compiler-dock docker container
153*cc02d7e2SAndroid Build Coastguard Worker  # and setup ccache symlinks as needed.
154*cc02d7e2SAndroid Build Coastguard Worker  prepare_ccache_cmd = "export GRPC_BUILD_ENABLE_CCACHE=\"#{ENV.fetch('GRPC_BUILD_ENABLE_CCACHE', '')}\" && "
155*cc02d7e2SAndroid Build Coastguard Worker  prepare_ccache_cmd += "export CCACHE_SECONDARY_STORAGE=\"#{ENV.fetch('CCACHE_SECONDARY_STORAGE', '')}\" && "
156*cc02d7e2SAndroid Build Coastguard Worker  prepare_ccache_cmd += "export PATH=\"$PATH:/usr/local/bin\" && "
157*cc02d7e2SAndroid Build Coastguard Worker  prepare_ccache_cmd += "source tools/internal_ci/helper_scripts/prepare_ccache_symlinks_rc "
158*cc02d7e2SAndroid Build Coastguard Worker
159*cc02d7e2SAndroid Build Coastguard Worker  supported_windows_platforms = ['x86-mingw32', 'x64-mingw32', 'x64-mingw-ucrt']
160*cc02d7e2SAndroid Build Coastguard Worker  supported_unix_platforms = ['x86_64-linux', 'x86-linux', 'aarch64-linux', 'x86_64-darwin', 'arm64-darwin']
161*cc02d7e2SAndroid Build Coastguard Worker  supported_platforms = supported_windows_platforms + supported_unix_platforms
162*cc02d7e2SAndroid Build Coastguard Worker
163*cc02d7e2SAndroid Build Coastguard Worker  if selected_plat.empty?
164*cc02d7e2SAndroid Build Coastguard Worker    # build everything
165*cc02d7e2SAndroid Build Coastguard Worker    windows_platforms = supported_windows_platforms
166*cc02d7e2SAndroid Build Coastguard Worker    unix_platforms = supported_unix_platforms
167*cc02d7e2SAndroid Build Coastguard Worker  else
168*cc02d7e2SAndroid Build Coastguard Worker    # build only selected platform
169*cc02d7e2SAndroid Build Coastguard Worker    if supported_windows_platforms.include?(selected_plat)
170*cc02d7e2SAndroid Build Coastguard Worker      windows_platforms = [selected_plat]
171*cc02d7e2SAndroid Build Coastguard Worker      unix_platforms = []
172*cc02d7e2SAndroid Build Coastguard Worker    elsif supported_unix_platforms.include?(selected_plat)
173*cc02d7e2SAndroid Build Coastguard Worker      windows_platforms = []
174*cc02d7e2SAndroid Build Coastguard Worker      unix_platforms = [selected_plat]
175*cc02d7e2SAndroid Build Coastguard Worker    else
176*cc02d7e2SAndroid Build Coastguard Worker      fail "Unsupported platform '#{selected_plat}' passed as an argument."
177*cc02d7e2SAndroid Build Coastguard Worker    end
178*cc02d7e2SAndroid Build Coastguard Worker  end
179*cc02d7e2SAndroid Build Coastguard Worker
180*cc02d7e2SAndroid Build Coastguard Worker  # Create the windows dlls or create the empty placeholders
181*cc02d7e2SAndroid Build Coastguard Worker  Rake::Task['dlls'].execute(plat: windows_platforms)
182*cc02d7e2SAndroid Build Coastguard Worker
183*cc02d7e2SAndroid Build Coastguard Worker  windows_platforms.each do |plat|
184*cc02d7e2SAndroid Build Coastguard Worker    run_rake_compiler(plat, <<~EOT)
185*cc02d7e2SAndroid Build Coastguard Worker      #{prepare_ccache_cmd} && \
186*cc02d7e2SAndroid Build Coastguard Worker      gem update --system --no-document && \
187*cc02d7e2SAndroid Build Coastguard Worker      bundle && \
188*cc02d7e2SAndroid Build Coastguard Worker      bundle exec rake clean && \
189*cc02d7e2SAndroid Build Coastguard Worker      bundle exec rake native:#{plat} pkg/#{spec.full_name}-#{plat}.gem pkg/#{spec.full_name}.gem \
190*cc02d7e2SAndroid Build Coastguard Worker        RUBY_CC_VERSION=#{ruby_cc_versions} \
191*cc02d7e2SAndroid Build Coastguard Worker        V=#{verbose} \
192*cc02d7e2SAndroid Build Coastguard Worker        GRPC_CONFIG=#{grpc_config} \
193*cc02d7e2SAndroid Build Coastguard Worker        GRPC_RUBY_BUILD_PROCS=#{nproc_override}
194*cc02d7e2SAndroid Build Coastguard Worker    EOT
195*cc02d7e2SAndroid Build Coastguard Worker  end
196*cc02d7e2SAndroid Build Coastguard Worker
197*cc02d7e2SAndroid Build Coastguard Worker  # Truncate grpc_c.*.ruby files because they're for Windows only and we don't want
198*cc02d7e2SAndroid Build Coastguard Worker  # them to take up space in the gems that don't target windows.
199*cc02d7e2SAndroid Build Coastguard Worker  File.truncate('grpc_c.32-msvcrt.ruby', 0)
200*cc02d7e2SAndroid Build Coastguard Worker  File.truncate('grpc_c.64-msvcrt.ruby', 0)
201*cc02d7e2SAndroid Build Coastguard Worker  File.truncate('grpc_c.64-ucrt.ruby', 0)
202*cc02d7e2SAndroid Build Coastguard Worker
203*cc02d7e2SAndroid Build Coastguard Worker  `mkdir -p src/ruby/nativedebug/symbols`
204*cc02d7e2SAndroid Build Coastguard Worker  # TODO(apolcyn): make debug symbols work on apple platforms.
205*cc02d7e2SAndroid Build Coastguard Worker  # Currently we hit "objcopy: grpc_c.bundle: file format not recognized"
206*cc02d7e2SAndroid Build Coastguard Worker  # TODO(apolcyn): make debug symbols work on aarch64 linux.
207*cc02d7e2SAndroid Build Coastguard Worker  # Currently we hit "objcopy: Unable to recognise the format of the input file `grpc_c.so'"
208*cc02d7e2SAndroid Build Coastguard Worker  unix_platforms_without_debug_symbols = ['x86_64-darwin', 'arm64-darwin', 'aarch64-linux']
209*cc02d7e2SAndroid Build Coastguard Worker
210*cc02d7e2SAndroid Build Coastguard Worker  unix_platforms.each do |plat|
211*cc02d7e2SAndroid Build Coastguard Worker    if unix_platforms_without_debug_symbols.include?(plat)
212*cc02d7e2SAndroid Build Coastguard Worker      debug_symbols_dir = ''
213*cc02d7e2SAndroid Build Coastguard Worker    else
214*cc02d7e2SAndroid Build Coastguard Worker      debug_symbols_dir = File.join(Dir.pwd, 'src/ruby/nativedebug/symbols')
215*cc02d7e2SAndroid Build Coastguard Worker    end
216*cc02d7e2SAndroid Build Coastguard Worker    run_rake_compiler(plat, <<~EOT)
217*cc02d7e2SAndroid Build Coastguard Worker      #{prepare_ccache_cmd} && \
218*cc02d7e2SAndroid Build Coastguard Worker      gem update --system --no-document && \
219*cc02d7e2SAndroid Build Coastguard Worker      bundle && \
220*cc02d7e2SAndroid Build Coastguard Worker      bundle exec rake clean && \
221*cc02d7e2SAndroid Build Coastguard Worker      export GRPC_RUBY_DEBUG_SYMBOLS_OUTPUT_DIR=#{debug_symbols_dir} && \
222*cc02d7e2SAndroid Build Coastguard Worker      bundle exec rake native:#{plat} pkg/#{spec.full_name}-#{plat}.gem pkg/#{spec.full_name}.gem \
223*cc02d7e2SAndroid Build Coastguard Worker        RUBY_CC_VERSION=#{ruby_cc_versions} \
224*cc02d7e2SAndroid Build Coastguard Worker        V=#{verbose} \
225*cc02d7e2SAndroid Build Coastguard Worker        GRPC_CONFIG=#{grpc_config} \
226*cc02d7e2SAndroid Build Coastguard Worker        GRPC_RUBY_BUILD_PROCS=#{nproc_override}
227*cc02d7e2SAndroid Build Coastguard Worker    EOT
228*cc02d7e2SAndroid Build Coastguard Worker  end
229*cc02d7e2SAndroid Build Coastguard Worker  # Generate debug symbol packages to complement the native libraries we just built
230*cc02d7e2SAndroid Build Coastguard Worker  unix_platforms.each do |plat|
231*cc02d7e2SAndroid Build Coastguard Worker    unless unix_platforms_without_debug_symbols.include?(plat)
232*cc02d7e2SAndroid Build Coastguard Worker      `bash src/ruby/nativedebug/build_package.sh #{plat}`
233*cc02d7e2SAndroid Build Coastguard Worker      `cp src/ruby/nativedebug/pkg/*.gem pkg/`
234*cc02d7e2SAndroid Build Coastguard Worker    end
235*cc02d7e2SAndroid Build Coastguard Worker  end
236*cc02d7e2SAndroid Build Coastguard Workerend
237*cc02d7e2SAndroid Build Coastguard Worker
238*cc02d7e2SAndroid Build Coastguard Worker# Define dependencies between the suites.
239*cc02d7e2SAndroid Build Coastguard Workertask 'suite:wrapper' => [:compile, :rubocop]
240*cc02d7e2SAndroid Build Coastguard Workertask 'suite:idiomatic' => 'suite:wrapper'
241*cc02d7e2SAndroid Build Coastguard Workertask 'suite:bidi' => 'suite:wrapper'
242*cc02d7e2SAndroid Build Coastguard Workertask 'suite:server' => 'suite:wrapper'
243*cc02d7e2SAndroid Build Coastguard Workertask 'suite:pb' => 'suite:server'
244*cc02d7e2SAndroid Build Coastguard Worker
245*cc02d7e2SAndroid Build Coastguard Workerdesc 'Compiles the gRPC extension then runs all the tests'
246*cc02d7e2SAndroid Build Coastguard Workertask all: ['suite:idiomatic', 'suite:bidi', 'suite:pb', 'suite:server']
247*cc02d7e2SAndroid Build Coastguard Workertask default: :all
248