diff options
Diffstat (limited to 'tasks')
| -rw-r--r-- | tasks/mrbgem_spec.rake | 6 | ||||
| -rw-r--r-- | tasks/mrbgems.rake | 8 | ||||
| -rw-r--r-- | tasks/mruby_build.rake | 18 | ||||
| -rw-r--r-- | tasks/mruby_build_commands.rake | 24 | ||||
| -rw-r--r-- | tasks/mruby_build_gem.rake | 6 | ||||
| -rw-r--r-- | tasks/ruby_ext.rake | 8 | ||||
| -rw-r--r-- | tasks/toolchains/clang.rake | 4 | ||||
| -rw-r--r-- | tasks/toolchains/gcc.rake | 2 | ||||
| -rw-r--r-- | tasks/toolchains/vs2012.rake | 2 |
9 files changed, 56 insertions, 22 deletions
diff --git a/tasks/mrbgem_spec.rake b/tasks/mrbgem_spec.rake index 612ff242a..3e37f454d 100644 --- a/tasks/mrbgem_spec.rake +++ b/tasks/mrbgem_spec.rake @@ -105,6 +105,8 @@ module MRuby print_gem_init_header f build.mrbc.run f, rbfiles, "gem_mrblib_irep_#{funcname}" unless rbfiles.empty? f.puts %Q[void mrb_#{funcname}_gem_init(mrb_state *mrb);] + f.puts %Q[void mrb_#{funcname}_gem_final(mrb_state *mrb);] + f.puts %Q[] f.puts %Q[void GENERATED_TMP_mrb_#{funcname}_gem_init(mrb_state *mrb) {] f.puts %Q[ int ai = mrb_gc_arena_save(mrb);] f.puts %Q[ mrb_#{funcname}_gem_init(mrb);] if objs != [objfile("#{build_dir}/gem_init")] @@ -117,6 +119,10 @@ module MRuby end f.puts %Q[ mrb_gc_arena_restore(mrb, ai);] f.puts %Q[}] + f.puts %Q[] + f.puts %Q[void GENERATED_TMP_mrb_#{funcname}_gem_final(mrb_state *mrb) {] + f.puts %Q[ mrb_#{funcname}_gem_final(mrb);] if objs != [objfile("#{build_dir}/gem_init")] + f.puts %Q[}] end end # generate_gem_init diff --git a/tasks/mrbgems.rake b/tasks/mrbgems.rake index dc5e67eef..9d8798ef3 100644 --- a/tasks/mrbgems.rake +++ b/tasks/mrbgems.rake @@ -24,10 +24,18 @@ MRuby.each_target do f.puts %Q[#include "mruby.h"] f.puts %Q[] f.puts %Q[#{gems.map{|g| "void GENERATED_TMP_mrb_%s_gem_init(mrb_state* mrb);" % g.funcname}.join("\n")}] + f.puts %Q[] + f.puts %Q[#{gems.map{|g| "void GENERATED_TMP_mrb_%s_gem_final(mrb_state* mrb);" % g.funcname}.join("\n")}] + f.puts %Q[] f.puts %Q[void] f.puts %Q[mrb_init_mrbgems(mrb_state *mrb) {] f.puts %Q[#{gems.map{|g| "GENERATED_TMP_mrb_%s_gem_init(mrb);" % g.funcname}.join("\n")}] f.puts %Q[}] + f.puts %Q[] + f.puts %Q[void] + f.puts %Q[mrb_final_mrbgems(mrb_state *mrb) {] + f.puts %Q[#{gems.map{|g| "GENERATED_TMP_mrb_%s_gem_final(mrb);" % g.funcname}.join("\n")}] + f.puts %Q[}] end end end diff --git a/tasks/mruby_build.rake b/tasks/mruby_build.rake index b9e0d2749..08c0a5a05 100644 --- a/tasks/mruby_build.rake +++ b/tasks/mruby_build.rake @@ -29,10 +29,6 @@ module MRuby conf.instance_eval(&@initializer) end - def toolchain(name) - @@toolchains[name.to_s].setup(self) - end - def self.load Dir.glob("#{File.dirname(__FILE__)}/toolchains/*.rake").each do |file| Kernel.load file @@ -93,7 +89,9 @@ module MRuby end def toolchain(name) - Toolchain.toolchains[name.to_s].setup(self) + tc = Toolchain.toolchains[name.to_s] + fail "Unknown #{name} toolchain" unless tc + tc.setup(self) end def build_dir @@ -148,6 +146,16 @@ module MRuby sh "#{filename mrbtest}" puts end + + def print_build_summary + puts "================================================" + puts " Config Name: #{@name}" + puts " Output Directory: #{self.build_dir}" + puts " Binaries: #{@bins.join(', ')}" unless @bins.empty? + puts " Included Gems: #{@gems.map{|g| g.name }.join(', ')}" unless @gems.empty? + puts "================================================" + puts + end end # Build class CrossBuild < Build diff --git a/tasks/mruby_build_commands.rake b/tasks/mruby_build_commands.rake index abaf3a72c..23d2c31ae 100644 --- a/tasks/mruby_build_commands.rake +++ b/tasks/mruby_build_commands.rake @@ -56,8 +56,12 @@ module MRuby def run(outfile, infile, _defineds=[], _include_paths=[], _flags=[]) FileUtils.mkdir_p File.dirname(outfile) - _pp "CC #{filename(infile)} > #{filename(outfile)}" - _run compile_options, { :flags => all_flags(_defineds, [_include_paths, File.dirname(infile)], _flags), + define_flags = [defines, _defineds].flatten.map{ |d| option_define % d } + include_path_flags = [include_paths, _include_paths, File.dirname(infile)].flatten.map do |f| + option_include_path % filename(f) + end + _pp "CC", "#{filename(infile)}", "#{filename(outfile)}" + _run compile_options, { :flags => all_flags(_defineds, _include_paths, _flags), :infile => filename(infile), :outfile => filename(outfile) } end @@ -125,14 +129,12 @@ module MRuby end def library_flags(_libraries) - [libraries, _libraries].flatten.reverse.map do |d| - option_library % d - end.join(' ') + [libraries, _libraries].flatten.map{ |d| option_library % d }.join(' ') end def run(outfile, objfiles, _libraries=[], _library_paths=[], _flags=[], _flags_before_libraries=[]) FileUtils.mkdir_p File.dirname(outfile) - library_flags = [libraries, _libraries].flatten.reverse.map { |d| option_library % d } + library_flags = [libraries, _libraries].flatten.map { |d| option_library % d } library_path_flags = [library_paths, _library_paths].flatten.map { |f| option_library_path % filename(f) } _pp "LD #{filename(outfile)}" _run link_options, { :flags => all_flags(_library_paths, _flags), @@ -153,7 +155,7 @@ module MRuby def run(outfile, objfiles) FileUtils.mkdir_p File.dirname(outfile) - _pp "AR #{filename(outfile)}" + _pp "AR", "#{filename(outfile)}" _run archive_options, { :outfile => filename(outfile), :objs => filename(objfiles).join(' ') } end end @@ -169,7 +171,7 @@ module MRuby def run(outfile, infile) FileUtils.mkdir_p File.dirname(outfile) - _pp "YACC #{filename(infile)} > #{filename(outfile)}" + _pp "YACC", "#{filename(infile)}", "#{filename(outfile)}" _run compile_options, { :outfile => filename(outfile) , :infile => filename(infile) } end end @@ -185,7 +187,7 @@ module MRuby def run(outfile, infile) FileUtils.mkdir_p File.dirname(outfile) - _pp "GPERF #{filename(infile)} > #{filename(outfile)}" + _pp "GPERF", "#{filename(infile)}", "#{filename(outfile)}" _run compile_options, { :outfile => filename(outfile) , :infile => filename(infile) } end end @@ -202,7 +204,7 @@ module MRuby end def run_clone(dir, url, _flags = []) - _pp "GIT #{url} > #{filename(dir)}" + _pp "GIT", "#{url}", "#{filename(dir)}" _run clone_options, { :flags => [flags, _flags].flatten.join(' '), :url => url, :dir => filename(dir) } end end @@ -218,7 +220,7 @@ module MRuby @command ||= @build.mrbcfile IO.popen("#{filename @command} #{@compile_options % {:funcname => funcname}}", 'r+') do |io| [infiles].flatten.each do |f| - _pp " MRBC #{f}" + _pp "MRBC", "#{f}", nil, :indent => 2 io.write IO.read(f) end io.close_write diff --git a/tasks/mruby_build_gem.rake b/tasks/mruby_build_gem.rake index ae0a79447..80990773d 100644 --- a/tasks/mruby_build_gem.rake +++ b/tasks/mruby_build_gem.rake @@ -2,7 +2,11 @@ module MRuby module LoadGems def gem(gemdir, &block) gemdir = load_external_gem(gemdir) if gemdir.is_a?(Hash) - load File.join(gemdir, "mrbgem.rake") + gemrake = File.join(gemdir, "mrbgem.rake") + + fail "Can't find #{gemrake}" unless File.exists?(gemrake) + load gemrake + Gem.current.dir = gemdir Gem.current.build = MRuby::Build.current Gem.current.build_config_initializer = block diff --git a/tasks/ruby_ext.rake b/tasks/ruby_ext.rake index 2536a2e4b..6817f6018 100644 --- a/tasks/ruby_ext.rake +++ b/tasks/ruby_ext.rake @@ -57,6 +57,10 @@ else $pp_show = false if $verbose end -def _pp(msg) - puts msg if $pp_show +def _pp(cmd, src, tgt=nil, options={}) + return unless $pp_show + + width = 5 + template = options[:indent] ? "%#{width*options[:indent]}s %s %s" : "%-#{width}s %s %s" + puts template % [cmd, src, tgt ? "-> #{tgt}" : nil] end diff --git a/tasks/toolchains/clang.rake b/tasks/toolchains/clang.rake index 01dd5f234..1785c4c79 100644 --- a/tasks/toolchains/clang.rake +++ b/tasks/toolchains/clang.rake @@ -1,6 +1,8 @@ MRuby::Toolchain.new(:clang) do |conf| toolchain :gcc - conf.cc.command = ENV['CC'] || 'clang' + [conf.cc, conf.cxx, conf.objc].each do |cc| + cc.command = ENV['CC'] || 'clang' + end conf.linker.command = ENV['LD'] || 'clang' end diff --git a/tasks/toolchains/gcc.rake b/tasks/toolchains/gcc.rake index 3a3485a17..8d83c8407 100644 --- a/tasks/toolchains/gcc.rake +++ b/tasks/toolchains/gcc.rake @@ -1,5 +1,5 @@ MRuby::Toolchain.new(:gcc) do |conf| - conf.cc do |cc| + [conf.cc, conf.cxx, conf.objc].each do |cc| cc.command = ENV['CC'] || 'gcc' cc.flags = [ENV['CFLAGS'] || %w(-g -O3 -Wall -Werror-implicit-function-declaration)] cc.include_paths = ["#{root}/include"] diff --git a/tasks/toolchains/vs2012.rake b/tasks/toolchains/vs2012.rake index 108b4333f..0662ba27d 100644 --- a/tasks/toolchains/vs2012.rake +++ b/tasks/toolchains/vs2012.rake @@ -1,5 +1,5 @@ MRuby::Toolchain.new(:vs2012) do |conf| - conf.cc do |cc| + [conf.cc, conf.cxx].each do |cc| cc.command = ENV['CC'] || 'cl.exe' cc.flags = [ENV['CFLAGS'] || %w(/c /nologo /W3 /D_DEBUG /MDd /Zi /Od /RTC1 /DDISABLE_GEMS /DHAVE_STRING_H /DNO_GETTIMEOFDAY /D_CRT_SECURE_NO_WARNINGS)] cc.include_paths = ["#{root}/include"] |
