summaryrefslogtreecommitdiffhomepage
path: root/tasks
diff options
context:
space:
mode:
authortake_cheeze <[email protected]>2015-04-06 15:20:13 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2015-06-01 21:53:55 +0900
commit6460ef77bcceb17d80d1b46a07b28fada19737c8 (patch)
tree802d327b0efbe1ed9ed1a1109657e23705b4f89f /tasks
parent214bc3c95a9e01a7be4d76e94d80be9d9d59bd4b (diff)
downloadmruby-6460ef77bcceb17d80d1b46a07b28fada19737c8.tar.gz
mruby-6460ef77bcceb17d80d1b46a07b28fada19737c8.zip
Compile mruby compiler as mrbgem.
Compiler codes is moved to "mruby-compiler". Executable `mrbc` is moved to "mruby-bin-mrbc".
Diffstat (limited to 'tasks')
-rw-r--r--tasks/mruby_build.rake41
1 files changed, 39 insertions, 2 deletions
diff --git a/tasks/mruby_build.rake b/tasks/mruby_build.rake
index 66608286d..50bed0fbe 100644
--- a/tasks/mruby_build.rake
+++ b/tasks/mruby_build.rake
@@ -80,7 +80,7 @@ module MRuby
@git = Command::Git.new(self)
@mrbc = Command::Mrbc.new(self)
- @bins = %w(mrbc)
+ @bins = []
@gems, @libmruby = MRuby::Gem::List.new, []
@build_mrbtest_lib_only = false
@cxx_abi_enabled = false
@@ -92,6 +92,8 @@ module MRuby
MRuby::Build.current = MRuby.targets[@name]
MRuby.targets[@name].instance_eval(&block)
+
+ build_mrbc_exec if name == 'host'
end
def enable_debug
@@ -119,6 +121,33 @@ module MRuby
@cxx_abi_enabled = true
end
+ def compile_as_cxx src, cxx_src, obj = nil, includes = []
+ src = File.absolute_path src
+ cxx_src = File.absolute_path cxx_src
+ obj = objfile(cxx_src) if obj.nil?
+
+ file cxx_src => [src, __FILE__] do |t|
+ File.open(t.name, 'w') do |f|
+ f.write <<EOS
+#define __STDC_CONSTANT_MACROS
+#define __STDC_LIMIT_MACROS
+
+extern "C" {
+#include "#{src}"
+}
+
+#{File.basename(src) == 'error.c'? 'mrb_int mrb_jmpbuf::jmpbuf_id = 0;' : ''}
+EOS
+ end
+ end
+
+ file obj => cxx_src do |t|
+ cxx.run t.name, t.prerequisites.first, [], ["#{MRUBY_ROOT}/src"] + includes
+ end
+
+ obj
+ end
+
def enable_bintest
@enable_bintest = true
end
@@ -142,8 +171,16 @@ module MRuby
MRUBY_ROOT
end
+ def build_mrbc_exec
+ gem :core => 'mruby-bin-mrbc'
+ end
+
def mrbcfile
- MRuby.targets[@name].exefile("#{MRuby.targets[@name].build_dir}/bin/mrbc")
+ 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")
end
def compilers