Skip to content

Commit 4d82a7f

Browse files
committed
Binary gem cross-compilation via rake-compiler-dock
Simply have Docker installed and run this to compile binary gems: bundle exec rake gem:native
1 parent 3c3344f commit 4d82a7f

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed

Rakefile

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
1-
begin
2-
require 'bundler/gem_tasks'
3-
rescue LoadError
4-
puts 'Cannot load bundler/gem_tasks'
5-
end
1+
require 'bundler/gem_tasks'
62

73
task default: :test
84

95
require 'rake/extensiontask'
10-
Rake::ExtensionTask.new do |ext|
6+
gem_spec = Gem::Specification.load("sassc.gemspec")
7+
Rake::ExtensionTask.new('libsass', gem_spec) do |ext|
118
ext.name = 'libsass'
129
ext.ext_dir = 'ext'
1310
ext.lib_dir = 'lib/sassc'
11+
ext.cross_compile = true
12+
ext.cross_platform = %w[x86-mingw32 x64-mingw32 x86-linux x86_64-linux]
13+
ext.cross_compiling do |spec|
14+
spec.files.reject! { |path| File.fnmatch?('ext/*', path) }
15+
end
16+
end
17+
18+
desc 'Compile all native gems via rake-compiler-dock (Docker)'
19+
task 'gem:native' do
20+
require 'rake_compiler_dock'
21+
RakeCompilerDock.sh "bundle && gem i rake --no-document && "\
22+
"rake cross native gem MAKE='nice make -j`nproc`' "\
23+
"RUBY_CC_VERSION=2.6.0:2.5.0:2.4.0:2.3.0"
1424
end
1525

1626
desc "Run all tests"

lib/sassc/native.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,13 @@ module Native
88

99
spec = Gem.loaded_specs["sassc"]
1010
gem_root = spec.gem_dir
11-
ffi_lib "#{gem_root}/lib/sassc/libsass.so"
11+
12+
ruby_version_so_path = "#{gem_root}/lib/sassc/#{RUBY_VERSION[/\d+.\d+/]}/libsass.so"
13+
if File.exist?(ruby_version_so_path)
14+
ffi_lib ruby_version_so_path
15+
else
16+
ffi_lib "#{gem_root}/lib/sassc/libsass.so"
17+
end
1218

1319
require_relative "native/sass_value"
1420

sassc.gemspec

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@ Gem::Specification.new do |spec|
3131
spec.add_development_dependency "test_construct"
3232
spec.add_development_dependency "pry"
3333
spec.add_development_dependency "bundler"
34+
spec.add_development_dependency "rake"
3435
spec.add_development_dependency "rake-compiler"
36+
spec.add_development_dependency "rake-compiler-dock"
3537

36-
spec.add_dependency "rake"
3738
spec.add_dependency "ffi", "~> 1.9"
3839

3940
gem_dir = File.expand_path(File.dirname(__FILE__)) + "/"

0 commit comments

Comments
 (0)