rake-compiler-dock 1.4.0 → 1.5.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
data/Dockerfile.jruby CHANGED
@@ -1,60 +1,66 @@
1
- FROM ubuntu:20.04@sha256:ed4a42283d9943135ed87d4ee34e542f7f5ad9ecf2f244870e23122f703f91c2
1
+ FROM ubuntu:20.04
2
2
 
3
3
  ENV DEBIAN_FRONTEND noninteractive
4
4
  RUN apt-get -y update && \
5
- apt-get install -y curl git-core xz-utils wget unzip sudo gpg dirmngr openjdk-11-jdk-headless maven && \
5
+ apt-get install -y sudo wget curl git-core build-essential xz-utils unzip dirmngr && \
6
+ apt-get install -y openjdk-11-jdk-headless maven && \
6
7
  rm -rf /var/lib/apt/lists/*
7
8
 
8
- # Add "rvm" as system group, to avoid conflicts with host GIDs typically starting with 1000
9
- RUN groupadd -r rvm && useradd -r -g rvm -G sudo -p "" --create-home rvm && \
10
- echo "source /etc/profile.d/rvm.sh" >> /etc/rubybashrc
11
- USER rvm
9
+ ##
10
+ ## install rbenv and ruby-build
11
+ ##
12
+ RUN groupadd -r rubyuser && useradd -r -g rubyuser -G sudo -p "" --create-home rubyuser
12
13
 
13
- RUN mkdir ~/.gnupg && \
14
- echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf
14
+ ENV RBENV_ROOT=/usr/local/rbenv RBENV_RUBIES="jruby-9.4.0.0"
15
15
 
16
- # install rvm, RVM 1.26.0+ has signed releases, source rvm for usage outside of package scripts
17
- RUN gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB && \
18
- (curl -L http://get.rvm.io | sudo bash) && \
19
- bash -c " \
20
- source /etc/rubybashrc && \
21
- rvmsudo rvm cleanup all "
16
+ # chown after running `rbenv init` because that command creates some subdirectories
17
+ RUN git clone https://github.com/rbenv/rbenv.git ${RBENV_ROOT} && \
18
+ git clone https://github.com/rbenv/ruby-build.git ${RBENV_ROOT}/plugins/ruby-build && \
19
+ \
20
+ echo "export RBENV_ROOT=/usr/local/rbenv" >> /etc/rubybashrc && \
21
+ echo "export PATH=$RBENV_ROOT/bin:\$PATH" >> /etc/rubybashrc && \
22
+ $RBENV_ROOT/bin/rbenv init - --no-rehash bash >> /etc/rubybashrc && \
23
+ echo "source /etc/rubybashrc" >> /etc/bashrc && \
24
+ echo "source /etc/rubybashrc" >> /etc/bash.bashrc && \
25
+ \
26
+ chown -R rubyuser:rubyuser ${RBENV_ROOT} && \
27
+ find ${RBENV_ROOT} -type d -print0 | sudo xargs -0 chmod g+sw
28
+ ENV BASH_ENV=/etc/rubybashrc
22
29
 
23
- # Import patch files for ruby and gems
24
- COPY build/patches /home/rvm/patches/
25
- ENV BASH_ENV /etc/rubybashrc
26
30
 
27
- # install rubies and fix permissions on
31
+ ##
32
+ ## set up rake-compiler and install bootstrap rubies
33
+ ##
34
+ USER rubyuser
35
+
36
+ # Install the bootstrap rubies
28
37
  RUN bash -c " \
38
+ echo 'gem: --no-ri --no-rdoc --no-document' >> ~/.gemrc && \
29
39
  export CFLAGS='-s -O3 -fno-fast-math -fPIC' && \
30
- for v in jruby-9.4.0.0 ; do \
31
- rvm install --binary \$v --patch \$(echo ~/patches/ruby-\$v/* | tr ' ' ','); \
40
+ for v in ${RBENV_RUBIES} ; do \
41
+ rbenv install \$v -- --disable-install-doc ; \
32
42
  done && \
33
- rvm cleanup all && \
34
- find /usr/local/rvm -type d -print0 | sudo xargs -0 chmod g+sw \
43
+ find ${RBENV_ROOT} -type d -print0 | sudo xargs -0 chmod g+w \
35
44
  "
36
45
 
46
+ # Install rake-compiler and patch it to build and install static libraries for Linux rubies
47
+ COPY build/patches2 /home/rubyuser/patches
37
48
  RUN bash -c " \
38
- echo "gem: --no-ri --no-rdoc" >> ~/.gemrc && \
39
- rvm all do gem update --system --no-document && \
40
- rvm all do gem update --no-document && \
41
- rvm all do gem install bundler --no-document && \
42
- rvm all do gem install --no-document rake-compiler:1.2.5 && \
43
- find /usr/local/rvm -type d -print0 | sudo xargs -0 chmod g+sw \
49
+ for v in ${RBENV_RUBIES} ; do \
50
+ rbenv shell \$v && \
51
+ gem install rake-compiler -v1.2.5 && \
52
+ cd ${RBENV_ROOT}/versions/\$v/lib/ruby/gems/*/gems/rake-compiler-1.2.5 && \
53
+ patch -p1 < /home/rubyuser/patches/rake-compiler-1.2.5/*.patch ; \
54
+ done \
44
55
  "
45
56
 
46
57
  # Install rake-compiler's cross rubies in global dir instead of /root
47
58
  RUN sudo mkdir -p /usr/local/rake-compiler && \
48
- sudo chown rvm.rvm /usr/local/rake-compiler && \
59
+ sudo chown rubyuser.rubyuser /usr/local/rake-compiler && \
49
60
  ln -s /usr/local/rake-compiler ~/.rake-compiler
50
61
 
51
- USER root
52
-
53
- RUN bash -c "rvm alias create default jruby-9.4.0.0"
54
- RUN echo "rvm use jruby-9.4.0.0 > /dev/null" >> /etc/rubybashrc
55
62
 
56
- # Add rvm to the global bashrc
57
- RUN echo "source /etc/profile.d/rvm.sh" >> /etc/bash.bashrc
63
+ USER root
58
64
 
59
65
  # Install SIGINT forwarder
60
66
  COPY build/sigfw.c /root/
@@ -66,4 +72,6 @@ COPY build/runas /usr/local/bin/
66
72
  # Install sudoers configuration
67
73
  COPY build/sudoers /etc/sudoers.d/rake-compiler-dock
68
74
 
75
+ RUN bash -c "rbenv global jruby-9.4.0.0"
76
+
69
77
  CMD bash
data/Dockerfile.mri.erb CHANGED
@@ -1,81 +1,59 @@
1
1
  <%
2
2
  image = case platform
3
- when /x86_64-linux/ then "quay.io/pypa/manylinux2014_x86_64:latest@sha256:355ac32f868c200253f4af55d5b1a63a78593ef29ed9aaf0900b8b2f304ab772"
4
- when /x86-linux/ then "quay.io/pypa/manylinux2014_i686:latest@sha256:39fb5356017e093825017cba9aea9d032c92f35a21a30d084a4dc4a0003ceaf9"
5
- else "ubuntu:20.04@sha256:ed4a42283d9943135ed87d4ee34e542f7f5ad9ecf2f244870e23122f703f91c2"
3
+ when /x86_64-linux-gnu/ then "quay.io/pypa/manylinux2014_x86_64"
4
+ when /x86-linux-gnu/ then "quay.io/pypa/manylinux2014_i686"
5
+ else "ubuntu:20.04"
6
6
  end
7
7
  manylinux = !!(image =~ /manylinux/)
8
8
  %>
9
9
  FROM <%= image %>
10
10
 
11
11
  ##
12
- ## RVM and native rubies
12
+ ## Install required base packages for compiling ruby
13
13
  ##
14
- # Install packages which rvm will require
15
14
  <% if manylinux %>
16
15
  RUN yum install -y sudo ruby less git wget curl autoconf libtool cmake gcc-c++ xz readline-devel sqlite-devel openssl-devel libffi-devel libyaml-devel
17
16
 
18
- # Prepare sudo and delete sudo as alias to gosu
17
+ ## Prepare sudo
19
18
  RUN rm -f /usr/local/bin/sudo && \
20
19
  groupadd -r sudo && \
21
20
  echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers
21
+
22
22
  <% else %>
23
23
  ENV DEBIAN_FRONTEND noninteractive
24
24
  RUN apt-get -y update && \
25
- apt-get install -y sudo wget autoconf cmake curl git-core pkg-config build-essential xz-utils unzip gnupg2 dirmngr zlib1g-dev libreadline-dev libsqlite0-dev libssl-dev libyaml-dev libffi-dev && \
25
+ apt-get install -y sudo wget curl git-core build-essential xz-utils unzip dirmngr && \
26
+ apt-get install -y autoconf cmake pkg-config zlib1g-dev libreadline-dev libsqlite0-dev libssl-dev libyaml-dev libffi-dev && \
26
27
  rm -rf /var/lib/apt/lists/*
27
28
  <% end %>
28
29
 
29
- # Add "rvm" as system group, to avoid conflicts with host GIDs typically starting with 1000
30
- RUN groupadd -r rvm && useradd -r -g rvm -G sudo -p "" --create-home rvm
31
30
 
32
- # Make sure rvm and later settings are available in interactive and non-interactive shells
33
- RUN echo "source /etc/profile.d/rvm.sh" >> /etc/rubybashrc && \
34
- echo "source /etc/rubybashrc" >> /etc/bashrc && \
35
- echo "source /etc/rubybashrc" >> /etc/bash.bashrc
36
- ENV BASH_ENV /etc/rubybashrc
37
-
38
- USER rvm
39
-
40
- RUN mkdir ~/.gnupg && \
41
- chmod 700 ~/.gnupg && \
42
- echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf
43
-
44
- # install rvm, RVM 1.26.0+ has signed releases, source rvm for usage outside of package scripts
45
- RUN gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB && \
46
- (curl -L http://get.rvm.io | sudo bash) && \
47
- bash -c " \
48
- source /etc/rubybashrc && \
49
- rvm autolibs disable && \
50
- rvmsudo rvm cleanup all \
51
- "
31
+ ##
32
+ ## install rbenv and ruby-build
33
+ ##
34
+ RUN groupadd -r rubyuser && useradd -r -g rubyuser -G sudo -p "" --create-home rubyuser
52
35
 
53
- # Install native rubies and fix permissions
54
- COPY build/patches /home/rvm/patches/
55
- ENV RVM_RUBIES 2.5.9 3.1.3
56
- RUN bash -c " \
57
- export CFLAGS='-s -O3 -fno-fast-math -fPIC' && \
58
- for v in ${RVM_RUBIES} ; do \
59
- rvm install \$v --patch \$(echo ~/patches/ruby-\$v/* | tr ' ' ','); \
60
- done && \
61
- rvm cleanup all && \
62
- find /usr/local/rvm -type d -print0 | sudo xargs -0 chmod g+sw \
63
- "
36
+ ENV RBENV_ROOT=/usr/local/rbenv RBENV_RUBIES="2.5.9 3.1.3"
37
+
38
+ # chown after running `rbenv init` because that command creates some subdirectories
39
+ RUN git clone https://github.com/rbenv/rbenv.git ${RBENV_ROOT} && \
40
+ git clone https://github.com/rbenv/ruby-build.git ${RBENV_ROOT}/plugins/ruby-build && \
41
+ \
42
+ echo "export RBENV_ROOT=/usr/local/rbenv" >> /etc/rubybashrc && \
43
+ echo "export PATH=$RBENV_ROOT/bin:\$PATH" >> /etc/rubybashrc && \
44
+ $RBENV_ROOT/bin/rbenv init - --no-rehash bash >> /etc/rubybashrc && \
45
+ echo "source /etc/rubybashrc" >> /etc/bashrc && \
46
+ echo "source /etc/rubybashrc" >> /etc/bash.bashrc && \
47
+ \
48
+ chown -R rubyuser:rubyuser ${RBENV_ROOT} && \
49
+ find ${RBENV_ROOT} -type d -print0 | sudo xargs -0 chmod g+sw
50
+ ENV BASH_ENV=/etc/rubybashrc
64
51
 
65
- RUN bash -c " \
66
- echo "gem: --no-ri --no-rdoc" >> ~/.gemrc && \
67
- rvm all do gem update --system --no-document && \
68
- rvm all do gem update --no-document && \
69
- rvm all do gem install bundler --no-document && \
70
- find /usr/local/rvm -type d -print0 | sudo xargs -0 chmod g+sw \
71
- "
72
52
 
73
53
  ##
74
- ## Cross compilers
54
+ ## Install cross compilers
75
55
  ##
76
- USER root
77
-
78
- <% if platform=~/x64-mingw-ucrt/ %>
56
+ <% if platform =~ /x64-mingw-ucrt/ %>
79
57
  COPY --from=larskanis/mingw64-ucrt:20.04 \
80
58
  /build/binutils-mingw-w64-x86-64_2.34-6ubuntu1.3+8.8_amd64.deb \
81
59
  /build/g++-mingw-w64-x86-64_9.3.0-17ubuntu1~20.04+22~exp1ubuntu4_amd64.deb \
@@ -86,14 +64,18 @@ COPY --from=larskanis/mingw64-ucrt:20.04 \
86
64
  /debs/
87
65
  RUN dpkg -i /debs/*.deb
88
66
 
67
+ <% elsif platform =~ /linux-musl/ %>
68
+ COPY build/mk_musl_cross.sh /tmp
69
+ RUN /tmp/mk_musl_cross.sh <%= target %>
70
+
89
71
  <% elsif !manylinux %>
90
72
  RUN apt-get -y update && \
91
73
  apt-get install -y <%
92
- if platform=~/darwin/ %> clang python lzma-dev libxml2-dev libssl-dev libc++-10-dev <% end %><%
93
- if platform=~/aarch64-linux/ %> gcc-aarch64-linux-gnu g++-aarch64-linux-gnu <% end %><%
94
- if platform=~/arm-linux/ %> gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf <% end %><%
95
- if platform=~/x86-mingw32/ %> gcc-mingw-w64-i686 g++-mingw-w64-i686 <% end %><%
96
- if platform=~/x64-mingw32/ %> gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 <% end %> && \
74
+ if platform =~ /darwin/ %> clang python lzma-dev libxml2-dev libssl-dev libc++-10-dev <% end %><%
75
+ if platform =~ /aarch64-linux-gnu/ %> gcc-aarch64-linux-gnu g++-aarch64-linux-gnu <% end %><%
76
+ if platform =~ /arm-linux-gnu/ %> gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf <% end %><%
77
+ if platform =~ /x86-mingw32/ %> gcc-mingw-w64-i686 g++-mingw-w64-i686 <% end %><%
78
+ if platform =~ /x64-mingw32/ %> gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 <% end %> && \
97
79
  rm -rf /var/lib/apt/lists/*
98
80
  <% end %>
99
81
 
@@ -103,34 +85,43 @@ COPY build/mk_i686.rb /root/
103
85
  RUN /root/mk_i686.rb
104
86
  <% end %>
105
87
 
106
- <% if platform=~/darwin/ %>
107
- COPY build/mk_osxcross.sh /home/rvm
108
- RUN /home/rvm/mk_osxcross.sh
88
+ <% if platform =~ /darwin/ %>
89
+ COPY build/mk_osxcross.sh /tmp
90
+ RUN /tmp/mk_osxcross.sh
109
91
  <% end %>
110
92
 
111
93
 
112
94
  ##
113
- ## Cross-compile rubies
95
+ ## set up rake-compiler and install bootstrap rubies
114
96
  ##
115
- USER rvm
97
+ USER rubyuser
116
98
 
117
- RUN bash -c "rvm all do gem install --no-document rake-compiler:1.2.5"
118
-
119
- # Install rake-compiler's cross rubies in global dir instead of /root
120
- RUN sudo mkdir -p /usr/local/rake-compiler && \
121
- sudo chown rvm.rvm /usr/local/rake-compiler && \
122
- ln -s /usr/local/rake-compiler ~/.rake-compiler
99
+ # Install the bootstrap rubies
100
+ RUN bash -c " \
101
+ echo 'gem: --no-ri --no-rdoc --no-document' >> ~/.gemrc && \
102
+ export CFLAGS='-s -O3 -fno-fast-math -fPIC' && \
103
+ for v in ${RBENV_RUBIES} ; do \
104
+ rbenv install \$v -- --disable-install-doc ; \
105
+ done && \
106
+ find ${RBENV_ROOT} -type d -print0 | sudo xargs -0 chmod g+w \
107
+ "
123
108
 
124
- # Patch rake-compiler to build and install static libraries for Linux rubies
125
- COPY build/patches2 /home/rvm/patches/
109
+ # Install rake-compiler and patch it to build and install static libraries for Linux rubies
110
+ COPY build/patches2 /home/rubyuser/patches
126
111
  RUN bash -c " \
127
- for v in ${RVM_RUBIES} ; do \
128
- cd /usr/local/rvm/gems/ruby-\$v/gems/rake-compiler-1.2.5 && \
129
- echo applying patches to ruby-\$v /home/rvm/patches/rake-compiler-1.2.5/*.patch && \
130
- ( git apply /home/rvm/patches/rake-compiler-1.2.5/*.patch || true ) \
112
+ for v in ${RBENV_RUBIES} ; do \
113
+ rbenv shell \$v && \
114
+ gem install rake-compiler -v1.2.5 && \
115
+ cd ${RBENV_ROOT}/versions/\$v/lib/ruby/gems/*/gems/rake-compiler-1.2.5 && \
116
+ patch -p1 < /home/rubyuser/patches/rake-compiler-1.2.5/*.patch ; \
131
117
  done \
132
118
  "
133
119
 
120
+ # Install rake-compiler's cross rubies in global dir instead of /root
121
+ RUN sudo mkdir -p /usr/local/rake-compiler && \
122
+ sudo chown rubyuser.rubyuser /usr/local/rake-compiler && \
123
+ ln -s /usr/local/rake-compiler ~/.rake-compiler
124
+
134
125
  <%
135
126
  #
136
127
  # Build ruby versions prior to ruby2_keywords using ruby-2.5
@@ -139,7 +130,7 @@ RUN bash -c " \
139
130
  # Note that parallel builds of ruby with make flag `-j` are often flaky, see
140
131
  # https://bugs.ruby-lang.org/issues/18506
141
132
  #
142
- axrubies = if platform =~ /x64-mingw-ucrt/
133
+ xrubies_build_plan = if platform =~ /x64-mingw-ucrt/
143
134
  [
144
135
  # Rubyinstaller-3.1.0+ is platform x64-mingw-ucrt
145
136
  ["3.3.0-rc1:3.2.0:3.1.0", "3.1.3"],
@@ -157,35 +148,33 @@ else
157
148
  ]
158
149
  end
159
150
 
160
- axrubies.each do |xrubies, rvm| %>
161
- ENV XRUBIES <%= xrubies %>
151
+ strip = '-s' if platform !~ /darwin/
162
152
 
163
- <% strip = '-s' if platform !~ /darwin/ %>
164
- # Build xruby versions, then cleanup all build artifacts
153
+ xrubies_build_plan.each do |xrubies, bootstrap_ruby_version| %>
165
154
  RUN bash -c " \
166
- rvm use <%= rvm %> && \
167
- export CPPFLAGS='<%= "-D__USE_MINGW_ANSI_STDIO=1" if platform=~/x64-mingw-ucrt/ %>' && \
155
+ rbenv shell <%= bootstrap_ruby_version %> && \
156
+ export CPPFLAGS='<%= "-D__USE_MINGW_ANSI_STDIO=1" if platform =~ /x64-mingw-ucrt/ %>' && \
168
157
  export CFLAGS='-O1 -fno-omit-frame-pointer -fno-fast-math -fstack-protector-strong <%= strip %>' && \
169
158
  export LDFLAGS='-pipe <%= strip %>' && \
170
159
  <%= "export LIBS='-l:libssp.a' &&" if platform =~ /mingw/ %> \
171
160
  <%= "export CC=#{target}-clang &&" if platform =~ /darwin/ %> \
172
161
  export MAKE='make V=1' && \
173
- rake-compiler cross-ruby VERSION=$XRUBIES HOST=<%= target %> && \
174
- rm -rf ~/.rake-compiler/builds ~/.rake-compiler/sources && \
175
- find /usr/local/rvm -type d -print0 | sudo xargs -0 chmod g+sw \
162
+ rake-compiler cross-ruby VERSION=<%= xrubies %> HOST=<%= target %> && \
163
+ rm -rf ~/.rake-compiler/builds ~/.rake-compiler/sources \
176
164
  "
177
165
  <% end %>
166
+ # "
178
167
 
179
- <% if platform=~/linux/ %>
168
+ <% if platform =~ /linux/ %>
180
169
  # Avoid linking against libruby shared object.
181
170
  # See also https://github.com/rake-compiler/rake-compiler-dock/issues/13
182
171
  RUN find /usr/local/rake-compiler/ruby/*linux*/ -name libruby.so | xargs rm
