Skip to content

Commit e6db8e4

Browse files
Remove rake dependency from crossruby product
To make re-compile simple
1 parent 1baf58c commit e6db8e4

File tree

2 files changed

+61
-70
lines changed

2 files changed

+61
-70
lines changed

lib/ruby_wasm/build_system/product/crossruby.rb

Lines changed: 44 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
require "rake"
21
require_relative "./product"
32

43
module RubyWasm
@@ -28,17 +27,15 @@ def make_args(crossruby)
2827
make_args
2928
end
3029

31-
def define_task(crossruby)
32-
task "#{crossruby.name}-ext-#{@name}" => [crossruby.configure] do
33-
lib = @name
34-
objdir = product_build_dir crossruby
35-
FileUtils.mkdir_p objdir
36-
do_extconf crossruby
37-
sh %Q(make -C "#{objdir}" #{make_args(crossruby).join(" ")} #{lib}.a)
38-
# A ext can provide link args by link.filelist. It contains only built archive file by default.
39-
unless File.exist?(linklist(crossruby))
40-
File.write(linklist(crossruby), Dir.glob("#{objdir}/*.a").join("\n"))
41-
end
30+
def build(crossruby)
31+
lib = @name
32+
objdir = product_build_dir crossruby
33+
FileUtils.mkdir_p objdir
34+
do_extconf crossruby
35+
FileUtils.sh %Q(make -C "#{objdir}" #{make_args(crossruby).join(" ")} #{lib}.a)
36+
# A ext can provide link args by link.filelist. It contains only built archive file by default.
37+
unless File.exist?(linklist(crossruby))
38+
File.write(linklist(crossruby), Dir.glob("#{objdir}/*.a").join("\n"))
4239
end
4340
end
4441

@@ -66,19 +63,19 @@ def do_extconf(crossruby)
6663
"-I#{crossruby.build_dir}"
6764
]
6865
# Clear RUBYOPT to avoid loading unrelated bundle setup
69-
sh ({ "RUBYOPT" => "" }),
70-
"#{crossruby.baseruby_path} #{extconf_args.join(" ")}",
71-
chdir: objdir
66+
FileUtils.sh ({ "RUBYOPT" => "" }),
67+
"#{crossruby.baseruby_path} #{extconf_args.join(" ")}",
68+
chdir: objdir
7269
end
7370

7471
def do_install_rb(crossruby)
7572
objdir = product_build_dir crossruby
76-
sh %Q(make -C "#{objdir}" #{make_args(crossruby).join(" ")} install-rb)
73+
FileUtils.sh %Q(make -C "#{objdir}" #{make_args(crossruby).join(" ")} install-rb)
7774
end
7875
end
7976

8077
class CrossRubyProduct < AutoconfProduct
81-
attr_reader :source, :toolchain, :build, :configure, :install_task
78+
attr_reader :source, :toolchain
8279
attr_accessor :user_exts,
8380
:wasmoptflags,
8481
:cppflags,
@@ -115,51 +112,39 @@ def initialize(
115112
super(@params.target, @toolchain)
116113
end
117114

118-
def define_task
119-
directory dest_dir
120-
directory build_dir
121-
122-
@configure =
123-
task "#{name}-configure",
124-
[:reconfigure] =>
125-
[build_dir, source.src_dir, source.configure_file] +
126-
dep_tasks do |t, args|
127-
args.with_defaults(reconfigure: false)
128-
129-
if !File.exist?("#{build_dir}/Makefile") || args[:reconfigure]
130-
args = configure_args(RbConfig::CONFIG["host"], toolchain)
131-
sh "#{source.configure_file} #{args.join(" ")}", chdir: build_dir
132-
end
133-
# NOTE: we need rbconfig.rb at configuration time to build user given extensions with mkmf
134-
sh "make rbconfig.rb", chdir: build_dir
135-
end
136-
137-
user_ext_products = @user_exts
138-
user_ext_tasks = @user_exts.map { |prod| prod.define_task(self) }
139-
extinit_task =
140-
task extinit_obj => [@configure, extinit_c_erb] + user_ext_tasks do
141-
mkdir_p File.dirname(extinit_obj)
142-
sh %Q(ruby #{extinit_c_erb} #{@user_exts.map(&:name).join(" ")} | #{toolchain.cc} -c -x c - -o #{extinit_obj})
143-
end
115+
def configure(reconfigure: false)
116+
if !File.exist?("#{build_dir}/Makefile") || reconfigure
117+
args = configure_args(RbConfig::CONFIG["host"], toolchain)
118+
FileUtils.sh "#{source.configure_file} #{args.join(" ")}",
119+
chdir: build_dir
120+
end
121+
# NOTE: we need rbconfig.rb at configuration time to build user given extensions with mkmf
122+
FileUtils.sh "make rbconfig.rb", chdir: build_dir
123+
end
144124

145-
install_dir = File.join(build_dir, "install")
146-
install =
147-
task install_dir => [@configure, extinit_task, dest_dir] do
148-
next if File.exist?(install_dir)
149-
sh "make install DESTDIR=#{install_dir}", chdir: build_dir
150-
end
151-
152-
@install_task =
153-
task artifact => [@configure, install, dest_dir] do
154-
rm_rf dest_dir
155-
cp_r install_dir, dest_dir
156-
@user_exts.each { |ext| ext.do_install_rb(self) }
157-
sh "tar cfz #{artifact} -C rubies #{name}"
158-
end
125+
def build_exts
126+
@user_exts.each { |prod| prod.build(self) }
127+
mkdir_p File.dirname(extinit_obj)
128+
FileUtils.sh %Q(ruby #{extinit_c_erb} #{@user_exts.map(&:name).join(" ")} | #{toolchain.cc} -c -x c - -o #{extinit_obj})
159129
end
160130

161-
def build
162-
@install_task.invoke
131+
def build(remake: false, reconfigure: false)
132+
FileUtils.mkdir_p dest_dir
133+
FileUtils.mkdir_p build_dir
134+
Rake::Task[source.configure_file].invoke
135+
dep_tasks.each(&:invoke)
136+
configure(reconfigure: reconfigure)
137+
build_exts
138+
139+
install_dir = File.join(build_dir, "install")
140+
if !File.exist?(install_dir) || remake || reconfigure
141+
FileUtils.sh "make install DESTDIR=#{install_dir}", chdir: build_dir
142+
end
143+
144+
FileUtils.rm_rf dest_dir
145+
FileUtils.cp_r install_dir, dest_dir
146+
@user_exts.each { |ext| ext.do_install_rb(self) }
147+
FileUtils.sh "tar cfz #{artifact} -C rubies #{name}"
163148
end
164149

165150
def name

lib/ruby_wasm/rake_task.rb

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,29 +55,35 @@ def initialize(
5555
RubyWasm::BuildParams.new(options.merge(name: name, target: @target))
5656

5757
@crossruby =
58-
add_product RubyWasm::CrossRubyProduct.new(
59-
build_params,
60-
@build_dir,
61-
@rubies_dir,
62-
@baseruby,
63-
@source,
64-
@toolchain
65-
)
58+
RubyWasm::CrossRubyProduct.new(
59+
build_params,
60+
@build_dir,
61+
@rubies_dir,
62+
@baseruby,
63+
@source,
64+
@toolchain
65+
)
6666
yield self if block_given?
6767

68-
@products_to_define.each(&:define_task)
68+
@products_to_define&.each(&:define_task)
6969

7070
@crossruby.with_libyaml @libyaml
7171
@crossruby.with_zlib @zlib
7272
@crossruby.with_wasi_vfs @wasi_vfs
7373

74-
@crossruby.define_task
75-
7674
desc "Cross-build Ruby for #{@target}"
7775
task name do
7876
next if @crossruby.built?
7977
@crossruby.build
8078
end
79+
namespace name do
80+
task :remake do
81+
@crossruby.build(remake: true)
82+
end
83+
task :reconfigure do
84+
@crossruby.build(reconfigure: true)
85+
end
86+
end
8187
end
8288

8389
def hexdigest

0 commit comments

Comments
 (0)