rake-compiler-dock 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/.github/workflows/ci.yml +168 -0
- data/.gitignore +11 -1
- data/Dockerfile.jruby +6 -5
- data/Dockerfile.mri.erb +83 -43
- data/History.md +19 -1
- data/README.md +95 -36
- data/Rakefile +39 -12
- data/build/parallel_docker_build.rb +7 -3
- data/build/patches/{ruby-2.5.8 → ruby-2.5.9}/no_sendfile.patch +0 -0
- data/build/patches/{ruby-3.0.0 → ruby-3.1.0}/no_sendfile.patch +0 -0
- data/build/patches2/{rake-compiler-1.1.1 → rake-compiler-1.1.6}/0004-Enable-build-of-static-libruby.patch +3 -4
- data/build/rcd-env.sh +6 -0
- data/build/runas +1 -9
- data/lib/rake_compiler_dock/starter.rb +3 -2
- data/lib/rake_compiler_dock/version.rb +2 -2
- data/mingw64-ucrt/Dockerfile +62 -0
- data/mingw64-ucrt/binutils-mingw-w64-ignore-check-errors.patch +13 -0
- data/mingw64-ucrt/gcc-mingw-w64-only-c-c++.patch +13 -0
- data/mingw64-ucrt/mingw-w64-enable-ucrt.patch +22 -0
- data/rake-compiler-dock.gemspec +2 -2
- data/test/env/Dockerfile.alpine +17 -0
- data/test/env/Dockerfile.centos +17 -0
- data/test/env/Dockerfile.debian +24 -0
- data/test/rcd_test/Gemfile +11 -0
- data/test/rcd_test/Rakefile +74 -0
- data/test/rcd_test/ext/java/RcdTestExtService.java +19 -0
- data/test/rcd_test/ext/java/RubyRcdTest.java +16 -0
- data/test/rcd_test/ext/mri/extconf.rb +20 -0
- data/test/rcd_test/ext/mri/rcd_test_ext.c +35 -0
- data/test/rcd_test/ext/mri/rcd_test_ext.h +6 -0
- data/test/rcd_test/lib/rcd_test.rb +6 -0
- data/test/rcd_test/rcd_test.gemspec +27 -0
- data/test/rcd_test/test/test_basic.rb +22 -0
- data/test/test_environment_variables.rb +56 -31
- data/test/test_parallel_docker_build.rb +19 -6
- data.tar.gz.sig +0 -0
- metadata +74 -37
- metadata.gz.sig +0 -0
- data/build/patches2/hoe-3.20.0/0001-Load-encrypted-private-key-using-ENV-GEM_PRIVATE_KEY.patch +0 -32
- data/build/patches2/rake-compiler-1.1.1/0001-Fix-determining-of-ruby-versions-in-rake-native-gem.patch +0 -44
- data/build/patches2/rake-compiler-1.1.1/0003-Allow-building-of-cross-rubies-in-parallel.patch +0 -214
- data/build/patches2/rake-compiler-1.1.1/0005-Don-t-mask-out-build-env-vars-for-cross-ruby.patch +0 -30
- data/build/patches2/rake-compiler-1.1.1/0006-Use-RAKE_EXTENSION_TASK_NO_NATIVE-env-var-as-the-def.patch +0 -26
- data/build/patches2/ruby-2.7.0/ruby2_keywords.patch +0 -15
- data/build/patches2/ruby-3.0.0/ruby2_keywords.patch +0 -15
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# rake-compiler-dock
|
2
2
|
|
3
|
-
**Easy to use and reliable cross compiler environment for building Windows, Linux and JRuby binary gems.**
|
3
|
+
**Easy to use and reliable cross compiler environment for building Windows, Linux, Mac and JRuby binary gems.**
|
4
4
|
|
5
|
-
It provides cross compilers and Ruby environments for 2.
|
5
|
+
It provides cross compilers and Ruby environments for 2.4 and newer versions of the [RubyInstaller](http://rubyinstaller.org/) and Linux runtime environments.
|
6
6
|
They are prepared for use with [rake-compiler](https://github.com/rake-compiler/rake-compiler).
|
7
7
|
It is used by [many gems with C or JRuby extentions](https://github.com/rake-compiler/rake-compiler-dock/wiki/Projects-using-rake-compiler-dock).
|
8
8
|
|
@@ -12,11 +12,7 @@ It is also more reliable, since the underlying docker images are versioned and i
|
|
12
12
|
|
13
13
|
## Installation
|
14
14
|
|
15
|
-
Install docker
|
16
|
-
|
17
|
-
$ sudo apt-get install docker.io
|
18
|
-
|
19
|
-
... or install [docker-toolbox for Windows and OSX](https://github.com/docker/toolbox/releases) or boot2docker on [Windows](https://github.com/boot2docker/windows-installer/releases) or [OS X](https://github.com/boot2docker/osx-installer/releases) .
|
15
|
+
Install docker [following the instructions on the docker website](https://docs.docker.com/engine/install/) ... or install [docker-toolbox for Windows and OSX](https://github.com/docker/toolbox/releases) or boot2docker on [Windows](https://github.com/boot2docker/windows-installer/releases) or [OS X](https://github.com/boot2docker/osx-installer/releases) .
|
20
16
|
|
21
17
|
Install rake-compiler-dock as a gem. The docker image is downloaded later on demand:
|
22
18
|
|
@@ -34,10 +30,12 @@ Rake-compiler-dock provides the necessary tools to build Ruby extensions for Win
|
|
34
30
|
It is intended to be used in conjunction with [rake-compiler's](https://github.com/rake-compiler/rake-compiler) cross build capability.
|
35
31
|
Your Rakefile should enable cross compilation like so:
|
36
32
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
33
|
+
```ruby
|
34
|
+
exttask = Rake::ExtensionTask.new('my_extension', my_gem_spec) do |ext|
|
35
|
+
ext.cross_compile = true
|
36
|
+
ext.cross_platform = %w[x86-mingw32 x64-mingw-ucrt x64-mingw32 x86-linux x86_64-linux x86_64-darwin arm64-darwin]
|
37
|
+
end
|
38
|
+
```
|
41
39
|
|
42
40
|
See below, how to invoke cross builds in your Rakefile.
|
43
41
|
|
@@ -46,7 +44,9 @@ Additionally it may also be used to build ffi based binary gems like [libusb](ht
|
|
46
44
|
### Interactive Usage
|
47
45
|
|
48
46
|
Rake-compiler-dock offers the shell command `rake-compiler-dock` and a [ruby API](http://www.rubydoc.info/gems/rake-compiler-dock/RakeCompilerDock) for issuing commands within the docker image, described below.
|
49
|
-
There dedicated
|
47
|
+
There are dedicated images for `x86-mingw32`, `x64-mingw-ucrt`, `x64-mingw32`, `x86-linux`, `x86_64-linux`, `x86_64-darwin`, `arm64-darwin` and `jruby` targets.
|
48
|
+
The images contain all supported cross ruby versions, with the exception of `x64-mingw32`, which has versions before 3.1 only, and `x64-mingw-ucrt`, which has only ruby-3.1+.
|
49
|
+
This is to match the [changed platform of RubyInstaller-3.1](https://rubyinstaller.org/2021/12/31/rubyinstaller-3.1.0-1-released.html).
|
50
50
|
|
51
51
|
`rake-compiler-dock` without arguments starts an interactive shell session.
|
52
52
|
This is best suited to try out and debug a build.
|
@@ -81,13 +81,64 @@ Or non-interactive:
|
|
81
81
|
|
82
82
|
The environment variable `RUBY_CC_VERSION` is predefined as described [below](#environment-variables).
|
83
83
|
|
84
|
-
If necessary, additional software
|
85
|
-
This is local to the running session, only
|
84
|
+
If necessary, additional software can be installed, prior to the build command.
|
85
|
+
This is local to the running session, only.
|
86
|
+
|
87
|
+
For Windows and Mac:
|
86
88
|
|
87
89
|
sudo apt-get update && sudo apt-get install your-package
|
88
90
|
|
91
|
+
For Linux:
|
92
|
+
|
93
|
+
sudo yum install your-package
|
94
|
+
|
89
95
|
You can also choose between different executable ruby versions by `rvm use <version>` .
|
90
|
-
The current default is
|
96
|
+
The current default is 3.1.
|
97
|
+
|
98
|
+
|
99
|
+
### As a CI System Container
|
100
|
+
|
101
|
+
The OCI images provided by rake-compiler-dock can be used without the `rake-compiler-dock` gem or wrapper. This may be useful if your CI pipeline is building native gems.
|
102
|
+
|
103
|
+
For example, a Github Actions job might look like this:
|
104
|
+
|
105
|
+
``` yaml
|
106
|
+
jobs:
|
107
|
+
native-gem:
|
108
|
+
name: "native-gem"
|
109
|
+
runs-on: ubuntu-latest
|
110
|
+
container:
|
111
|
+
image: "larskanis/rake-compiler-dock-mri-x86_64-linux:1.2.0"
|
112
|
+
steps:
|
113
|
+
- uses: actions/checkout@v2
|
114
|
+
- run: bundle install && bundle exec rake gem:x86_64-linux:rcd
|
115
|
+
- uses: actions/upload-artifact@v2
|
116
|
+
with:
|
117
|
+
name: native-gem
|
118
|
+
path: gems
|
119
|
+
retention-days: 1
|
120
|
+
```
|
121
|
+
|
122
|
+
Where the referenced rake task might be defined by:
|
123
|
+
|
124
|
+
``` ruby
|
125
|
+
cross_platforms = ["x64-mingw32", "x86_64-linux", "x86_64-darwin", "arm64-darwin"]
|
126
|
+
|
127
|
+
namespace "gem" do
|
128
|
+
cross_platforms.each do |platform|
|
129
|
+
namespace platform do
|
130
|
+
task "rcd" do
|
131
|
+
Rake::Task["native:#{platform}"].invoke
|
132
|
+
Rake::Task["pkg/#{rcee_precompiled_spec.full_name}-#{Gem::Platform.new(platform)}.gem"].invoke
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
```
|
139
|
+
|
140
|
+
For an example of rake tasks that support this style of invocation, visit https://github.com/flavorjones/ruby-c-extensions-explained/tree/main/precompiled
|
141
|
+
|
91
142
|
|
92
143
|
### JRuby support
|
93
144
|
|
@@ -111,17 +162,19 @@ To build java binary gems interactively, it can be called like this:
|
|
111
162
|
To make the build process reproducible for other parties, it is recommended to add rake-compiler-dock to your Rakefile.
|
112
163
|
This can be done like this:
|
113
164
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
165
|
+
```ruby
|
166
|
+
task 'gem:native' do
|
167
|
+
require 'rake_compiler_dock'
|
168
|
+
sh "bundle package --all" # Avoid repeated downloads of gems by using gem files from the host.
|
169
|
+
%w[ x86-mingw32 x64-mingw-ucrt x64-mingw32 x86-linux x86_64-linux arm-linux aarch64-linux x86_64-darwin arm64-darwin ].each do |plat|
|
170
|
+
RakeCompilerDock.sh "bundle --local && rake native:#{plat} gem", platform: plat
|
171
|
+
end
|
172
|
+
RakeCompilerDock.sh "bundle --local && rake java gem", rubyvm: :jruby
|
173
|
+
end
|
174
|
+
```
|
122
175
|
|
123
176
|
This runs the `bundle` and `rake` commands once for each platform.
|
124
|
-
That is once for the jruby gems and
|
177
|
+
That is once for the jruby gems and 6 times for the specified MRI platforms.
|
125
178
|
|
126
179
|
### Run builds in parallel
|
127
180
|
|
@@ -133,17 +186,19 @@ Please note, that parallel builds only work reliable, if the specific platform g
|
|
133
186
|
|
134
187
|
```ruby
|
135
188
|
namespace "gem" do
|
189
|
+
task 'prepare' do
|
190
|
+
require 'rake_compiler_dock'
|
191
|
+
require 'io/console'
|
192
|
+
sh "bundle package --all"
|
193
|
+
sh "cp ~/.gem/gem-*.pem build/gem/ || true"
|
194
|
+
ENV["GEM_PRIVATE_KEY_PASSPHRASE"] = STDIN.getpass("Enter passphrase of gem signature key: ")
|
195
|
+
end
|
196
|
+
|
136
197
|
exttask.cross_platform.each do |plat|
|
137
|
-
desc "Build
|
198
|
+
desc "Build all native binary gems in parallel"
|
138
199
|
multitask 'native' => plat
|
139
200
|
|
140
|
-
|
141
|
-
require 'rake_compiler_dock'
|
142
|
-
sh "cp ~/.gem/gem-*.pem build/gem/ || true"
|
143
|
-
require 'io/console'
|
144
|
-
ENV["GEM_PRIVATE_KEY_PASSPHRASE"] = STDIN.getpass("Enter passphrase of gem signature key: ")
|
145
|
-
end
|
146
|
-
|
201
|
+
desc "Build the native gem for #{plat}"
|
147
202
|
task plat => 'prepare' do
|
148
203
|
RakeCompilerDock.sh <<-EOT, platform: plat
|
149
204
|
(cp build/gem/gem-*.pem ~/.gem/ || true) &&
|
@@ -159,7 +214,9 @@ Please note, that parallel builds only work reliable, if the specific platform g
|
|
159
214
|
|
160
215
|
Rake-compiler-dock uses [semantic versioning](http://semver.org/), so you should add it into your Gemfile, to make sure, that future changes will not break your build.
|
161
216
|
|
162
|
-
|
217
|
+
```ruby
|
218
|
+
gem 'rake-compiler-dock', '~> 1.2'
|
219
|
+
```
|
163
220
|
|
164
221
|
See [the wiki](https://github.com/rake-compiler/rake-compiler-dock/wiki/Projects-using-rake-compiler-dock) for projects which make use of rake-compiler-dock.
|
165
222
|
|
@@ -173,7 +230,7 @@ The following variables are recognized by rake-compiler-dock:
|
|
173
230
|
* `RCD_RUBYVM` - The ruby VM and toolchain to be used.
|
174
231
|
Must be one of `mri`, `jruby`.
|
175
232
|
* `RCD_PLATFORM` - The target rubygems platform.
|
176
|
-
Must be a space separated list out of `x86-mingw32`, `x64-mingw32`, `x86-linux`
|
233
|
+
Must be a space separated list out of `x86-mingw32`, `x64-mingw-ucrt`, `x64-mingw32`, `x86-linux`, `x86_64-linux`, `arm-linux`, `aarch64-linux`, `x86_64-darwin` and `arm64-darwin`.
|
177
234
|
It is ignored when `rubyvm` is set to `:jruby`.
|
178
235
|
* `RCD_IMAGE` - The docker image that is downloaded and started.
|
179
236
|
Defaults to "larskanis/rake-compiler-dock:IMAGE_VERSION" with an image version that is determined by the gem version.
|
@@ -189,7 +246,7 @@ The following variables are provided to the running docker container:
|
|
189
246
|
* `RCD_HOST_RUBY_PLATFORM` - The `RUBY_PLATFORM` of the host ruby.
|
190
247
|
* `RCD_HOST_RUBY_VERSION` - The `RUBY_VERSION` of the host ruby.
|
191
248
|
* `RUBY_CC_VERSION` - The target ruby versions for rake-compiler.
|
192
|
-
The default is defined in the [Dockerfile](https://github.com/rake-compiler/rake-compiler-dock/blob/
|
249
|
+
The default is defined in the [Dockerfile](https://github.com/rake-compiler/rake-compiler-dock/blob/94770238d68d71df5f70abe76097451a575ce46c/Dockerfile.mri.erb#L229), but can be changed as a parameter to rake.
|
193
250
|
* `RCD_MOUNTDIR` - The directory which is mounted into the docker container.
|
194
251
|
Defaults to pwd.
|
195
252
|
* `RCD_WORKDIR` - The working directory within the docker container.
|
@@ -197,7 +254,9 @@ The following variables are provided to the running docker container:
|
|
197
254
|
|
198
255
|
Other environment variables can be set or passed through to the container like this:
|
199
256
|
|
200
|
-
|
257
|
+
```ruby
|
258
|
+
RakeCompilerDock.sh "rake cross native gem OPENSSL_VERSION=#{ENV['OPENSSL_VERSION']}"
|
259
|
+
```
|
201
260
|
|
202
261
|
|
203
262
|
## More information
|
data/Rakefile
CHANGED
@@ -7,26 +7,32 @@ require_relative "build/parallel_docker_build"
|
|
7
7
|
RakeCompilerDock::GemHelper.install_tasks
|
8
8
|
|
9
9
|
DOCKERHUB_USER = ENV['DOCKERHUB_USER'] || "larskanis"
|
10
|
+
docker_build_cmd = Shellwords.split(ENV['RCD_DOCKER_BUILD'] || "docker build")
|
11
|
+
|
12
|
+
platforms = [
|
13
|
+
["x86-mingw32", "i686-w64-mingw32"],
|
14
|
+
["x64-mingw32", "x86_64-w64-mingw32"],
|
15
|
+
["x64-mingw-ucrt", "x86_64-w64-mingw32"],
|
16
|
+
["x86-linux", "i686-redhat-linux"],
|
17
|
+
["x86_64-linux", "x86_64-redhat-linux"],
|
18
|
+
["x86_64-darwin", "x86_64-apple-darwin"],
|
19
|
+
["arm64-darwin", "aarch64-apple-darwin"],
|
20
|
+
["arm-linux", "arm-linux-gnueabihf"],
|
21
|
+
["aarch64-linux", "aarch64-linux-gnu"],
|
22
|
+
]
|
10
23
|
|
11
24
|
namespace :build do
|
12
|
-
|
13
|
-
["x86-mingw32", "i686-w64-mingw32"],
|
14
|
-
["x64-mingw32", "x86_64-w64-mingw32"],
|
15
|
-
["x86-linux", "i686-redhat-linux"],
|
16
|
-
["x86_64-linux", "x86_64-redhat-linux"],
|
17
|
-
["x86_64-darwin", "x86_64-apple-darwin"],
|
18
|
-
["arm64-darwin", "aarch64-apple-darwin"],
|
19
|
-
]
|
25
|
+
|
20
26
|
platforms.each do |platform, target|
|
21
27
|
sdf = "Dockerfile.mri.#{platform}"
|
22
28
|
|
23
29
|
desc "Build image for platform #{platform}"
|
24
30
|
task platform => sdf
|
25
31
|
task sdf do
|
26
|
-
sh "
|
32
|
+
sh(*docker_build_cmd, "-t", "#{DOCKERHUB_USER}/rake-compiler-dock-mri-#{platform}:#{RakeCompilerDock::IMAGE_VERSION}", "-f", "Dockerfile.mri.#{platform}", ".")
|
27
33
|
end
|
28
34
|
|
29
|
-
df = ERB.new(File.read("Dockerfile.mri.erb")).result(binding)
|
35
|
+
df = ERB.new(File.read("Dockerfile.mri.erb"), trim_mode: ">").result(binding)
|
30
36
|
File.write(sdf, df)
|
31
37
|
CLEAN.include(sdf)
|
32
38
|
end
|
@@ -34,10 +40,10 @@ namespace :build do
|
|
34
40
|
desc "Build image for JRuby"
|
35
41
|
task :jruby => "Dockerfile.jruby"
|
36
42
|
task "Dockerfile.jruby" do
|
37
|
-
sh "
|
43
|
+
sh(*docker_build_cmd, "-t", "#{DOCKERHUB_USER}/rake-compiler-dock-jruby:#{RakeCompilerDock::IMAGE_VERSION}", "-f", "Dockerfile.jruby", ".")
|
38
44
|
end
|
39
45
|
|
40
|
-
RakeCompilerDock::ParallelDockerBuild.new(platforms.map{|pl, _| "Dockerfile.mri.#{pl}" } + ["Dockerfile.jruby"], workdir: "tmp/docker")
|
46
|
+
RakeCompilerDock::ParallelDockerBuild.new(platforms.map{|pl, _| "Dockerfile.mri.#{pl}" } + ["Dockerfile.jruby"], workdir: "tmp/docker", docker_build_cmd: docker_build_cmd)
|
41
47
|
|
42
48
|
desc "Build images for all MRI platforms in parallel"
|
43
49
|
multitask :mri => platforms.map(&:first)
|
@@ -48,6 +54,14 @@ end
|
|
48
54
|
|
49
55
|
task :build => "build:all"
|
50
56
|
|
57
|
+
namespace :prepare do
|
58
|
+
desc "Build cross compiler for x64-mingw-ucrt aka RubyInstaller-3.1+"
|
59
|
+
task "mingw64-ucrt" do
|
60
|
+
sh(*docker_build_cmd, "-t", "#{DOCKERHUB_USER}/mingw64-ucrt:20.04", ".",
|
61
|
+
chdir: "mingw64-ucrt")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
51
65
|
desc "Run tests"
|
52
66
|
task :test do
|
53
67
|
sh "ruby -w -W2 -I. -Ilib -e \"#{Dir["test/test_*.rb"].map{|f| "require '#{f}';"}.join}\" -- -v"
|
@@ -74,3 +88,16 @@ task :update_lists do
|
|
74
88
|
EOT
|
75
89
|
end
|
76
90
|
end
|
91
|
+
|
92
|
+
namespace :release do
|
93
|
+
desc "push all docker images"
|
94
|
+
task :images do
|
95
|
+
jimg = "#{DOCKERHUB_USER}/rake-compiler-dock-jruby:#{RakeCompilerDock::IMAGE_VERSION}"
|
96
|
+
sh "docker", "push", jimg
|
97
|
+
|
98
|
+
platforms.each do |platform, _|
|
99
|
+
img = "#{DOCKERHUB_USER}/rake-compiler-dock-mri-#{platform}:#{RakeCompilerDock::IMAGE_VERSION}"
|
100
|
+
sh "docker", "push", img
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -6,7 +6,11 @@ module RakeCompilerDock
|
|
6
6
|
class ParallelDockerBuild
|
7
7
|
include Rake::DSL
|
8
8
|
|
9
|
-
|
9
|
+
attr_reader :docker_build_cmd
|
10
|
+
|
11
|
+
def initialize(dockerfiles, workdir: "tmp/docker", inputdir: ".", task_prefix: "common-",
|
12
|
+
docker_build_cmd: %w["docker", "build"])
|
13
|
+
@docker_build_cmd = docker_build_cmd
|
10
14
|
FileUtils.mkdir_p(workdir)
|
11
15
|
|
12
16
|
files = parse_dockerfiles(dockerfiles, inputdir)
|
@@ -25,7 +29,7 @@ module RakeCompilerDock
|
|
25
29
|
# "File1"=>[" FROM a\n",
|
26
30
|
# ...
|
27
31
|
def parse_dockerfiles(dockerfiles, inputdir)
|
28
|
-
|
32
|
+
dockerfiles.map do |fn|
|
29
33
|
[fn, File.read(File.join(inputdir, fn))]
|
30
34
|
end.map do |fn, f|
|
31
35
|
# Split file contant in lines unless line ends with backslash
|
@@ -96,7 +100,7 @@ module RakeCompilerDock
|
|
96
100
|
#
|
97
101
|
# The layers will be reused in subsequent builds, even if they run in parallel.
|
98
102
|
def docker_build(filename, workdir)
|
99
|
-
sh
|
103
|
+
sh(*docker_build_cmd, "-f", File.join(workdir, filename), ".")
|
100
104
|
end
|
101
105
|
end
|
102
106
|
end
|
File without changes
|
File without changes
|
@@ -1,8 +1,8 @@
|
|
1
1
|
diff --git a/tasks/bin/cross-ruby.rake b/tasks/bin/cross-ruby.rake
|
2
|
-
index
|
2
|
+
index 8317a2a..5a1b3ea 100644
|
3
3
|
--- a/tasks/bin/cross-ruby.rake
|
4
4
|
+++ b/tasks/bin/cross-ruby.rake
|
5
|
-
@@ -116,
|
5
|
+
@@ -116,10 +116,22 @@ RUBY_CC_VERSIONS.split(":").each do |ruby_cc_version|
|
6
6
|
"--host=#{mingw_host}",
|
7
7
|
"--target=#{mingw_target}",
|
8
8
|
"--build=#{RUBY_BUILD}",
|
@@ -11,7 +11,6 @@ index 8edf5cd..5d25b82 100644
|
|
11
11
|
+ '--disable-jit-support',
|
12
12
|
'--disable-install-doc',
|
13
13
|
'--with-ext=',
|
14
|
-
- 'LDFLAGS=-pipe -s',
|
15
14
|
]
|
16
15
|
+ if mingw_host=~/darwin/
|
17
16
|
+ options += [
|
@@ -24,6 +23,6 @@ index 8edf5cd..5d25b82 100644
|
|
24
23
|
+ '--enable-shared',
|
25
24
|
+ ]
|
26
25
|
+ end
|
27
|
-
|
26
|
+
|
28
27
|
# Force Winsock2 for Ruby 1.8, 1.9 defaults to it
|
29
28
|
options << "--with-winsock2" if major == "1.8"
|
data/build/rcd-env.sh
ADDED
data/build/runas
CHANGED
@@ -4,12 +4,4 @@ groupadd -o -g "$GID" "$GROUP"
|
|
4
4
|
mkdir -p /tmp/home
|
5
5
|
useradd -o -g "$GID" -u "$UID" -G rvm,sudo -p "" -b /tmp/home -m "$USER"
|
6
6
|
|
7
|
-
|
8
|
-
ln -s /usr/local/rake-compiler "$HOME"/.rake-compiler
|
9
|
-
mkdir -p "$HOME"/.gem
|
10
|
-
chown "$USER" "$HOME"/.gem
|
11
|
-
|
12
|
-
/usr/bin/sudo -u "$USER" -H \
|
13
|
-
BASH_ENV=/etc/rubybashrc \
|
14
|
-
RAKE_EXTENSION_TASK_NO_NATIVE=true \
|
15
|
-
-- "$@"
|
7
|
+
/usr/bin/sudo -u "$USER" -H BASH_ENV=/etc/rubybashrc -- "$@"
|
@@ -41,11 +41,12 @@ module RakeCompilerDock
|
|
41
41
|
user = options.fetch(:username){ current_user }
|
42
42
|
group = options.fetch(:groupname){ current_group }
|
43
43
|
rubyvm = options.fetch(:rubyvm){ ENV['RCD_RUBYVM'] } || "mri"
|
44
|
+
jrubyvm = rubyvm.to_s == "jruby"
|
44
45
|
|
45
|
-
platforms = options.fetch(:platform){ ENV['RCD_PLATFORM'] } || "x86-mingw32 x64-mingw32"
|
46
|
+
platforms = options.fetch(:platform){ ENV['RCD_PLATFORM'] } || (jrubyvm ? "jruby" : "x86-mingw32 x64-mingw32")
|
46
47
|
platforms.split(" ").each do |platform|
|
47
48
|
image_name = options.fetch(:image) do
|
48
|
-
platform_postfix =
|
49
|
+
platform_postfix = jrubyvm ? "" : "-#{platform}"
|
49
50
|
ENV['RCD_IMAGE'] ||
|
50
51
|
ENV['RAKE_COMPILER_DOCK_IMAGE'] ||
|
51
52
|
"larskanis/rake-compiler-dock-#{rubyvm}#{platform_postfix}:#{IMAGE_VERSION}"
|
@@ -0,0 +1,62 @@
|
|
1
|
+
FROM ubuntu:20.04
|
2
|
+
|
3
|
+
ARG DEBIAN_FRONTEND=noninteractive
|
4
|
+
|
5
|
+
RUN set -ex \
|
6
|
+
&& sed -i -- 's/# deb-src/deb-src/g' /etc/apt/sources.list \
|
7
|
+
&& apt-get update \
|
8
|
+
&& apt-get install -y --no-install-recommends \
|
9
|
+
build-essential \
|
10
|
+
cdbs \
|
11
|
+
devscripts \
|
12
|
+
equivs \
|
13
|
+
fakeroot \
|
14
|
+
pkg-config \
|
15
|
+
&& apt-get clean \
|
16
|
+
&& rm -rf /tmp/* /var/tmp/*
|
17
|
+
|
18
|
+
WORKDIR /build
|
19
|
+
|
20
|
+
# Download mingw sources
|
21
|
+
RUN apt-get source mingw-w64-common && \
|
22
|
+
cd mingw-w64-* && \
|
23
|
+
mk-build-deps -ir -t "apt-get -o Debug::pkgProblemResolver=yes -y --no-install-recommends"
|
24
|
+
|
25
|
+
# Patch build for UCRT and build UCRT enabled deb-packages
|
26
|
+
ADD mingw-w64-*.patch ./
|
27
|
+
RUN cd mingw-w64-* && \
|
28
|
+
cat debian/rules && \
|
29
|
+
ls ../mingw-w64-*.patch | xargs -n1 patch --verbose -p1 -i && \
|
30
|
+
dpkg-buildpackage -b && \
|
31
|
+
rm -rf ../*.ddeb ../*i686* `pwd`
|
32
|
+
|
33
|
+
# Install UCRT enabled deb-packages
|
34
|
+
RUN dpkg -i mingw-w64-common_7.0.0-2_all.deb \
|
35
|
+
mingw-w64-tools_7.0.0-2_amd64.deb \
|
36
|
+
mingw-w64-x86-64-dev_7.0.0-2_all.deb
|
37
|
+
|
38
|
+
# Download gcc-binutils sources for mingw
|
39
|
+
RUN apt-get source binutils-mingw-w64 && \
|
40
|
+
cd binutils-mingw-w64-* && \
|
41
|
+
mk-build-deps -ir -t "apt-get -o Debug::pkgProblemResolver=yes -y --no-install-recommends"
|
42
|
+
|
43
|
+
# Build gcc-binutils based on UCRT headers and crt
|
44
|
+
ADD binutils-mingw-w64-*.patch ./
|
45
|
+
RUN cd binutils-mingw-w64-* && \
|
46
|
+
ls ../binutils-mingw-w64-*.patch | xargs -n1 patch --verbose -p1 -i && \
|
47
|
+
dpkg-buildpackage -b --jobs=auto && \
|
48
|
+
rm -rf ../*.ddeb ../*i686* `pwd`
|
49
|
+
|
50
|
+
# Download gcc sources for mingw
|
51
|
+
RUN apt-get source gcc-mingw-w64 && \
|
52
|
+
cd gcc-mingw-w64-* && \
|
53
|
+
mk-build-deps -ir -t "apt-get -o Debug::pkgProblemResolver=yes -y --no-install-recommends"
|
54
|
+
|
55
|
+
# Build gcc (only C and C++) based on UCRT headers and crt
|
56
|
+
ADD gcc-mingw-w64-*.patch ./
|
57
|
+
RUN cd gcc-mingw-w64-* && \
|
58
|
+
ls ../gcc-mingw-w64-*.patch | xargs -n1 patch --verbose -p1 -i && \
|
59
|
+
dpkg-buildpackage -b --jobs=auto && \
|
60
|
+
rm -rf ../*.ddeb ../*i686* `pwd`
|
61
|
+
|
62
|
+
RUN ls -l *.deb
|
@@ -0,0 +1,13 @@
|
|
1
|
+
diff --git a/debian/rules b/debian/rules
|
2
|
+
index 4401493..62c8fe4 100755
|
3
|
+
--- a/debian/rules
|
4
|
+
+++ b/debian/rules
|
5
|
+
@@ -91,7 +91,7 @@ override_dh_auto_test-arch:
|
6
|
+
unset CFLAGS CPPFLAGS LDFLAGS; \
|
7
|
+
env > $(build_dir)/env; \
|
8
|
+
for target in $(targets); do \
|
9
|
+
- dh_auto_test -B$(build_dir)/$$target; \
|
10
|
+
+ dh_auto_test -B$(build_dir)/$$target || true; \
|
11
|
+
done
|
12
|
+
|
13
|
+
override_dh_auto_install-arch:
|
@@ -0,0 +1,13 @@
|
|
1
|
+
diff --git a/debian/rules b/debian/rules
|
2
|
+
index 9e7e40c..fa9a8a2 100755
|
3
|
+
--- a/debian/rules
|
4
|
+
+++ b/debian/rules
|
5
|
+
@@ -58,7 +58,7 @@ ifneq ($(filter stage1,$(DEB_BUILD_PROFILES)),)
|
6
|
+
INSTALL_TARGET := install-gcc
|
7
|
+
else
|
8
|
+
# Build the full GCC.
|
9
|
+
- languages := c,c++,fortran,objc,obj-c++,ada
|
10
|
+
+ languages := c,c++
|
11
|
+
BUILD_TARGET :=
|
12
|
+
INSTALL_TARGET := install install-lto-plugin
|
13
|
+
endif
|
@@ -0,0 +1,22 @@
|
|
1
|
+
diff --git a/debian/rules b/debian/rules
|
2
|
+
index 9fb970c..5473839 100755
|
3
|
+
--- a/debian/rules
|
4
|
+
+++ b/debian/rules
|
5
|
+
@@ -94,7 +94,7 @@ build-arch-stamp: $(patsubst %,$(host)~$(host)~tools-%-install-stamp,$(HOST_TOOL
|
6
|
+
%~headers-configure-stamp: autoreconf-stamp
|
7
|
+
mkdir -p $(call buildfolder,$*~headers) && \
|
8
|
+
cd $(call buildfolder,$*~headers) && \
|
9
|
+
- $(call sourcefolder,$*~headers)/configure --prefix=/usr/$(call ruletarget,$*~headers) --host=$(call rulehost,$*~headers) --enable-sdk=all --enable-secure-api
|
10
|
+
+ $(call sourcefolder,$*~headers)/configure --prefix=/usr/$(call ruletarget,$*~headers) --host=$(call rulehost,$*~headers) --enable-sdk=all --with-default-msvcrt=ucrt
|
11
|
+
touch $*-headers-configure-stamp
|
12
|
+
|
13
|
+
# Override CRT configuration to avoid multilib builds
|
14
|
+
@@ -108,7 +108,7 @@ target64crt := $(target64)~$(target64)~crt
|
15
|
+
$(target64crt)-configure-stamp: $(target64)~$(target64)~headers-install-stamp autoreconf-stamp
|
16
|
+
mkdir -p $(call buildfolder,$(target64crt)) && \
|
17
|
+
cd $(call buildfolder,$(target64crt)) && \
|
18
|
+
- $(call sourcefolder,$(target64crt))/configure --prefix=/usr/$(call ruletarget,$(target64crt)) --host=$(call rulehost,$(target64crt)) --target=$(call ruletarget,$(target64crt)) --disable-lib32 --enable-lib64 CPPFLAGS="$(CPPFLAGS) -I$(top_dir)/debian/tmp/usr/$(call ruletarget,$(target64crt))/include"
|
19
|
+
+ $(call sourcefolder,$(target64crt))/configure --prefix=/usr/$(call ruletarget,$(target64crt)) --host=$(call rulehost,$(target64crt)) --target=$(call ruletarget,$(target64crt)) --disable-lib32 --enable-lib64 --with-default-msvcrt=ucrt CPPFLAGS="$(CPPFLAGS) -I$(top_dir)/debian/tmp/usr/$(call ruletarget,$(target64crt))/include"
|
20
|
+
touch $@
|
21
|
+
|
22
|
+
build-indep-stamp: $(foreach target,$(targets),$(patsubst %,$(target)~$(target)~%-install-stamp,$(TARGET_PROJECTS))) $(patsubst %,$(target32)~$(target32)~%-install-stamp,$(TARGET32_PROJECTS))
|
data/rake-compiler-dock.gemspec
CHANGED
@@ -22,7 +22,7 @@ Use rake-compiler-dock to enter an interactive shell session or add a task to yo
|
|
22
22
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
23
23
|
spec.require_paths = ["lib"]
|
24
24
|
|
25
|
-
spec.add_development_dependency "bundler", "
|
26
|
-
spec.add_development_dependency "rake", "
|
25
|
+
spec.add_development_dependency "bundler", ">= 1.7", "< 3.0"
|
26
|
+
spec.add_development_dependency "rake", ">= 12"
|
27
27
|
spec.add_development_dependency "test-unit", "~> 3.0"
|
28
28
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
ARG from_image
|
2
|
+
FROM ${from_image}
|
3
|
+
|
4
|
+
RUN uname -a
|
5
|
+
RUN apk add ruby ruby-etc ruby-rake git
|
6
|
+
|
7
|
+
RUN ruby --version
|
8
|
+
RUN gem env
|
9
|
+
RUN gem inst bundler
|
10
|
+
|
11
|
+
WORKDIR /build
|
12
|
+
|
13
|
+
CMD ruby -e "puts Gem::Platform.local.to_s" && \
|
14
|
+
gem install --local *.gem --verbose --no-document && \
|
15
|
+
cd test/rcd_test/ && \
|
16
|
+
bundle install && \
|
17
|
+
rake test
|
@@ -0,0 +1,17 @@
|
|
1
|
+
ARG from_image
|
2
|
+
FROM ${from_image}
|
3
|
+
|
4
|
+
RUN uname -a
|
5
|
+
RUN yum install -y ruby git
|
6
|
+
|
7
|
+
RUN ruby --version
|
8
|
+
RUN gem env
|
9
|
+
RUN gem inst bundler
|
10
|
+
|
11
|
+
WORKDIR /build
|
12
|
+
|
13
|
+
CMD ruby -e "puts Gem::Platform.local.to_s" && \
|
14
|
+
gem install --local *.gem --verbose --no-document && \
|
15
|
+
cd test/rcd_test/ && \
|
16
|
+
bundle install && \
|
17
|
+
rake test
|
@@ -0,0 +1,24 @@
|
|
1
|
+
ARG from_image
|
2
|
+
FROM ${from_image}
|
3
|
+
|
4
|
+
# To prevent installed tzdata deb package to show interactive dialog.
|
5
|
+
ENV DEBIAN_FRONTEND noninteractive
|
6
|
+
|
7
|
+
RUN uname -a
|
8
|
+
RUN apt-get update -qq && \
|
9
|
+
apt-get install -yq \
|
10
|
+
-o Dpkg::Options::='--force-confnew' \
|
11
|
+
ruby \
|
12
|
+
git
|
13
|
+
|
14
|
+
RUN ruby --version
|
15
|
+
RUN gem env
|
16
|
+
RUN gem inst bundler
|
17
|
+
|
18
|
+
WORKDIR /build
|
19
|
+
|
20
|
+
CMD ruby -e "puts Gem::Platform.local.to_s" && \
|
21
|
+
gem install --local *.gem --verbose --no-document && \
|
22
|
+
cd test/rcd_test/ && \
|
23
|
+
bundle install && \
|
24
|
+
rake test
|