183
172
  RUN find /usr/local/rake-compiler/ruby/*linux*/ -name libruby-static.a | while read f ; do cp $f `echo $f | sed s/-static//` ; done
184
173
  RUN find /usr/local/rake-compiler/ruby/*linux*/ -name libruby.a | while read f ; do ar t $f | xargs ar d $f ; done
185
- RUN find /usr/local/rake-compiler/ruby/*linux*/ -name mkmf.rb | while read f ; do sed -i ':a;N;$!ba;s/TRY_LINK = [^\n]*\n[^\n]*\n[^\n]*LOCAL_LIBS)/& -lruby-static -lpthread -lrt -ldl <% if platform=~/x86/ %> -lcrypt <% end %>/' $f ; done
174
+ RUN find /usr/local/rake-compiler/ruby/*linux*/ -name mkmf.rb | while read f ; do sed -i ':a;N;$!ba;s/TRY_LINK = [^\n]*\n[^\n]*\n[^\n]*LOCAL_LIBS)/& -lruby-static -lpthread -lrt -ldl <% if platform =~ /x86/ %> -lcrypt <% end %>/' $f ; done
186
175
  <% end %>
187
176
 
188
- <% if platform=~/mingw/ %>
177
+ <% if platform =~ /mingw/ %>
189
178
  # RubyInstaller doesn't install libgcc -> link it static.
