mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
7c469c0b9d
Tested CRuby 1.8.6 and 1.9.3 You can see building configuration in build_config.rb
42 lines
1.1 KiB
Ruby
42 lines
1.1 KiB
Ruby
def get_dependencies(file)
|
|
file = file.pathmap('%n.d') unless File.extname(file) == '.d'
|
|
if File.exists?(file)
|
|
File.read(file).gsub("\\\n ", "").scan(/^\S+:\s+(.+)$/).flatten.map {|s| s.split(' ') }.flatten
|
|
else
|
|
[]
|
|
end
|
|
end
|
|
|
|
MRuby.each_target do |t|
|
|
obj_matcher = Regexp.new("^#{build_dir}/(.*)\\.o$")
|
|
{
|
|
'.c' => proc { |t| compile_c t.name, t.prerequisites.first },
|
|
'.cpp' => proc { |t| compile_cxx t.name, t.prerequisites.first },
|
|
'.m' => proc { |t| compile_objc t.name, t.prerequisites.first },
|
|
'.S' => proc { |t| compile_asm t.name, t.prerequisites.first }
|
|
}.each do |ext, compile|
|
|
rule obj_matcher => [
|
|
proc { |file|
|
|
file.sub(obj_matcher, "\\1#{ext}")
|
|
},
|
|
proc { |file|
|
|
get_dependencies(file)
|
|
}] do |t|
|
|
FileUtils.mkdir_p File.dirname(t.name)
|
|
compile.call t
|
|
end
|
|
|
|
rule obj_matcher => [
|
|
proc { |file|
|
|
file.sub(obj_matcher, "#{build_dir}/\\1#{ext}")
|
|
},
|
|
proc { |file|
|
|
get_dependencies(file)
|
|
}] do |t|
|
|
FileUtils.mkdir_p File.dirname(t.name)
|
|
compile.call t
|
|
end
|
|
end
|
|
end
|
|
|