summaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/mruby/build.rb35
-rw-r--r--lib/mruby/build/command.rb4
-rw-r--r--lib/mruby/build/load_gems.rb13
-rw-r--r--lib/mruby/gem.rb22
-rw-r--r--lib/mruby/lockfile.rb4
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