diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/mruby/build.rb | 35 | ||||
| -rw-r--r-- | lib/mruby/build/command.rb | 4 | ||||
| -rw-r--r-- | lib/mruby/build/load_gems.rb | 13 | ||||
| -rw-r--r-- | lib/mruby/gem.rb | 22 | ||||
| -rw-r--r-- | lib/mruby/lockfile.rb | 4 |
5 files changed, 49 insertions, 29 deletions
diff --git a/lib/mruby/build.rb b/lib/mruby/build.rb index 9ba136cf3..fa3853342 100644 --- a/lib/mruby/build.rb +++ b/lib/mruby/build.rb @@ -81,7 +81,8 @@ module MRuby @mrbc = Command::Mrbc.new(self) @bins = [] - @gems, @libmruby_objs = MRuby::Gem::List.new, [] + @gems = MRuby::Gem::List.new + @libmruby_objs = [] @build_mrbtest_lib_only = false @cxx_exception_enabled = false @cxx_exception_disabled = false @@ -95,11 +96,10 @@ module MRuby MRuby.targets[@name] = self end - MRuby::Build.current = MRuby.targets[@name] - MRuby.targets[@name].instance_eval(&block) - - build_mrbc_exec if name == 'host' - build_mrbtest if test_enabled? + current = MRuby.targets[@name] + MRuby::Build.current = current + current.instance_eval(&block) + current.build_mrbtest if current.test_enabled? end def debug_enabled? @@ -196,6 +196,7 @@ EOS end def enable_bintest + raise "bintest works only on 'host' target" unless name == "host" @enable_bintest = true end @@ -246,9 +247,11 @@ EOS def mrbcfile return @mrbcfile if @mrbcfile - mrbc_build = MRuby.targets['host'] - gems.each { |v| mrbc_build = self if v.name == 'mruby-bin-mrbc' } - @mrbcfile = mrbc_build.exefile("#{mrbc_build.build_dir}/bin/mrbc") + unless gems.detect {|v| v.name == 'mruby-bin-mrbc' } + build_mrbc_exec + gems.detect {|v| v.name == 'mruby-bin-mrbc' }.setup + end + @mrbcfile = self.exefile("#{self.build_dir}/bin/mrbc") end def compilers @@ -369,13 +372,25 @@ EOS attr_accessor :host_target, :build_target def initialize(name, build_dir=nil, &block) + unless MRuby.targets['host'] + # add minimal 'host' + MRuby::Build.new('host') do |conf| + if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR'] + toolchain :visualcpp + else + toolchain :gcc + end + conf.gem :core => 'mruby-bin-mrbc' + end + end @endian = nil @test_runner = Command::CrossTestRunner.new(self) super end def mrbcfile - MRuby.targets['host'].exefile("#{MRuby.targets['host'].build_dir}/bin/mrbc") + host = MRuby.targets['host'] + host.exefile("#{host.build_dir}/bin/mrbc") end def run_test diff --git a/lib/mruby/build/command.rb b/lib/mruby/build/command.rb index 84ce78cb9..3d47c304f 100644 --- a/lib/mruby/build/command.rb +++ b/lib/mruby/build/command.rb @@ -313,13 +313,13 @@ module MRuby @compile_options = "-B%{funcname} -o-" end - def run(out, infiles, funcname) + def run(out, infiles, funcname, cdump = true) @command ||= @build.mrbcfile infiles = [infiles].flatten infiles.each do |f| _pp "MRBC", f.relative_path, nil, :indent => 2 end - cmd = %Q["#{filename @command}" #{@compile_options % {:funcname => funcname}} #{filename(infiles).map{|f| %Q["#{f}"]}.join(' ')}] + cmd = %Q["#{filename @command}" #{cdump ? "-S" : ""} #{@compile_options % {:funcname => funcname}} #{filename(infiles).map{|f| %Q["#{f}"]}.join(' ')}] puts cmd if Rake.verbose IO.popen(cmd, 'r+') do |io| out.puts io.read diff --git a/lib/mruby/build/load_gems.rb b/lib/mruby/build/load_gems.rb index 522b8a17e..4f5bde7af 100644 --- a/lib/mruby/build/load_gems.rb +++ b/lib/mruby/build/load_gems.rb @@ -28,18 +28,19 @@ module MRuby Gem.current = nil load gemrake return nil unless Gem.current + current = Gem.current - Gem.current.dir = gemdir - Gem.current.build = self.is_a?(MRuby::Build) ? self : MRuby::Build.current - Gem.current.build_config_initializer = block - gems << Gem.current + current.dir = gemdir + current.build = self.is_a?(MRuby::Build) ? self : MRuby::Build.current + current.build_config_initializer = block + gems << current cxx_srcs = ['src', 'test', 'tools'].map do |subdir| - Dir.glob("#{Gem.current.dir}/#{subdir}/*.{cpp,cxx,cc}") + Dir.glob("#{current.dir}/#{subdir}/*.{cpp,cxx,cc}") end.flatten enable_cxx_exception unless cxx_srcs.empty? - Gem.current + current end def load_special_path_gem(params) diff --git a/lib/mruby/gem.rb b/lib/mruby/gem.rb index 6fcaad9c1..d4b43b094 100644 --- a/lib/mruby/gem.rb +++ b/lib/mruby/gem.rb @@ -47,12 +47,14 @@ module MRuby @version = "0.0.0" @mrblib_dir = "mrblib" @objs_dir = "src" + @dependencies = [] + @conflicts = [] MRuby::Gem.current = self end def setup return if defined?(@linker) # return if already set up - + MRuby::Gem.current = self MRuby::Build::COMMANDS.each do |command| instance_variable_set("@#{command}", @build.send(command).clone) @@ -75,7 +77,6 @@ module MRuby @bins = [] @requirements = [] - @dependencies, @conflicts = [], [] @export_include_paths = [] @export_include_paths << "#{dir}/include" if File.directory? "#{dir}/include" @@ -174,7 +175,7 @@ module MRuby def generate_gem_init(fname) open(fname, 'w') do |f| print_gem_init_header f - build.mrbc.run f, rbfiles, "gem_mrblib_irep_#{funcname}" unless rbfiles.empty? + build.mrbc.run f, rbfiles, "gem_mrblib_#{funcname}_proc" 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[] @@ -183,7 +184,7 @@ module MRuby f.puts %Q[ struct REnv *e;] unless rbfiles.empty? f.puts %Q[ mrb_#{funcname}_gem_init(mrb);] if objs != [objfile("#{build_dir}/gem_init")] unless rbfiles.empty? - f.puts %Q[ mrb_load_irep(mrb, gem_mrblib_irep_#{funcname});] + f.puts %Q[ mrb_load_proc(mrb, gem_mrblib_#{funcname}_proc);] f.puts %Q[ if (mrb->exc) {] f.puts %Q[ mrb_print_error(mrb);] f.puts %Q[ mrb_close(mrb);] @@ -215,10 +216,13 @@ module MRuby def print_gem_init_header(f) print_gem_comment(f) - f.puts %Q[#include <stdlib.h>] unless rbfiles.empty? - f.puts %Q[#include <mruby.h>] - f.puts %Q[#include <mruby/irep.h>] unless rbfiles.empty? - f.puts %Q[#include <mruby/proc.h>] unless rbfiles.empty? + unless rbfiles.empty? + f.puts %Q[#include <stdlib.h>] + f.puts %Q[#include <mruby.h>] + f.puts %Q[#include <mruby/proc.h>] + else + f.puts %Q[#include <mruby.h>] + end end def print_gem_test_header(f) @@ -226,7 +230,7 @@ module MRuby f.puts %Q[#include <stdio.h>] f.puts %Q[#include <stdlib.h>] f.puts %Q[#include <mruby.h>] - f.puts %Q[#include <mruby/irep.h>] + f.puts %Q[#include <mruby/proc.h>] f.puts %Q[#include <mruby/variable.h>] f.puts %Q[#include <mruby/hash.h>] unless test_args.empty? end diff --git a/lib/mruby/lockfile.rb b/lib/mruby/lockfile.rb index 0d2455b4c..5d4313649 100644 --- a/lib/mruby/lockfile.rb +++ b/lib/mruby/lockfile.rb @@ -26,7 +26,7 @@ module MRuby end def instance - @instance ||= new("#{MRUBY_CONFIG}.lock") + @instance ||= new("#{MRUBY_ROOT}/build/#{MRUBY_TARGET}.lock") end end @@ -39,7 +39,7 @@ module MRuby end def write - locks = {"mruby_version" => mruby} + locks = {"mruby" => mruby} locks["builds"] = @builds if @builds File.write(@filename, YAML.dump(locks)) end |
