MacRuby on Rails #20110320-1
.rboの生成を抑制する方法
MacRubyの動作確認ではvm.cppを頻繁に修正する。vm.cppを修正するたびに.rboを
再生成するのは時間がかかる。そこで、.rboの生成を抑制する方法を調べる。
以下が.rboを生成している部分。minirubyよりも.rboの最終更新日時を新しけ
れば.rboが生成されない。
rakelib/builder.rake
namespace :stdlib do desc "AOT compile the stdlib" task :build => [:miniruby, 'macruby:dylib'] do archf = ARCHS.map { |x| "--arch #{x}" }.join(' ') commands = (COMPILE_STDLIB ? AOT_STDLIB : %w{ rbconfig.rb }).map do |pattern| Dir.glob(pattern).map do |path| out = File.join(File.dirname(path), File.basename(path, '.rb') + '.rbo') if !File.exist?(out) or File.mtime(path) > File.mtime(out) or File.mtime('./miniruby') > File.mtime(out) "./miniruby -I. -I./lib bin/rubyc --internal #{archf} -C \"#{path}\" -o \"#{out}\"" end end end.flatten.compact Builder.parallel_execute(commands) end end
また、.rboの対象は以下。
rakelib/builder.rake
AOT_STDLIB = [ 'rbconfig.rb', 'lib/date.rb', 'lib/date/**/*.rb', 'lib/erb.rb', 'lib/fileutils.rb', 'lib/irb.rb', 'lib/irb/**/*.rb', 'lib/net/**/*.rb', 'lib/optparse.rb', #'lib/stringio.rb', #spec fails 'lib/rexml.rb', 'lib/rexml/**/*.rb', 'lib/rubygems.rb', 'lib/rubygems/**/*.rb', 'lib/thread.rb', 'lib/time.rb', 'lib/timeout.rb', 'lib/uri.rb', 'lib/uri/**/*.rb', 'lib/xmlrpc/**/*.rb', 'lib/yaml.rb', 'lib/yaml/rubytypes.rb', 'ext/**/lib/**/*.rb' ]
rakelib/builder.rakeを以下のように修正。
diff --git a/rakelib/builder.rake b/rakelib/builder.rake index a06994a..18a0e26 100644 --- a/rakelib/builder.rake +++ b/rakelib/builder.rake @@ -174,6 +174,22 @@ namespace :stdlib do end end +namespace :stdlib do + desc "only update mtime for AOT compiled the stdlib" + task :touch => [:miniruby, 'macruby:dylib'] do + archf = ARCHS.map { |x| "--arch #{x}" }.join(' ') + commands = (COMPILE_STDLIB ? AOT_STDLIB : %w{ rbconfig.rb }).map do |pattern| + Dir.glob(pattern).map do |path| + out = File.join(File.dirname(path), File.basename(path, '.rb') + '.rbo') + if File.exist?(out) + "touch \"#{out}\"" + end + end + end.flatten.compact + Builder.parallel_execute(commands) + end +end + desc "Same as extensions" task :ext => 'extensions' ||< これまでは以下のようにしてMacRubyをコンパイルしていた。 >|| cymric$ rake optz_level=0
今後は以下のようにする。
cymric$ rake optz_level=0 macruby stdlib:touch extensions