Commit 9736d44d authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto

Merge pull request #961 from monaka/pr-support-user-defined-loadable-build

Add Support to build loadable modules defined in mrbgems.
parents 2e95f638 a0102317
......@@ -48,6 +48,30 @@ depfiles = MRuby.targets['host'].bins.map do |bin|
install_path
end
MRuby.each_target do
gems.map do | gem |
current_dir = gem.dir.relative_path_from(Dir.pwd)
relative_from_root = gem.dir.relative_path_from(MRUBY_ROOT)
current_build_dir = "#{build_dir}/#{relative_from_root}"
gem.bins.each do | bin |
exec = exefile("#{build_dir}/bin/#{bin}")
objs = Dir.glob("#{current_dir}/tool/#{bin}/*.c").map { |f| objfile(f.pathmap("#{current_build_dir}/tool/#{bin}/%n")) }
file exec => objs + [libfile("#{build_dir}/lib/libmruby")] do |t|
gem_flags = gems.map { |g| g.linker.flags }
gem_flags_before_libraries = gems.map { |g| g.linker.flags_before_libraries }
gem_flags_after_libraries = gems.map { |g| g.linker.flags_after_libraries }
gem_libraries = gems.map { |g| g.linker.libraries }
gem_library_paths = gems.map { |g| g.linker.library_paths }
linker.run t.name, t.prerequisites, gem_libraries, gem_library_paths, gem_flags, gem_flags_before_libraries
end
depfiles += [ exec ]
end
end
end
depfiles += MRuby.targets.reject { |n, t| n == 'host' }.map { |n, t|
[t.libfile("#{t.build_dir}/lib/libmruby")] + t.bins.map { |bin| t.exefile("#{t.build_dir}/bin/#{bin}") }
}.flatten
......
......@@ -28,6 +28,8 @@ module MRuby
attr_accessor :test_objs, :test_rbfiles, :test_args
attr_accessor :test_preload
attr_accessor :bins
attr_block MRuby::Build::COMMANDS
def initialize(name, &block)
......@@ -59,6 +61,8 @@ module MRuby
@test_preload = 'test/assert.rb'
@test_args = {}
@bins = []
instance_eval(&@initializer)
if !name || !licenses || !authors
......@@ -76,6 +80,10 @@ module MRuby
define_gem_init_builder
end
def self.bin=(bin)
@bins = [bin].flatten
end
def build_dir
"#{build.build_dir}/mrbgems/#{name}"
end
......
......@@ -174,8 +174,9 @@ module MRuby
puts " Binaries: #{@bins.join(', ')}" unless @bins.empty?
unless @gems.empty?
puts " Included Gems:"
@gems.map(&:name).each do |name|
puts " #{name}"
@gems.map do |gem|
puts " #{gem.name}"
puts " - Binaries: #{gem.bins.join(', ')}" unless gem.bins.empty?
end
end
puts "================================================"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment