summaryrefslogtreecommitdiffhomepage
path: root/tasks/bin.rake
blob: afef065a1b44b522380f0bc44bea109ae7f84798 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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