xref: /aosp_15_r20/external/grpc-grpc/src/ruby/ext/grpc/extconf.rb (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker# Copyright 2015 gRPC authors.
2*cc02d7e2SAndroid Build Coastguard Worker#
3*cc02d7e2SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*cc02d7e2SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*cc02d7e2SAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*cc02d7e2SAndroid Build Coastguard Worker#
7*cc02d7e2SAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
8*cc02d7e2SAndroid Build Coastguard Worker#
9*cc02d7e2SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*cc02d7e2SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*cc02d7e2SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*cc02d7e2SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*cc02d7e2SAndroid Build Coastguard Worker# limitations under the License.
14*cc02d7e2SAndroid Build Coastguard Worker
15*cc02d7e2SAndroid Build Coastguard Workerrequire 'etc'
16*cc02d7e2SAndroid Build Coastguard Workerrequire 'mkmf'
17*cc02d7e2SAndroid Build Coastguard Workerrequire_relative '../../lib/grpc/version.rb'
18*cc02d7e2SAndroid Build Coastguard Worker
19*cc02d7e2SAndroid Build Coastguard Workerwindows = RUBY_PLATFORM =~ /mingw|mswin/
20*cc02d7e2SAndroid Build Coastguard Workerwindows_ucrt = RUBY_PLATFORM =~ /(mingw|mswin).*ucrt/
21*cc02d7e2SAndroid Build Coastguard Workerbsd = RUBY_PLATFORM =~ /bsd/
22*cc02d7e2SAndroid Build Coastguard Workerdarwin = RUBY_PLATFORM =~ /darwin/
23*cc02d7e2SAndroid Build Coastguard Workerlinux = RUBY_PLATFORM =~ /linux/
24*cc02d7e2SAndroid Build Coastguard Workercross_compiling = ENV['RCD_HOST_RUBY_VERSION'] # set by rake-compiler-dock in build containers
25*cc02d7e2SAndroid Build Coastguard Worker# TruffleRuby uses the Sulong LLVM runtime, which is different from Apple's.
26*cc02d7e2SAndroid Build Coastguard Workerapple_toolchain = darwin && RUBY_ENGINE != 'truffleruby'
27*cc02d7e2SAndroid Build Coastguard Worker
28*cc02d7e2SAndroid Build Coastguard Workergrpc_root = File.expand_path(File.join(File.dirname(__FILE__), '../../../..'))
29*cc02d7e2SAndroid Build Coastguard Worker
30*cc02d7e2SAndroid Build Coastguard Workergrpc_config = ENV['GRPC_CONFIG'] || 'opt'
31*cc02d7e2SAndroid Build Coastguard Worker
32*cc02d7e2SAndroid Build Coastguard WorkerENV['MACOSX_DEPLOYMENT_TARGET'] = '10.10'
33*cc02d7e2SAndroid Build Coastguard Worker
34*cc02d7e2SAndroid Build Coastguard Workerdef debug_symbols_output_dir
35*cc02d7e2SAndroid Build Coastguard Worker  d = ENV['GRPC_RUBY_DEBUG_SYMBOLS_OUTPUT_DIR']
36*cc02d7e2SAndroid Build Coastguard Worker  return nil if d.nil? or d.size == 0
37*cc02d7e2SAndroid Build Coastguard Worker  d
38*cc02d7e2SAndroid Build Coastguard Workerend
39*cc02d7e2SAndroid Build Coastguard Worker
40*cc02d7e2SAndroid Build Coastguard Workerdef maybe_remove_strip_all_linker_flag(flags)
41*cc02d7e2SAndroid Build Coastguard Worker  if debug_symbols_output_dir
42*cc02d7e2SAndroid Build Coastguard Worker    # Hack to prevent automatic stripping during shared library linking.
43*cc02d7e2SAndroid Build Coastguard Worker    # rake-compiler-dock sets the -s LDFLAG when building rubies for
44*cc02d7e2SAndroid Build Coastguard Worker    # cross compilation, and this -s flag propagates into RbConfig. Stripping
45*cc02d7e2SAndroid Build Coastguard Worker    # during the link is problematic because it prevents us from saving
46*cc02d7e2SAndroid Build Coastguard Worker    # debug symbols. We want to first link our shared library, then save
47*cc02d7e2SAndroid Build Coastguard Worker    # debug symbols, and only after that strip.
48*cc02d7e2SAndroid Build Coastguard Worker    flags = flags.split(' ')
49*cc02d7e2SAndroid Build Coastguard Worker    flags = flags.reject {|flag| flag == '-s'}
50*cc02d7e2SAndroid Build Coastguard Worker    flags = flags.join(' ')
51*cc02d7e2SAndroid Build Coastguard Worker  end
52*cc02d7e2SAndroid Build Coastguard Worker  flags
53*cc02d7e2SAndroid Build Coastguard Workerend
54*cc02d7e2SAndroid Build Coastguard Worker
55*cc02d7e2SAndroid Build Coastguard Workerdef env_unset?(name)
56*cc02d7e2SAndroid Build Coastguard Worker  ENV[name].nil? || ENV[name].size == 0
57*cc02d7e2SAndroid Build Coastguard Workerend
58*cc02d7e2SAndroid Build Coastguard Worker
59*cc02d7e2SAndroid Build Coastguard Workerdef inherit_env_or_rbconfig(name)
60*cc02d7e2SAndroid Build Coastguard Worker  ENV[name] = inherit_rbconfig(name) if env_unset?(name)
61*cc02d7e2SAndroid Build Coastguard Workerend
62*cc02d7e2SAndroid Build Coastguard Worker
63*cc02d7e2SAndroid Build Coastguard Workerdef inherit_rbconfig(name, linker_flag: false)
64*cc02d7e2SAndroid Build Coastguard Worker  value = RbConfig::CONFIG[name] || ''
65*cc02d7e2SAndroid Build Coastguard Worker  if linker_flag
66*cc02d7e2SAndroid Build Coastguard Worker    value = maybe_remove_strip_all_linker_flag(value)
67*cc02d7e2SAndroid Build Coastguard Worker  end
68*cc02d7e2SAndroid Build Coastguard Worker  p "extconf.rb setting ENV[#{name}] = #{value}"
69*cc02d7e2SAndroid Build Coastguard Worker  ENV[name] = value
70*cc02d7e2SAndroid Build Coastguard Workerend
71*cc02d7e2SAndroid Build Coastguard Worker
72*cc02d7e2SAndroid Build Coastguard Workerdef env_append(name, string)
73*cc02d7e2SAndroid Build Coastguard Worker  ENV[name] += ' ' + string
74*cc02d7e2SAndroid Build Coastguard Workerend
75*cc02d7e2SAndroid Build Coastguard Worker
76*cc02d7e2SAndroid Build Coastguard Worker# build grpc C-core
77*cc02d7e2SAndroid Build Coastguard Workerinherit_env_or_rbconfig 'AR'
78*cc02d7e2SAndroid Build Coastguard Workerinherit_env_or_rbconfig 'CC'
79*cc02d7e2SAndroid Build Coastguard Workerinherit_env_or_rbconfig 'CXX'
80*cc02d7e2SAndroid Build Coastguard Workerinherit_env_or_rbconfig 'RANLIB'
81*cc02d7e2SAndroid Build Coastguard Workerinherit_env_or_rbconfig 'STRIP'
82*cc02d7e2SAndroid Build Coastguard Workerinherit_rbconfig 'CPPFLAGS'
83*cc02d7e2SAndroid Build Coastguard Workerinherit_rbconfig('LDFLAGS', linker_flag: true)
84*cc02d7e2SAndroid Build Coastguard Worker
85*cc02d7e2SAndroid Build Coastguard WorkerENV['LD'] = ENV['CC'] if env_unset?('LD')
86*cc02d7e2SAndroid Build Coastguard WorkerENV['LDXX'] = ENV['CXX'] if env_unset?('LDXX')
87*cc02d7e2SAndroid Build Coastguard Worker
88*cc02d7e2SAndroid Build Coastguard Workerif RUBY_ENGINE == 'truffleruby'
89*cc02d7e2SAndroid Build Coastguard Worker  # ensure we can find the system's OpenSSL
90*cc02d7e2SAndroid Build Coastguard Worker  env_append 'CPPFLAGS', RbConfig::CONFIG['cppflags']
91*cc02d7e2SAndroid Build Coastguard Workerend
92*cc02d7e2SAndroid Build Coastguard Worker
93*cc02d7e2SAndroid Build Coastguard Workerif apple_toolchain && !cross_compiling
94*cc02d7e2SAndroid Build Coastguard Worker  ENV['AR'] = 'libtool'
95*cc02d7e2SAndroid Build Coastguard Worker  ENV['ARFLAGS'] = '-o'
96*cc02d7e2SAndroid Build Coastguard Workerend
97*cc02d7e2SAndroid Build Coastguard Worker
98*cc02d7e2SAndroid Build Coastguard Worker# Don't embed on TruffleRuby (constant-time crypto is unsafe with Sulong, slow build times)
99*cc02d7e2SAndroid Build Coastguard WorkerENV['EMBED_OPENSSL'] = (RUBY_ENGINE != 'truffleruby').to_s
100*cc02d7e2SAndroid Build Coastguard Worker# Don't embed on TruffleRuby (the system zlib is already linked for the zlib C extension, slow build times)
101*cc02d7e2SAndroid Build Coastguard WorkerENV['EMBED_ZLIB'] = (RUBY_ENGINE != 'truffleruby').to_s
102*cc02d7e2SAndroid Build Coastguard Worker
103*cc02d7e2SAndroid Build Coastguard WorkerENV['ARCH_FLAGS'] = RbConfig::CONFIG['ARCH_FLAG']
104*cc02d7e2SAndroid Build Coastguard Workerif apple_toolchain && !cross_compiling
105*cc02d7e2SAndroid Build Coastguard Worker  if RUBY_PLATFORM =~ /arm64/
106*cc02d7e2SAndroid Build Coastguard Worker    ENV['ARCH_FLAGS'] = '-arch arm64'
107*cc02d7e2SAndroid Build Coastguard Worker  else
108*cc02d7e2SAndroid Build Coastguard Worker    ENV['ARCH_FLAGS'] = '-arch i386 -arch x86_64'
109*cc02d7e2SAndroid Build Coastguard Worker  end
110*cc02d7e2SAndroid Build Coastguard Workerend
111*cc02d7e2SAndroid Build Coastguard Worker
112*cc02d7e2SAndroid Build Coastguard Workerenv_append 'CPPFLAGS', '-DGRPC_XDS_USER_AGENT_NAME_SUFFIX="\"RUBY\""'
113*cc02d7e2SAndroid Build Coastguard Worker
114*cc02d7e2SAndroid Build Coastguard Workerrequire_relative '../../lib/grpc/version'
115*cc02d7e2SAndroid Build Coastguard Workerenv_append 'CPPFLAGS', '-DGRPC_XDS_USER_AGENT_VERSION_SUFFIX="\"' + GRPC::VERSION + '\""'
116*cc02d7e2SAndroid Build Coastguard Workerenv_append 'CPPFLAGS', '-DGRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK=1'
117*cc02d7e2SAndroid Build Coastguard Worker
118*cc02d7e2SAndroid Build Coastguard Workeroutput_dir = File.expand_path(RbConfig::CONFIG['topdir'])
119*cc02d7e2SAndroid Build Coastguard Workergrpc_lib_dir = File.join(output_dir, 'libs', grpc_config)
120*cc02d7e2SAndroid Build Coastguard WorkerENV['BUILDDIR'] = output_dir
121*cc02d7e2SAndroid Build Coastguard Worker
122*cc02d7e2SAndroid Build Coastguard Workerstrip_tool = RbConfig::CONFIG['STRIP']
123*cc02d7e2SAndroid Build Coastguard Workerstrip_tool += ' -x' if apple_toolchain
124*cc02d7e2SAndroid Build Coastguard Worker
125*cc02d7e2SAndroid Build Coastguard Workerunless windows
126*cc02d7e2SAndroid Build Coastguard Worker  puts 'Building internal gRPC into ' + grpc_lib_dir
127*cc02d7e2SAndroid Build Coastguard Worker  nproc = 4
128*cc02d7e2SAndroid Build Coastguard Worker  nproc = Etc.nprocessors if Etc.respond_to? :nprocessors
129*cc02d7e2SAndroid Build Coastguard Worker  nproc_override = ENV['GRPC_RUBY_BUILD_PROCS']
130*cc02d7e2SAndroid Build Coastguard Worker  unless nproc_override.nil? or nproc_override.size == 0
131*cc02d7e2SAndroid Build Coastguard Worker    nproc = nproc_override
132*cc02d7e2SAndroid Build Coastguard Worker    puts "Overriding make parallelism to #{nproc}"
133*cc02d7e2SAndroid Build Coastguard Worker  end
134*cc02d7e2SAndroid Build Coastguard Worker  make = bsd ? 'gmake' : 'make'
135*cc02d7e2SAndroid Build Coastguard Worker  cmd = "#{make} -j#{nproc} -C #{grpc_root} #{grpc_lib_dir}/libgrpc.a CONFIG=#{grpc_config} Q="
136*cc02d7e2SAndroid Build Coastguard Worker  puts "Building grpc native library: #{cmd}"
137*cc02d7e2SAndroid Build Coastguard Worker  system(cmd)
138*cc02d7e2SAndroid Build Coastguard Worker  exit 1 unless $? == 0
139*cc02d7e2SAndroid Build Coastguard Workerend
140*cc02d7e2SAndroid Build Coastguard Worker
141*cc02d7e2SAndroid Build Coastguard Worker# C-core built, generate Makefile for ruby extension
142*cc02d7e2SAndroid Build Coastguard Worker$LDFLAGS = maybe_remove_strip_all_linker_flag($LDFLAGS)
143*cc02d7e2SAndroid Build Coastguard Worker$DLDFLAGS = maybe_remove_strip_all_linker_flag($DLDFLAGS)
144*cc02d7e2SAndroid Build Coastguard Worker
145*cc02d7e2SAndroid Build Coastguard Worker$CFLAGS << ' -DGRPC_RUBY_WINDOWS_UCRT' if windows_ucrt
146*cc02d7e2SAndroid Build Coastguard Worker$CFLAGS << ' -I' + File.join(grpc_root, 'include')
147*cc02d7e2SAndroid Build Coastguard Worker$CFLAGS << ' -g'
148*cc02d7e2SAndroid Build Coastguard Worker
149*cc02d7e2SAndroid Build Coastguard Workerdef have_ruby_abi_version()
150*cc02d7e2SAndroid Build Coastguard Worker  return true if RUBY_ENGINE == 'truffleruby'
151*cc02d7e2SAndroid Build Coastguard Worker  # ruby_abi_version is only available in development versions: https://github.com/ruby/ruby/pull/6231
152*cc02d7e2SAndroid Build Coastguard Worker  return false if RUBY_PATCHLEVEL >= 0
153*cc02d7e2SAndroid Build Coastguard Worker
154*cc02d7e2SAndroid Build Coastguard Worker  m = /(\d+)\.(\d+)/.match(RUBY_VERSION)
155*cc02d7e2SAndroid Build Coastguard Worker  if m.nil?
156*cc02d7e2SAndroid Build Coastguard Worker    puts "Failed to parse ruby version: #{RUBY_VERSION}. Assuming ruby_abi_version symbol is NOT present."
157*cc02d7e2SAndroid Build Coastguard Worker    return false
158*cc02d7e2SAndroid Build Coastguard Worker  end
159*cc02d7e2SAndroid Build Coastguard Worker  major = m[1].to_i
160*cc02d7e2SAndroid Build Coastguard Worker  minor = m[2].to_i
161*cc02d7e2SAndroid Build Coastguard Worker  if major >= 3 and minor >= 2
162*cc02d7e2SAndroid Build Coastguard Worker    puts "Ruby version #{RUBY_VERSION} >= 3.2. Assuming ruby_abi_version symbol is present."
163*cc02d7e2SAndroid Build Coastguard Worker    return true
164*cc02d7e2SAndroid Build Coastguard Worker  end
165*cc02d7e2SAndroid Build Coastguard Worker  puts "Ruby version #{RUBY_VERSION} < 3.2. Assuming ruby_abi_version symbol is NOT present."
166*cc02d7e2SAndroid Build Coastguard Worker  false
167*cc02d7e2SAndroid Build Coastguard Workerend
168*cc02d7e2SAndroid Build Coastguard Worker
169*cc02d7e2SAndroid Build Coastguard Workerdef ext_export_filename()
170*cc02d7e2SAndroid Build Coastguard Worker  name = 'ext-export'
171*cc02d7e2SAndroid Build Coastguard Worker  name += '-truffleruby' if RUBY_ENGINE == 'truffleruby'
172*cc02d7e2SAndroid Build Coastguard Worker  name += '-with-ruby-abi-version' if have_ruby_abi_version()
173*cc02d7e2SAndroid Build Coastguard Worker  name
174*cc02d7e2SAndroid Build Coastguard Workerend
175*cc02d7e2SAndroid Build Coastguard Worker
176*cc02d7e2SAndroid Build Coastguard Workerext_export_file = File.join(grpc_root, 'src', 'ruby', 'ext', 'grpc', ext_export_filename())
177*cc02d7e2SAndroid Build Coastguard Worker$LDFLAGS << ' -Wl,--version-script="' + ext_export_file + '.gcc"' if linux
178*cc02d7e2SAndroid Build Coastguard Workerif apple_toolchain
179*cc02d7e2SAndroid Build Coastguard Worker  $LDFLAGS << ' -weak_framework CoreFoundation'
180*cc02d7e2SAndroid Build Coastguard Worker  $LDFLAGS << ' -Wl,-exported_symbols_list,"' + ext_export_file + '.clang"'
181*cc02d7e2SAndroid Build Coastguard Workerend
182*cc02d7e2SAndroid Build Coastguard Worker
183*cc02d7e2SAndroid Build Coastguard Worker$LDFLAGS << ' ' + File.join(grpc_lib_dir, 'libgrpc.a') unless windows
184*cc02d7e2SAndroid Build Coastguard Workerif grpc_config == 'gcov'
185*cc02d7e2SAndroid Build Coastguard Worker  $CFLAGS << ' -O0 -fprofile-arcs -ftest-coverage'
186*cc02d7e2SAndroid Build Coastguard Worker  $LDFLAGS << ' -fprofile-arcs -ftest-coverage -rdynamic'
187*cc02d7e2SAndroid Build Coastguard Workerend
188*cc02d7e2SAndroid Build Coastguard Worker
189*cc02d7e2SAndroid Build Coastguard Workerif grpc_config == 'dbg'
190*cc02d7e2SAndroid Build Coastguard Worker  $CFLAGS << ' -O0'
191*cc02d7e2SAndroid Build Coastguard Workerend
192*cc02d7e2SAndroid Build Coastguard Worker
193*cc02d7e2SAndroid Build Coastguard Worker# Do not statically link standard libraries on TruffleRuby as this does not work when compiling to bitcode
194*cc02d7e2SAndroid Build Coastguard Workerif linux && RUBY_ENGINE != 'truffleruby'
195*cc02d7e2SAndroid Build Coastguard Worker  $LDFLAGS << ' -static-libgcc -static-libstdc++'
196*cc02d7e2SAndroid Build Coastguard Workerend
197*cc02d7e2SAndroid Build Coastguard Worker$LDFLAGS << ' -static' if windows
198*cc02d7e2SAndroid Build Coastguard Worker
199*cc02d7e2SAndroid Build Coastguard Worker$CFLAGS << ' -std=c11 '
200*cc02d7e2SAndroid Build Coastguard Worker$CFLAGS << ' -Wall '
201*cc02d7e2SAndroid Build Coastguard Worker$CFLAGS << ' -Wextra '
202*cc02d7e2SAndroid Build Coastguard Worker$CFLAGS << ' -pedantic '
203*cc02d7e2SAndroid Build Coastguard Worker
204*cc02d7e2SAndroid Build Coastguard Workeroutput = File.join('grpc', 'grpc_c')
205*cc02d7e2SAndroid Build Coastguard Workerputs "extconf.rb $LDFLAGS: #{$LDFLAGS}"
206*cc02d7e2SAndroid Build Coastguard Workerputs "extconf.rb $DLDFLAGS: #{$DLDFLAGS}"
207*cc02d7e2SAndroid Build Coastguard Workerputs "extconf.rb $CFLAGS: #{$CFLAGS}"
208*cc02d7e2SAndroid Build Coastguard Workerputs 'Generating Makefile for ' + output
209*cc02d7e2SAndroid Build Coastguard Workercreate_makefile(output)
210*cc02d7e2SAndroid Build Coastguard Worker
211*cc02d7e2SAndroid Build Coastguard Workerruby_major_minor = /(\d+\.\d+)/.match(RUBY_VERSION).to_s
212*cc02d7e2SAndroid Build Coastguard Workerdebug_symbols = "grpc-#{GRPC::VERSION}-#{RUBY_PLATFORM}-ruby-#{ruby_major_minor}.dbg"
213*cc02d7e2SAndroid Build Coastguard Worker
214*cc02d7e2SAndroid Build Coastguard WorkerFile.open('Makefile.new', 'w') do |o|
215*cc02d7e2SAndroid Build Coastguard Worker  o.puts 'hijack_remove_unused_artifacts: all remove_unused_artifacts'
216*cc02d7e2SAndroid Build Coastguard Worker  o.puts
217*cc02d7e2SAndroid Build Coastguard Worker  o.write(File.read('Makefile'))
218*cc02d7e2SAndroid Build Coastguard Worker  o.puts
219*cc02d7e2SAndroid Build Coastguard Worker  o.puts 'remove_unused_artifacts: $(DLLIB)'
220*cc02d7e2SAndroid Build Coastguard Worker  # Now that the extension library has been linked, we can remove unused artifacts
221*cc02d7e2SAndroid Build Coastguard Worker  # that take up a lot of disk space.
222*cc02d7e2SAndroid Build Coastguard Worker  rm_obj_cmd = "rm -rf #{File.join(output_dir, 'objs')}"
223*cc02d7e2SAndroid Build Coastguard Worker  o.puts "\t$(ECHO) Removing unused object artifacts: #{rm_obj_cmd}"
224*cc02d7e2SAndroid Build Coastguard Worker  o.puts "\t$(Q) #{rm_obj_cmd}"
225*cc02d7e2SAndroid Build Coastguard Worker  rm_grpc_core_libs = "rm -f #{grpc_lib_dir}/*.a"
226*cc02d7e2SAndroid Build Coastguard Worker  o.puts "\t$(ECHO) Removing unused grpc core libraries: #{rm_grpc_core_libs}"
227*cc02d7e2SAndroid Build Coastguard Worker  o.puts "\t$(Q) #{rm_grpc_core_libs}"
228*cc02d7e2SAndroid Build Coastguard Workerend
229*cc02d7e2SAndroid Build Coastguard WorkerFile.rename('Makefile.new', 'Makefile')
230*cc02d7e2SAndroid Build Coastguard Worker
231*cc02d7e2SAndroid Build Coastguard Workerif grpc_config == 'opt'
232*cc02d7e2SAndroid Build Coastguard Worker  File.open('Makefile.new', 'w') do |o|
233*cc02d7e2SAndroid Build Coastguard Worker    o.puts 'hijack: all strip'
234*cc02d7e2SAndroid Build Coastguard Worker    o.puts
235*cc02d7e2SAndroid Build Coastguard Worker    o.write(File.read('Makefile'))
236*cc02d7e2SAndroid Build Coastguard Worker    o.puts
237*cc02d7e2SAndroid Build Coastguard Worker    o.puts 'strip: $(DLLIB)'
238*cc02d7e2SAndroid Build Coastguard Worker    if debug_symbols_output_dir
239*cc02d7e2SAndroid Build Coastguard Worker      o.puts "\t$(ECHO) Saving debug symbols in #{debug_symbols_output_dir}/#{debug_symbols}"
240*cc02d7e2SAndroid Build Coastguard Worker      o.puts "\t$(Q) objcopy --only-keep-debug $(DLLIB) #{debug_symbols_output_dir}/#{debug_symbols}"
241*cc02d7e2SAndroid Build Coastguard Worker    end
242*cc02d7e2SAndroid Build Coastguard Worker    o.puts "\t$(ECHO) Stripping $(DLLIB)"
243*cc02d7e2SAndroid Build Coastguard Worker    o.puts "\t$(Q) #{strip_tool} $(DLLIB)"
244*cc02d7e2SAndroid Build Coastguard Worker  end
245*cc02d7e2SAndroid Build Coastguard Worker  File.rename('Makefile.new', 'Makefile')
246*cc02d7e2SAndroid Build Coastguard Workerend
247*cc02d7e2SAndroid Build Coastguard Worker
248*cc02d7e2SAndroid Build Coastguard Workerif ENV['GRPC_RUBY_TEST_ONLY_WORKAROUND_MAKE_INSTALL_BUG']
249*cc02d7e2SAndroid Build Coastguard Worker  # Note: this env var setting is intended to work around a problem observed
250*cc02d7e2SAndroid Build Coastguard Worker  # with the ginstall command on grpc's macos automated test infrastructure,
251*cc02d7e2SAndroid Build Coastguard Worker  # and is not  guaranteed to work in the wild.
252*cc02d7e2SAndroid Build Coastguard Worker  # Also see https://github.com/rake-compiler/rake-compiler/issues/210.
253*cc02d7e2SAndroid Build Coastguard Worker  puts 'Overriding the generated Makefile install target to use cp'
254*cc02d7e2SAndroid Build Coastguard Worker  File.open('Makefile.new', 'w') do |o|
255*cc02d7e2SAndroid Build Coastguard Worker    File.foreach('Makefile') do |i|
256*cc02d7e2SAndroid Build Coastguard Worker      if i.start_with?('INSTALL_PROG = ')
257*cc02d7e2SAndroid Build Coastguard Worker        override = 'INSTALL_PROG = cp'
258*cc02d7e2SAndroid Build Coastguard Worker        puts "Replacing generated Makefile line: |#{i}|, with: |#{override}|"
259*cc02d7e2SAndroid Build Coastguard Worker        o.puts override
260*cc02d7e2SAndroid Build Coastguard Worker      else
261*cc02d7e2SAndroid Build Coastguard Worker        o.puts i
262*cc02d7e2SAndroid Build Coastguard Worker      end
263*cc02d7e2SAndroid Build Coastguard Worker    end
264*cc02d7e2SAndroid Build Coastguard Worker  end
265*cc02d7e2SAndroid Build Coastguard Worker  File.rename('Makefile.new', 'Makefile')
266*cc02d7e2SAndroid Build Coastguard Workerend
267