mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Compile mruby compiler as mrbgem.
Compiler codes is moved to "mruby-compiler". Executable `mrbc` is moved to "mruby-bin-mrbc".
This commit is contained in:
committed by
Yukihiro "Matz" Matsumoto
parent
214bc3c95a
commit
6460ef77bc
+2
-61
@@ -3,76 +3,17 @@ MRuby.each_target do
|
||||
relative_from_root = File.dirname(__FILE__).relative_path_from(MRUBY_ROOT)
|
||||
current_build_dir = "#{build_dir}/#{relative_from_root}"
|
||||
|
||||
lex_def = "#{current_dir}/lex.def"
|
||||
objs = Dir.glob("#{current_dir}/*.c").map { |f|
|
||||
next nil if cxx_abi_enabled? and f =~ /(codegen|error|vm).c$/
|
||||
next nil if cxx_abi_enabled? and f =~ /(error|vm).c$/
|
||||
objfile(f.pathmap("#{current_build_dir}/%n"))
|
||||
}.compact
|
||||
|
||||
if cxx_abi_enabled?
|
||||
cxx_abi_dependency = %w(codegen error vm)
|
||||
cxx_abi_objs = cxx_abi_dependency.map { |v|
|
||||
src = "#{current_build_dir}/#{v}.cxx"
|
||||
file src => ["#{current_dir}/#{v}.c", __FILE__] do |t|
|
||||
File.open(t.name, 'w') do |f|
|
||||
f.write <<EOS
|
||||
#define __STDC_CONSTANT_MACROS
|
||||
#define __STDC_LIMIT_MACROS
|
||||
|
||||
extern "C" {
|
||||
#include "#{MRUBY_ROOT}/#{t.prerequisites.first}"
|
||||
}
|
||||
|
||||
|
||||
#{v == 'error'? 'mrb_int mrb_jmpbuf::jmpbuf_id = 0;' : ''}
|
||||
EOS
|
||||
end
|
||||
end
|
||||
|
||||
file objfile(src) => src do |t|
|
||||
cxx.run t.name, t.prerequisites.first, [], [current_dir]
|
||||
end
|
||||
|
||||
objfile src
|
||||
}
|
||||
cxx_abi_objs << objfile("#{current_build_dir}/y.tab")
|
||||
|
||||
file "#{current_build_dir}/y.tab.cxx" => ["#{current_build_dir}/y.tab.c", __FILE__] do |t|
|
||||
File.open(t.name, 'w') do |f|
|
||||
f.write <<EOS
|
||||
#define __STDC_CONSTANT_MACROS
|
||||
#define __STDC_LIMIT_MACROS
|
||||
|
||||
extern "C" {
|
||||
#include "#{t.prerequisites.first}"
|
||||
}
|
||||
EOS
|
||||
end
|
||||
end
|
||||
file objfile("#{current_build_dir}/y.tab") => ["#{current_build_dir}/y.tab.cxx", lex_def] do |t|
|
||||
cxx.run t.name, t.prerequisites.first, [], [current_dir]
|
||||
end
|
||||
|
||||
objs += cxx_abi_objs
|
||||
else
|
||||
objs += [objfile("#{current_build_dir}/y.tab")]
|
||||
file objfile("#{current_build_dir}/y.tab") => ["#{current_build_dir}/y.tab.c", lex_def] do |t|
|
||||
cc.run t.name, t.prerequisites.first, [], [current_dir]
|
||||
end
|
||||
objs += %w(vm error).map { |v| compile_as_cxx "#{current_dir}/#{v}.c", "#{current_build_dir}/#{v}.cxx" }
|
||||
end
|
||||
self.libmruby << objs
|
||||
|
||||
file libfile("#{build_dir}/lib/libmruby_core") => objs do |t|
|
||||
archiver.run t.name, t.prerequisites
|
||||
end
|
||||
|
||||
# Parser
|
||||
file "#{current_build_dir}/y.tab.c" => ["#{current_dir}/parse.y"] do |t|
|
||||
yacc.run t.name, t.prerequisites.first
|
||||
end
|
||||
|
||||
# Lexical analyzer
|
||||
file lex_def => "#{current_dir}/keywords" do |t|
|
||||
gperf.run t.name, t.prerequisites.first
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user