summaryrefslogtreecommitdiffhomepage
path: root/tasks/bin.rake
diff options
context:
space:
mode:
Diffstat (limited to 'tasks/bin.rake')
-rw-r--r--tasks/bin.rake35
1 files changed, 35 insertions, 0 deletions
diff --git a/tasks/bin.rake b/tasks/bin.rake
new file mode 100644
index 000000000..afef065a1
--- /dev/null
+++ b/tasks/bin.rake
@@ -0,0 +1,35 @@
+install_task = ->(src) do
+ dst = "#{MRuby::Build.install_dir}/#{File.basename(src)}"
+ file dst => src do
+ install_D src, dst
+ end
+ dst
+end
+
+MRuby.each_target do |build|
+ if build.host? && build.mrbc_build && !build.gems["mruby-bin-mrbc"]
+ exe = build.exefile("#{build.mrbc_build.build_dir}/bin/mrbc")
+ build.products << install_task.(exe)
+ end
+
+ build.bins.each do |bin|
+ exe = build.exefile("#{build.build_dir}/bin/#{bin}")
+ build.products << (build.host? ? install_task.(exe) : exe)
+ end
+
+ linker_attrs = build.gems.map{|gem| gem.linker.run_attrs}.transpose
+ build.gems.each do |gem|
+ gem.bins.each do |bin|
+ exe = build.exefile("#{build.build_dir}/bin/#{bin}")
+ objs = Dir["#{gem.dir}/tools/#{bin}/*.{c,cpp,cxx,cc}"].map do |f|
+ build.objfile(f.pathmap("#{gem.build_dir}/tools/#{bin}/%n"))
+ end
+
+ file exe => objs.concat(build.libraries) do |t|
+ build.linker.run t.name, t.prerequisites, *linker_attrs
+ end
+
+ build.products << (build.host? ? install_task.(exe) : exe)
+ end
+ end
+end