190
179
  RUN find /usr/local/rake-compiler/ruby/*mingw*/ -name rbconfig.rb | while read f ; do sed -i 's/."LDFLAGS". = "/&-static-libgcc /' $f ; done
191
180
  # Raise Windows-API to Vista (affects ruby < 2.6 only)
@@ -197,7 +186,7 @@ RUN find /usr/local/rake-compiler/ruby -name lib*-ruby*.dll.a | while read f ; d
197
186
  # ruby-2.5 links to libcrypt, which isn't necessary for extensions
198
187
  RUN find /usr/local/rake-compiler/ruby -name rbconfig.rb | while read f ; do sed -i 's/-lcrypt//' $f ; done
199
188
 
200
- <% if platform=~/darwin/ %>
189
+ <% if platform =~ /darwin/ %>
201
190
  # ruby-3.2+ on darwin links with `-bundle_loader`,
202
191
  # - see https://github.com/rake-compiler/rake-compiler-dock/issues/87
203
192
  # - note that we do this for "3.[2-9].0" to match rubies 3.2 and later
@@ -206,15 +195,13 @@ RUN find /usr/local/rake-compiler/ruby/*/*/lib/ruby/3.[2-9].0* -name rbconfig.rb
206
195
  while read f ; do sed -i 's/\["EXTDLDFLAGS"\] = "/&-Wl,-flat_namespace /' $f ; done
