54 lines
1.8 KiB
Ruby
54 lines
1.8 KiB
Ruby
|
require 'bundler/gem_tasks'
|
||
|
|
||
|
task default: :test
|
||
|
|
||
|
require 'rake/extensiontask'
|
||
|
gem_spec = Gem::Specification.load("sassc.gemspec")
|
||
|
|
||
|
# HACK: Prevent rake-compiler from overriding required_ruby_version,
|
||
|
# because the shared library here is Ruby-agnostic.
|
||
|
# See https://github.com/rake-compiler/rake-compiler/issues/153
|
||
|
module FixRequiredRubyVersion
|
||
|
def required_ruby_version=(*); end
|
||
|
end
|
||
|
Gem::Specification.send(:prepend, FixRequiredRubyVersion)
|
||
|
|
||
|
Rake::ExtensionTask.new('libsass', gem_spec) do |ext|
|
||
|
ext.name = 'libsass'
|
||
|
ext.ext_dir = 'ext'
|
||
|
ext.lib_dir = 'lib/sassc'
|
||
|
ext.cross_compile = true
|
||
|
ext.cross_platform = %w[x86-mingw32 x64-mingw32]
|
||
|
|
||
|
# Link C++ stdlib statically when building binary gems.
|
||
|
ext.cross_config_options << '--enable-static-stdlib'
|
||
|
|
||
|
ext.cross_config_options << '--disable-march-tune-native'
|
||
|
|
||
|
ext.cross_compiling do |spec|
|
||
|
spec.files.reject! { |path| File.fnmatch?('ext/*', path) }
|
||
|
end
|
||
|
end
|
||
|
|
||
|
desc 'Compile all native gems via rake-compiler-dock (Docker)'
|
||
|
task 'gem:native' do
|
||
|
require 'rake_compiler_dock'
|
||
|
|
||
|
# The RUBY_CC_VERSION here doesn't matter for the final package.
|
||
|
# Only one version should be specified, as the shared library is Ruby-agnostic.
|
||
|
#
|
||
|
# g++-multilib is installed for 64->32-bit cross-compilation.
|
||
|
RakeCompilerDock.sh "sudo apt-get install -y g++-multilib && gem i rake bundler --no-document && bundle && "\
|
||
|
"rake clean && rake cross native gem MAKE='nice make -j`nproc`' "\
|
||
|
"RUBY_CC_VERSION=2.6.0 CLEAN=1"
|
||
|
end
|
||
|
|
||
|
CLEAN.include 'tmp', 'pkg', 'lib/sassc/libsass.{so,bundle}', 'ext/libsass/VERSION',
|
||
|
'ext/*.{o,so,bundle}', 'ext/Makefile'
|
||
|
|
||
|
desc "Run all tests"
|
||
|
task test: 'compile:libsass' do
|
||
|
$LOAD_PATH.unshift('lib', 'test')
|
||
|
Dir.glob('./test/**/*_test.rb') { |f| require f }
|
||
|
end
|