summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMasaki Muranaka <[email protected]>2013-03-07 14:18:42 +0900
committerMasaki Muranaka <[email protected]>2013-03-07 14:23:26 +0900
commitcb2ad2c439faa832a6b3a51e8933ec00047e2edf (patch)
tree7af963b94b8fe6757c6d808ac92271499e14ce81
parent83c5274a71ea7fc40427029033edc99224e008e0 (diff)
downloadmruby-cb2ad2c439faa832a6b3a51e8933ec00047e2edf.tar.gz
mruby-cb2ad2c439faa832a6b3a51e8933ec00047e2edf.zip
Add Support to build loadable modules defined in mrbgems.
-rw-r--r--Rakefile24
-rw-r--r--tasks/mrbgem_spec.rake5
-rw-r--r--tasks/mruby_build.rake5
3 files changed, 32 insertions, 2 deletions
diff --git a/Rakefile b/Rakefile
index 633c50385..b910e824a 100644
--- a/Rakefile
+++ b/Rakefile
@@ -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
diff --git a/tasks/mrbgem_spec.rake b/tasks/mrbgem_spec.rake
index 5b01bc79b..6a8eafcae 100644
--- a/tasks/mrbgem_spec.rake
+++ b/tasks/mrbgem_spec.rake
@@ -28,6 +28,9 @@ module MRuby
attr_accessor :test_objs, :test_rbfiles, :test_args
attr_accessor :test_preload
+ attr_accessor :bins
+ alias :bin= :bins=
+
attr_block MRuby::Build::COMMANDS
def initialize(name, &block)
@@ -59,6 +62,8 @@ module MRuby
@test_preload = 'test/assert.rb'
@test_args = {}
+ @bins = []
+
instance_eval(&@initializer)
if !name || !licenses || !authors
diff --git a/tasks/mruby_build.rake b/tasks/mruby_build.rake
index 812e861a7..10125701e 100644
--- a/tasks/mruby_build.rake
+++ b/tasks/mruby_build.rake
@@ -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 "================================================"