207
196
  <% end %>
208
197
 
198
+
209
199
  ##
210
200
  ## Final adjustments
211
201
  ##
212
202
  USER root
213
203
 
214
- # Fix paths in rake-compiler/config.yml
215
- RUN sed -i -- "s:/root/.rake-compiler:/usr/local/rake-compiler:g" /usr/local/rake-compiler/config.yml
216
-
217
- <% if platform=~/mingw/ %>
204
+ <% if platform =~ /mingw/ %>
218
205
  # Install wrappers for strip commands as a workaround for "Protocol error" in boot2docker.
219
206
  COPY build/strip_wrapper_vbox /root/
220
207
  RUN mv /usr/bin/<%= target %>-strip /usr/bin/<%= target %>-strip.bin && \
@@ -242,12 +229,13 @@ RUN echo "export PATH=\$DEVTOOLSET_ROOTPATH/usr/bin:\$PATH" >> /etc/rubybashrc
242
229
  RUN for f in addr2line gcc gcov-tool ranlib ar dwp gcc-ranlib nm readelf as elfedit gcc-ar gprof objcopy size c++filt g++ gcov ld objdump strings cpp gcc-nm pkg-config strip ; do ln -sf $DEVTOOLSET_ROOTPATH/usr/bin/$f $DEVTOOLSET_ROOTPATH/usr/bin/<%= target %>-$f ; done
