aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xRakefile28
-rwxr-xr-xgrpc.gemspec1
-rw-r--r--src/core/support/subprocess_windows.c4
-rw-r--r--third_party/rake-compiler-dock/Dockerfile56
-rwxr-xr-xthird_party/rake-compiler-dock/build.sh7
-rwxr-xr-xtools/distrib/docker_for_windows.rb33
6 files changed, 110 insertions, 19 deletions
diff --git a/Rakefile b/Rakefile
index ef4c7524e4..cd4f31731c 100755
--- a/Rakefile
+++ b/Rakefile
@@ -4,6 +4,8 @@ require 'rspec/core/rake_task'
require 'rubocop/rake_task'
require 'bundler/gem_tasks'
+load 'tools/distrib/docker_for_windows.rb'
+
# Add rubocop style checking tasks
RuboCop::RakeTask.new(:rubocop) do |task|
task.options = ['-c', 'src/ruby/.rubocop.yml']
@@ -60,20 +62,24 @@ end
desc 'Build the gem file under rake_compiler_dock'
task 'gem:windows' do
- require 'digest'
- require 'rake_compiler_dock'
-
grpc_config = ENV['GRPC_CONFIG'] || 'opt'
V = ENV['V'] || '0'
- version = Digest::SHA1.file('third_party/rake-compiler-dock/Dockerfile').hexdigest
- image_name = 'grpc/rake-compiler-dock:' + version
- cmd = "docker build -t #{image_name} third_party/rake-compiler-dock"
- puts cmd
- system cmd
- exit 1 unless $? == 0
- ENV['RAKE_COMPILER_DOCK_IMAGE'] = image_name
- RakeCompilerDock.sh "bundle && rake cross native gem RUBY_CC_VERSION=2.3.0:2.2.2:2.1.6:2.0.0 GRPC_CONFIG=#{grpc_config} V=#{V}"
+ env = 'CPPFLAGS="-D_WIN32_WINNT=0x600 -DUNICODE -D_UNICODE" '
+ env += 'SYSTEM=MINGW32 '
+ env += 'EMBED_ZLIB=true '
+ env += 'BUILDDIR=/tmp '
+ out = '/tmp/libs/opt/grpc-0.dll'
+
+ env_comp = 'CC=x86_64-w64-mingw32-gcc '
+ env_comp += 'LD=x86_64-w64-mingw32-gcc '
+ docker_for_windows "#{env} #{env_comp} make #{out} && cp #{out} grpc_c.64.ruby"
+
+ env_comp = 'CC=i686-w64-mingw32-gcc '
+ env_comp += 'LD=i686-w64-mingw32-gcc '
+ docker_for_windows "#{env} #{env_comp} make #{out} && cp #{out} grpc_c.32.ruby"
+
+ docker_for_windows "bundle && rake cross native gem RUBY_CC_VERSION=2.3.0:2.2.2:2.1.6:2.0.0 GRPC_CONFIG=#{grpc_config} V=#{V}"
end
# Define dependencies between the suites.
diff --git a/grpc.gemspec b/grpc.gemspec
index 6aefe5536e..47af8eeca9 100755
--- a/grpc.gemspec
+++ b/grpc.gemspec
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
s.files = %w( Makefile )
s.files += %w( etc/roots.pem )
+ s.files += %w( tools/distrib/docker_for_windows.rb )
s.files += Dir.glob('src/ruby/bin/**/*')
s.files += Dir.glob('src/ruby/ext/**/*')
s.files += Dir.glob('src/ruby/lib/**/*')
diff --git a/src/core/support/subprocess_windows.c b/src/core/support/subprocess_windows.c
index b4b8656594..ce5c9eeb98 100644
--- a/src/core/support/subprocess_windows.c
+++ b/src/core/support/subprocess_windows.c
@@ -59,7 +59,7 @@ gpr_subprocess *gpr_subprocess_create(int argc, const char **argv) {
STARTUPINFO si;
PROCESS_INFORMATION pi;
- char *args = gpr_strjoin_sep(argv, argc, " ", NULL);
+ char *args = gpr_strjoin_sep(argv, (size_t)argc, " ", NULL);
TCHAR *args_tchar;
args_tchar = gpr_char_to_tchar(args);
@@ -119,7 +119,7 @@ getExitCode:
return 0;
}
if (GetExitCodeProcess(p->pi.hProcess, &dwExitCode)) {
- return dwExitCode;
+ return (int)dwExitCode;
} else {
return -1; // failed to get exit code
}
diff --git a/third_party/rake-compiler-dock/Dockerfile b/third_party/rake-compiler-dock/Dockerfile
index 435a0926dc..28623c3028 100644
--- a/third_party/rake-compiler-dock/Dockerfile
+++ b/third_party/rake-compiler-dock/Dockerfile
@@ -25,8 +25,52 @@ RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3 && \
source /etc/rubybashrc && \
rvmsudo rvm cleanup all "
+# Regenerate the following using build.sh if the build folder changes.
+RUN echo \
+H4sIAByxrVYAA+1ae1PbSBLPv6dP0SeoxYAlWX7IkEAuBBziqgRSPJK7SnLasTSydJYl3cwIQwH7\
+2a9nJAMmIYTb4K3s6ldlaTSP7p5X93R7BnkU+9aTR0UD0e125Nvudhrq2+621LvEE7vpdFqtZrdp\
+Y75tt1qtJ9B5XLEK5FwQBvAki05p/I16fuqNKJuHRHPFQM0/j4bBxPQeiYecYMdp3zX/ttO8Pf9N\
+x+48gcYjyTODv/j8WysarMBRGHHIWDpkZAwhSfyYcjjs7/b3jgC/IEjZhDCfQyRApJiVipAy2cKj\
+nJuSRF8A0ogSQROf+rLWgALLEyAc3vV3wJa1ZMUdNZAgh13wKQlkN4lECHoxzLKhPtMS9hN4EyX5\
+aR2QNfg0IHksABduQuJSZCblLJoA5qcMqZLkrKxUiHmEclOsRmFbsNjYBjIi055K+VUzHzIkVvKQ\
+zSxNW4gSL859ChsFOTN8fjPvjFviLKP8y+wJiYTM1XBsIIt82ITGM007SSNfK+R2kaIsrMmHpJ6P\
+l7VzDSAKathgGVMAoyiO5Ve9lHb5mXZZ0ByTKFFNCRt6dfBCXM8rmD75+HlZUuGC5Z4iTDwRpQkk\
+dOIWyWeSiWQqiMg5SmbYKBqAtQKHVECeqcEuCOQ4ZjirPKNeFJypAiQEBSFTjhHcoGxy4k5nZRNm\
++imZYoqOM3HGkUvtl9lmY8JHy8++oBbEZMjLwYMbvakV41GHG2TqUJPju7LcWFa1i2HHaR/VFOVy\
+YM/VyMoJqv1SDIEqBWAUu5vAh94/+0eHR1tHx4e1G+WXNOa0aHs1cPSUeidZTQ27/RmFKVMlQVxP\
+LGU1XVbTZ5kUJBRdnNF57/9C/2dEeCHlj3QOeLj9b3adZmX/54HZ+Wf54MywzTWza2StbvsHrYeH\
+z3/HbnSr+Z8Hvj3/SZqZqux38bjn/NewG/at+Xe6drs6/80DfhQEYBhDPNgRy0uTIBpKQz+4TuMZ\
+w6en0OnYnS4JTNNxWg06IGDjpu505m6wKvxQfGX/N82W2fiRR4GH6/92G1VCpf/ngDvnP0ldjq5c\
+EMX095qA+/R/22ndmv9u125W+n8e+G79Twe05a95pklaLWfQbU31v2EYN1tqq6urM61fvECncm29\
+3ap3YbVIOICZfgpPpRtEPDdIXM/F9eeN3CBPPNAX3/T3env7OujTJYhJrOidqApXC1PX0JMDQbkA\
+/XTxaxXQMzs9o/yZdFeTgqFHBDx/LgVEBx/9ddjYcLe2e/uvNGMBc6KEwuut9z33sLe386r/pge2\
+BmUF0CCI/lwW76vnv3Wz9Ufrf7vS/3PBnfM/P/1vN/Gw/4X+r+K/c8F36/+19bVuq4H63wuo0+w8\
+TP+3nfWO0v9lAjNlqFbqfqnwowSCceqrGGc2VAG5tnrKuJ2M2gHPyCQ5AX7GPRLH4LrTlBeyNBUw\
+pBr8DRQ4FRybCRrHfsTwk47kO/BCycJLeQg8SkIQBB9xOmwCS/PE/3STQI4E8DXEl0/oOE3wK6ae\
+cGPChtQNfBm3xB9FmfKkSHzSYBbjkYjGFORjOIbhWCZcBl6MK8kdUqFKy3ca+OQMshR7lMnnJ82Y\
+JZYxSqRMxY4EHubCTyeJioPGAtewNwI/diNBGRHUzUKfaatfJfE9La+tM3dxkk4I2/x1EdPUC9MZ\
+S7xYTqEOFyArCOby8FftHqt+3UpfvOKg/7kM60+Cb+j/HxH6Ufg/4j9N26n0/zxQxX/+2ri1/8mI\
+Gl46ztDGMKOBiqDzAxyBh5//Hdup7n/MBffPv/xfPs2FQU8FN6W6eDCP+/R/t9mcnf+m3WlU8Z+5\
+YEb/C8JH3BpEieWxlHNDHgdMuSbQHtxZVtoHh3jemu2gfSCkSdrr0j447XbpH9zduvAX7i5X/kOr\
+U19D76E19R3kEVhfOD8+7B24r/ff9i4ttY65tXD+tr+3+wEzD48u8evg+OW/3O1t933v4LC/v3dp\
+vUWaZWToOXwsaRQnd90wFJXNstnL4/6bnUu9XpQuGQZNyCCmBg8Jo/7Sdb4fcVUQJbiW4tjApYKl\
+Rlk63T9i9LVML14qzullptxmm0uS9Gd5cQEW4FXKPAofkDiuwKbymw5wdMA21+r4WJ/eU+HydkYk\
+HmiQy/tfuZ9Sxh9nid27/5sN54v//9uNav/PAzvTxVMCHVl3RGkGq5ugh0JkbsbS0zOQSV6mg6vc\
+g+0dtdVctWHevdk6erV/8PZWdrn3VG7/7dZuD27tysrz++NQ7n/BosydMJJlj7DG7zn/2bbdvR3/\
+tZ3K/s8FC3+3cs6U5ZXBLGl3NW0BDuWCKOxsmkCceiRGyxP7lIG0cjKQlAZA4H3ERE7iQXoKhVks\
+ayEJtEYTGbojKrwGQl4xHeTDp4UqeWpZk8nEPLlqb6ZsaIkIB1lYa22npWmM/jeP0BddEnScSVGW\
+rrPkZy6imC9pmlq8sCkPBK9ktHpAOFrqMa0tNpYvTeyZrmmyvrymt3Ww+95k9D/UE+cXwQUEm79Z\
+/zYsuDTHJJNRrwvChhdoeMVYkjwqOZvypuOSYrRUFJpenHKKacnyWEpiepm8gVlXpXigDrHwI6br\
+MvezRhNf09JM3k68EqQIKs4KAqtq2LkU6PxC1NMLEIocXGpanmAJl2FQHJMaKIHqsDIlK2+K0lM8\
+yqEBVQy91KfIbPEfpswubhqWg2FS4oWqx0rGlEWq39fdYWOVebuL094VTYpuKZ6SV6XIfzYU+p/l\
+CXms09/9/n+7fTv+12zb1flvLkD9L3U/6sxQ04aoqjPi+2AMQV/c7e/IAP3uwf7xO10bq39RjAws\
+1ABWmI6plnPKZmsbOaaOVWoX2Mm4Lh0L2UjHnMF1UzDGsiK6XqibpQO3uViTIsDGxgbo6l+G34ri\
+ZS1OwOCgrJSyQ7NBCiQj2+uWOZONVkFxzqds0MflVBiKefFPzcutw9dub+/9pkWFpyLfUgLmlcXo\
+tuqLL6qjaYUKFSpUqFChQoUKFSpUqFChQoUKFSpUqFChQoWfCv8DRAWcgwBQAAA=\
+| base64 -d | tar xzC /tmp
+
# Import patch files for ruby and gems
-COPY build/patches /home/rvm/patches/
+RUN cp -r /tmp/build/patches /home/rvm/patches/
ENV BASH_ENV /etc/rubybashrc
# install rubies and fix permissions on
@@ -65,7 +109,7 @@ RUN bash -c "rvm use 2.3.0 --default && \
rake-compiler cross-ruby VERSION=2.1.6 HOST=x86_64-w64-mingw32 && \
rake-compiler cross-ruby VERSION=2.0.0-p645 HOST=i686-w64-mingw32 && \
rake-compiler cross-ruby VERSION=2.0.0-p645 HOST=x86_64-w64-mingw32 && \
- rm -rf ~/.rake-compiler/builds ~/.rake-compiler/sources && \
+ rm -rf ~/.rake-compiler/tmp/builds ~/.rake-compiler/sources && \
find /usr/local/rvm -type d -print0 | sudo xargs -0 chmod g+sw "
RUN bash -c " \
@@ -80,7 +124,7 @@ RUN sed -i -- "s:/root/.rake-compiler:/usr/local/rake-compiler:g" /usr/local/rak
echo "export PATH=\$PATH:/opt/mingw/mingw64/bin" >> /etc/bash.bashrc
# Install wrappers for strip commands as a workaround for "Protocol error" in boot2docker.
-COPY build/strip_wrapper /root/
+RUN cp /tmp/build/strip_wrapper /root/
RUN mv /opt/mingw/mingw32/bin/i686-w64-mingw32-strip /opt/mingw/mingw32/bin/i686-w64-mingw32-strip.bin && \
mv /opt/mingw/mingw64/bin/x86_64-w64-mingw32-strip /opt/mingw/mingw64/bin/x86_64-w64-mingw32-strip.bin && \
mv /usr/bin/i686-w64-mingw32-strip /usr/bin/i686-w64-mingw32-strip.bin && \
@@ -98,14 +142,14 @@ RUN find / -name libwinpthread-1.dll | while read f ; do rm $f ; done
RUN find / -name *msvcrt-ruby*.dll.a | while read f ; do n=`echo $f | sed s/.dll//` ; mv $f $n ; done
# Install SIGINT forwarder
-COPY build/sigfw.c /root/
+RUN cp /tmp/build/sigfw.c /root/
RUN gcc $HOME/sigfw.c -o /usr/local/bin/sigfw
# Install user mapper
-COPY build/runas /usr/local/bin/
+RUN cp /tmp/build/runas /usr/local/bin/
# Install sudoers configuration
-COPY build/sudoers /etc/sudoers.d/rake-compiler-dock
+RUN cp /tmp/build/sudoers /etc/sudoers.d/rake-compiler-dock
ENV RUBY_CC_VERSION 2.3.0:2.2.2:2.1.6:2.0.0
diff --git a/third_party/rake-compiler-dock/build.sh b/third_party/rake-compiler-dock/build.sh
new file mode 100755
index 0000000000..22ffd18cac
--- /dev/null
+++ b/third_party/rake-compiler-dock/build.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# Run this to produce the snipplet of data to insert in the Dockerfile.
+
+echo 'RUN echo \\'
+tar cz build | base64 | sed 's/$/\\/'
+echo '| base64 -d | tar xzC /'
diff --git a/tools/distrib/docker_for_windows.rb b/tools/distrib/docker_for_windows.rb
new file mode 100755
index 0000000000..b382dc2b3d
--- /dev/null
+++ b/tools/distrib/docker_for_windows.rb
@@ -0,0 +1,33 @@
+#!/usr/bin/env ruby
+
+def grpc_root()
+ File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
+end
+
+def docker_for_windows_image()
+ require 'digest'
+
+ dockerfile = File.join(grpc_root, 'third_party', 'rake-compiler-dock', 'Dockerfile')
+ dockerpath = File.dirname(dockerfile)
+ version = Digest::SHA1.file(dockerfile).hexdigest
+ image_name = 'grpc/rake-compiler-dock:' + version
+ cmd = "docker build -t #{image_name} --file #{dockerfile} #{dockerpath}"
+ puts cmd
+ system cmd
+ raise "Failed to build the docker image." unless $? == 0
+ image_name
+end
+
+def docker_for_windows(args)
+ require 'rake_compiler_dock'
+
+ args = 'bash -l' if args.empty?
+
+ ENV['RAKE_COMPILER_DOCK_IMAGE'] = docker_for_windows_image
+
+ RakeCompilerDock.sh args
+end
+
+if __FILE__ == $0
+ docker_for_windows $*.join(' ')
+end