@@ -9,6 +9,14 @@ def initialize(srcdir, toolchain, name: nil)
9
9
@name = name || File . basename ( srcdir )
10
10
end
11
11
12
+ def product_build_dir ( crossruby )
13
+ File . join ( crossruby . ext_build_dir , lib )
14
+ end
15
+
16
+ def linklist ( crossruby )
17
+ File . join ( product_build_dir ( crossruby ) , "link.filelist" )
18
+ end
19
+
12
20
def define_task ( crossruby )
13
21
task "#{ crossruby . name } -ext-#{ @name } " => [ crossruby . configure ] do
14
22
make_args = [ ]
@@ -19,7 +27,7 @@ def define_task(crossruby)
19
27
20
28
lib = @name
21
29
source = crossruby . source
22
- objdir = " #{ crossruby . ext_build_dir } / #{ lib } "
30
+ objdir = product_build_dir crossruby
23
31
FileUtils . mkdir_p objdir
24
32
extconf_args = [
25
33
"--disable=gems" ,
@@ -45,9 +53,9 @@ def define_task(crossruby)
45
53
make_cmd = %Q(make -C "#{ objdir } " #{ make_args . join ( " " ) } static)
46
54
sh make_cmd
47
55
# A ext can provide link args by link.filelist. It contains only built archive file by default.
48
- unless File . exist? ( " #{ objdir } /link.filelist" )
56
+ unless File . exist? ( linklist ( crossruby ) )
49
57
File . write (
50
- " #{ objdir } /link.filelist" ,
58
+ linklist ( crossruby ) ,
51
59
Dir . glob ( "#{ objdir } /*.a" ) . join ( "\n " )
52
60
)
53
61
end
@@ -89,11 +97,10 @@ def define_task
89
97
90
98
user_ext_products = @params . user_exts
91
99
user_ext_tasks = user_ext_products . map { |prod | prod . define_task ( self ) }
92
- user_ext_names = user_ext_products . map ( &:name )
93
100
extinit_task =
94
101
task extinit_obj => [ @configure , extinit_c_erb ] + user_ext_tasks do
95
102
mkdir_p File . dirname ( extinit_obj )
96
- sh %Q(ruby #{ extinit_c_erb } #{ user_ext_names . join ( " " ) } | #{ toolchain . cc } -c -x c - -o #{ extinit_obj } )
103
+ sh %Q(ruby #{ extinit_c_erb } #{ user_ext_products . map ( & :name ) . join ( " " ) } | #{ toolchain . cc } -c -x c - -o #{ extinit_obj } )
97
104
end
98
105
99
106
install =
@@ -201,7 +208,7 @@ def configure_args(build_triple, toolchain)
201
208
end
202
209
203
210
( user_exts || [ ] ) . each do |lib |
204
- xldflags << "@#{ ext_build_dir } / #{ lib . name } /link.filelist "
211
+ xldflags << "@#{ lib . linklist ( self ) } "
205
212
end
206
213
xldflags << extinit_obj
207
214
0 commit comments