243
230
 
244
231
  # Use builtin functions of newer gcc to avoid linker issues on Musl based Linux
232
+ # TODO: remove in v1.6.0 once musl builds have been out for full minor release cycle, see 864be5b2
245
233
  COPY build/math_h.patch /root/
246
234
  RUN cd /usr/include/ && \
247
235
  patch -p1 < /root/math_h.patch
248
236
  <% end %>
249
237
 
250
- <% if platform=~/arm64-darwin/ %>
238
+ <% if platform =~ /arm64-darwin/ %>
251
239
  # Add a arm64 darwin target as alternative to aarch64
252
240
  RUN grep -E 'rbconfig-aarch64-darwin' /usr/local/rake-compiler/config.yml | sed 's/rbconfig-[a-z0-9_]*-darwin/rbconfig-<%= platform %>/' >> /usr/local/rake-compiler/config.yml
253
241
  <% end %>
@@ -259,15 +247,12 @@ RUN gcc $HOME/sigfw.c -o /usr/bin/sigfw
259
247
  # Install user mapper
260
248
  COPY build/runas /usr/bin/
261
249
  COPY build/rcd-env.sh /etc/profile.d/
262
- RUN echo "source /etc/profile.d/rcd-env.sh" >> /etc/rubybashrc
250
+ RUN echo 'source /etc/profile.d/rcd-env.sh' >> /etc/rubybashrc
263
251
 
264
252
  # Install sudoers configuration
265
253
  COPY build/sudoers /etc/sudoers.d/rake-compiler-dock
266
254
 
267
- RUN bash -c " \
268
- rvm alias create default 3.1.3 && \
269
- rvm use default \
270
- "
255
+ RUN bash -c "rbenv global 3.1.3"
271
256
 
272
257
  ENV RUBY_CC_VERSION 3.3.0:3.2.0:3.1.0:3.0.0:2.7.0:2.6.0:2.5.0:2.4.0
273
258
 
data/History.md CHANGED
@@ -1,8 +1,35 @@
1
- 1.4.0 / 2023-12-26
1
+ # v1.5.0.rc1 / prerelease 2024-01-26
2
+
3
+ ## Notable changes
4
+
5
+ ### First-class Linux `musl` libc support
6
+
7
+ * Add Linux musl cross build targets `aarch64-linux-musl`, `arm-linux-musl`, `x86-linux-musl`, and `x86_64-linux-musl`. #75, #111 (@flavorjones)
8
+ * Add Linux cross build targets `aarch64-linux-gnu`, `arm-linux-gnu`, `x86-linux-gnu`, and `x86_64-linux-gnu`. #111 (@flavorjones)
9
+ * The cross build targets `aarch64-linux`, `arm-linux`, `x86-linux`, and `x86_64-linux` are now aliases for the `*-linux-gnu` targets. #111 (@flavorjones)
10
+
11
+ Please read the README for more details.
12
+
13
+
14
+ ## Improvements
15
+
16
+ * Predefined user and group list is more complete, and represents the union of users and groups
17
+ across all RCD images.
18
+
19
+
20
+ ## Changes
21
+
22
+ * Replace `rvm` with `rbenv` and `ruby-build` in the build containers.
23
+ - `rvm` has been replaced by `rbenv` and `ruby-build`
24
+ - no longer applying sendfile patches to bootstrap rubies
25
+ - no longer updating gems belonging to the bootstrap rubies
26
+ - user `rvm` no longer exists, replaced by `rubyuser`
27
+
28
+
29
+ 1.4.0 / 2023-12-27
2
30
  ------------------
3
31
 
4
32
  * Add Ruby 3.3.0-rc1 cross-compilation support. #109, #105 (@flavorjones)
5
- * Add Ruby 3.3.0-preview3 cross-compilation support. #105 (@flavorjones)
6
33
  * Update to rake-compiler 1.2.5. #108 (@flavorjones)
7
34
 
8
35
 
@@ -49,7 +76,7 @@
49
76
  * Fix testing for ruby C-API functions in mkmf. #65, #67
50
77
  * Use openjdk 11 to make maven work on ubuntu 20.04. #64
51
78
  * Remove x86_64-w64-mingw32-pkg-config from the x64-mingw-ucrt image. #63
52
- * Add a patch for math.h to use gcc builtins and to improve compat with musl based systems. #42
79
+ * Add a patch for math.h to use gcc builtins and to improve compat with `musl` libc-based systems. #42
53
80
 
54
81
 
55
82
  1.2.0 / 2022-01-04
data/README.md CHANGED
@@ -10,6 +10,43 @@ This is kind of successor of [rake-compiler-dev-box](https://github.com/tjschuck
10
10
  It is wrapped as a gem for easier setup, usage and integration and is based on lightweight Docker containers.
11
11
  It is also more reliable, since the underlying docker images are versioned and immutable.
12
12
 
13
+ ## Supported platforms
14
+
15
+ The following platforms are supported for cross-compilation by rake-compiler-dock:
16
+
17
+ - `aarch64-linux` and `aarch64-linux-gnu`
18
+ - `aarch64-linux-musl`
19
+ - `arm-linux` and `arm-linux-gnu`
20
+ - `arm-linux-musl`
21
+ - `arm64-darwin`
22
+ - `jruby`
23
+ - `x64-mingw-ucrt`
24
+ - `x64-mingw32`
25
+ - `x86-linux` and `x86-linux-gnu`
26
+ - `x86-linux-musl`
27
+ - `x86-mingw32`
28
+ - `x86_64-darwin`
29
+ - `x86_64-linux` and `x86_64-linux-gnu`
30
+ - `x86_64-linux-musl`
31
+
32
+ ### Windows
33
+
34
+ `x64-mingw-ucrt` should be used for Ruby 3.1 and later on windows. `x64-mingw32` should be used for Ruby 3.0 and earlier. This is to match the [changed platform of RubyInstaller-3.1](https://rubyinstaller.org/2021/12/31/rubyinstaller-3.1.0-1-released.html).
35
+
36
+ ### GNU and Musl
37
+
38
+ Platform names with a `*-linux` suffix are aliases for `*-linux-gnu`, since the Rubygems default is to assume `gnu` if no libc is specified.
39
+
40
+ Some C extensions may not require separate GNU and Musl builds, in which case it's acceptable to ship a single `*-linux` gem to cover both platforms.
41
+
42
+ The `*-linux-gnu` and `*-linux-musl` platform name suffixes require Rubygems 3.3.22 or later (or Bundler 2.3.21 or later) at installation time. Ruby version 3.0 and later ship with a sufficient Rubygems version, but versions compatible with earlier Rubies are:
43
+
44
+ - ruby: "2.7", rubygems: "3.4.22"
45
+ - ruby: "2.6", rubygems: "3.4.22"
46
+ - ruby: "2.5", rubygems: "3.3.26"
47
+ - ruby: "2.4", rubygems: "3.3.26"
48
+
49
+
13
50
  ## Installation
14
51
 
15
52
  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) .
@@ -37,6 +74,8 @@ exttask = Rake::ExtensionTask.new('my_extension', my_gem_spec) do |ext|
37
74
  end
38
75
  ```
39
76
 
77
+ where you should choose your platforms from the list in the "Supported platforms" section.
78
+
40
79
  See below, how to invoke cross builds in your Rakefile.
41
80
 
42
81
  Additionally it may also be used to build ffi based binary gems like [libusb](https://github.com/larskanis/libusb), but currently doesn't provide any additional build helpers for this use case, beyond docker invocation and cross compilers.
@@ -44,9 +83,6 @@ Additionally it may also be used to build ffi based binary gems like [libusb](ht
44
83
  ### Interactive Usage
45
84
 
46
85
  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.
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
86
 
51
87
  `rake-compiler-dock` without arguments starts an interactive shell session.
52
88
  This is best suited to try out and debug a build.
@@ -68,12 +104,12 @@ To build x86 Windows and x86_64 Linux binary gems interactively, it can be calle
68
104
  user@host:$ ls pkg/*.gem
69
105
  your-gem-1.0.0.gem your-gem-1.0.0-x86-mingw32.gem
70
106
 
71
- user@host:$ RCD_PLATFORM=x86_64-linux rake-compiler-dock # this enters a container for amd64 Linux target
107
+ user@host:$ RCD_PLATFORM=x86_64-linux-gnu rake-compiler-dock # this enters a container for amd64 Linux GNU target
72
108
  user@adc55b2b92a9:$ bundle
73
109
  user@adc55b2b92a9:$ rake cross native gem
74
110
  user@adc55b2b92a9:$ exit
75
111
  user@host:$ ls pkg/*.gem
76
- your-gem-1.0.0.gem your-gem-1.0.0-x86_64-linux.gem
112
+ your-gem-1.0.0.gem your-gem-1.0.0-x86_64-linux-gnu.gem
77
113
 
78
114
  Or non-interactive:
79
115
 
@@ -92,7 +128,7 @@ For Linux:
92
128
 
93
129
  sudo yum install your-package
94
130
 
95
- You can also choose between different executable ruby versions by `rvm use <version>` .
131
+ You can also choose between different executable ruby versions by `rbenv shell <version>` .
96
132
  The current default is 3.1.
97
133
 
98
134
  ### JRuby support
@@ -118,10 +154,25 @@ To make the build process reproducible for other parties, it is recommended to a
118
154
  This can be done like this:
119
155
 
120
156
  ```ruby
157
+ PLATFORMS = %w[
158
+ aarch64-linux-gnu
159
+ aarch64-linux-musl
160
+ arm-linux-gnu
161
+ arm-linux-musl
162
+ arm64-darwin
163
+ x64-mingw-ucrt
164
+ x64-mingw32
165
+ x86-linux-gnu
166
+ x86-linux-musl
167
+ x86-mingw32
168
+ x86_64-darwin
169
+ x86_64-linux-gnu
170
+ x86_64-linux-musl
171
+ ]
121
172
  task 'gem:native' do
122
173
  require 'rake_compiler_dock'
123
174
  sh "bundle package --all" # Avoid repeated downloads of gems by using gem files from the host.
124
- %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|
175
+ PLATFORMS.each do |plat|
125
176
  RakeCompilerDock.sh "bundle --local && rake native:#{plat} gem", platform: plat
126
177
  end
127
178
  RakeCompilerDock.sh "bundle --local && rake java gem", rubyvm: :jruby
@@ -187,10 +238,10 @@ jobs:
187
238
  name: "native-gem"
188
239
  runs-on: ubuntu-latest
189
240
  container:
190
- image: "ghcr.io/rake-compiler/rake-compiler-dock-image:1.2.2-mri-x86_64-linux"
241
+ image: "ghcr.io/rake-compiler/rake-compiler-dock-image:1.2.2-mri-x86_64-linux-gnu"
191
242
  steps:
192
243
  - uses: actions/checkout@v2
193
- - run: bundle install && bundle exec rake gem:x86_64-linux:rcd
244
+ - run: bundle install && bundle exec rake gem:x86_64-linux-gnu:rcd
194
245
  - uses: actions/upload-artifact@v2
195
246
  with:
196
247
  name: native-gem
@@ -198,7 +249,7 @@ jobs:
198
249
  retention-days: 1
199
250
  ```
200
251
 
201
- Where the referenced rake task might be defined by:
252
+ Where the referenced rake task might be defined by something like:
202
253
 
203
254
  ``` ruby
204
255
  cross_platforms = ["x64-mingw32", "x86_64-linux", "x86_64-darwin", "arm64-darwin"]
@@ -223,7 +274,7 @@ For an example of rake tasks that support this style of invocation, visit https:
223
274
 
224
275
  OCI images snapshotted from `main` are published weekly to Github Container Registry with the string "snapshot" in place of the version number in the tag name, e.g.:
225
276
 
226
- - `ghcr.io/rake-compiler/rake-compiler-dock-image:snapshot-mri-x86_64-linux`
277
+ - `ghcr.io/rake-compiler/rake-compiler-dock-image:snapshot-mri-x86_64-linux-gnu`
227
278
 
228
279
  These images are intended for integration testing. They may not work properly and should not be considered production ready.
229
280
 
@@ -237,7 +288,7 @@ The following variables are recognized by rake-compiler-dock:
237
288
  * `RCD_RUBYVM` - The ruby VM and toolchain to be used.
238
289
  Must be one of `mri`, `jruby`.
239
290
  * `RCD_PLATFORM` - The target rubygems platform.
240
- 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`.
291
+ Must be a space separated list out of the platforms listed under "Supported platforms" above.
241
292
  It is ignored when `rubyvm` is set to `:jruby`.
242
293
  * `RCD_IMAGE` - The docker image that is downloaded and started.
243
294
  Defaults to "ghcr.io/rake-compiler/rake-compiler-dock-image:IMAGE_VERSION-PLATFORM" with an image version that is determined by the gem version.