mcbuild 0.0.2 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mcbuild.rb +260 -46
  3. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d03e006b39df85a4b20ab9cff5c7c17a8095eaf6
4
- data.tar.gz: b1d8eab810e08e537a93e2f29e2529c91af0519e
3
+ metadata.gz: 7ea4f037ff215ebdc917095027295ba8645fa663
4
+ data.tar.gz: 365c341ebb2cb8e3ec15de40df0153357045ef5a
5
5
  SHA512:
6
- metadata.gz: 9aa4bb7ad57e55b39dae7c3d0f0f67af627ac2f2075ee8c305900f1e6a21eca13356284807ff97e998e2151d5ef5372d9a0b0c839735f1bad7e705d404767b57
7
- data.tar.gz: 7d4f190d9b5c4e1a31b0019e8400a53f01dbeb4670c9d1eb5e420cd3869a863f034e8de93a6cfa699e69ad1df8f81af27c916d79768892a3af962904006c4579
6
+ metadata.gz: c7c3c6fd1cd9c50dd488571260af948e506d0da9039f42b749f3baa9fa15ac0be5ead7baa6b85248d360a088270881f7e82a022e515e1f12001c7c5e281e40a9
7
+ data.tar.gz: 7de5707dd0149b7f81b93118974447c0a6fc6223a839d5f32a09e7231f395b5b217dbe08eaa49b579b2b70fcf30189b0f684e2a2911cd7973c00ba31cfc5b6db
data/lib/mcbuild.rb CHANGED
@@ -2,37 +2,148 @@
2
2
  require 'find'
3
3
  require 'fileutils'
4
4
 
5
+ class MCConfig
6
+ def self.x86_64
7
+ 'x86_64'
8
+ end
9
+
10
+ def self.armv6
11
+ 'armv6'
12
+ end
13
+
14
+ def self.armv7
15
+ 'armv7'
16
+ end
17
+
18
+ def self.armv7s
19
+ 'armv7s'
20
+ end
21
+
22
+ def self.arm64
23
+ 'arm64'
24
+ end
25
+
26
+ def self.c89
27
+ 'c89'
28
+ end
29
+
30
+ def self.c99
31
+ 'c99'
32
+ end
33
+ end
34
+
5
35
  class MCBuild
36
+ def self.noArgs(valid_args)
37
+ ARGV.each { |arg|
38
+ valid_args.each { |va|
39
+ if va == arg
40
+ return
41
+ end
42
+ }
43
+ }
44
+ yield valid_args
45
+ end
46
+
47
+ def self.printArgs(valid_args)
48
+ ARGV.each { |arg|
49
+ valid_args.each { |va|
50
+ if va == arg
51
+ return
52
+ end
53
+ }
54
+ }
55
+ puts "usage:"
56
+ valid_args.each { |arg|
57
+ puts "./build.rb #{arg}"
58
+ }
59
+ end
60
+
6
61
  def self.waitArg(arg)
7
62
  ARGV.each do |_arg|
8
63
  if _arg==arg
9
- yield
10
- else
11
- puts "usage: ./script.rb #{arg}"
64
+ yield
12
65
  end
13
66
  end
14
67
  end
15
68
 
16
- def remove_slash(str)
17
- if str=='./'
18
- @d = '.'
19
- else
20
- @d = str
69
+ def self.clean(path)
70
+ begin
71
+ FileUtils.rm_rf(path)
72
+ rescue Exception => e
73
+ puts e
21
74
  end
22
75
  end
23
76
 
24
- def initialize(dir, fext=".c", oext=".o", aext=".a",
25
- mach="x86_64", std="c99",
26
- outpath="_build")
77
+ #remove the last slash from path
78
+ def remove_slash(str)
79
+ arr = str.split('/')
80
+ ret = arr.first
81
+ arr.delete_at(0)
82
+ arr.each { |s|
83
+ if s != ''
84
+ ret += "/#{s}"
85
+ end
86
+ }
87
+ ret
88
+ end
89
+
90
+ def initialize(dir)
91
+ @d = remove_slash(dir)
92
+ @headers = []
93
+ @name = "mcdefault"
94
+ @fext = ".c"
95
+ @oext = ".o"
96
+ @aext = ".a"
97
+ @mach = "x86_64"
98
+ @std = "c99"
99
+ @flags = ""
100
+ @outpath = "_build"
101
+ @excludes = []
102
+ @dependency = []
103
+
104
+ @compile_arg = " -I#{@d}/#{@outpath}/archive"
105
+ @link_arg = " -L#{@d}/#{@outpath}/archive"
106
+ end
27
107
 
28
- remove_slash(dir)
108
+ def export_path
109
+ "#{@d}/#{@outpath}/archive"
110
+ end
29
111
 
112
+ def name
113
+ @name
114
+ end
115
+
116
+ def headers
117
+ @headers
118
+ end
119
+
120
+ def excludes
121
+ @excludes
122
+ end
123
+
124
+ def set_headers(headers)
125
+ @headers = headers
126
+ self
127
+ end
128
+
129
+ def set_name(name)
130
+ @name = name
131
+ self
132
+ end
133
+
134
+ def set_fext(fext)
30
135
  @fext = fext
136
+ self
137
+ end
138
+
139
+ def set_oext(oext)
31
140
  @oext = oext
141
+ self
142
+ end
143
+
144
+ def set_aext(aext)
32
145
  @aext = aext
33
- @mach = mach
34
- @std = std
35
- @outpath = outpath
146
+ self
36
147
  end
37
148
 
38
149
  def set_arch(arch)
@@ -40,94 +151,197 @@ class MCBuild
40
151
  self
41
152
  end
42
153
 
154
+ def set_std(std)
155
+ @std = std
156
+ self
157
+ end
158
+
159
+ def set_flags(flags)
160
+ @flags = flags
161
+ self
162
+ end
163
+
164
+ def set_outpath(outpath)
165
+ @outpath = outpath
166
+ self
167
+ end
168
+
169
+ def set_excludes(excludes)
170
+ @excludes = Array.new(excludes)
171
+ self
172
+ end
173
+
43
174
  def info
44
175
  puts "Monk-C compiler use settings:"
45
176
  puts "--------------------------------"
46
177
  puts " CPU Arch -> #{@mach}"
47
178
  puts " C standard -> #{@std}"
179
+ puts " name -> #{@name}"
48
180
  puts " filename extension -> #{@fext}"
49
181
  puts " output extension -> #{@oext}"
50
182
  puts " archive extension -> #{@aext}"
183
+ puts " compile flags -> #{@flags}"
184
+ puts " source dir -> #{@d}"
185
+ puts " export dir -> #{self.export_path}"
186
+ puts " excludes -> #{self.excludes}"
51
187
  puts "--------------------------------"
52
188
  puts "C compiler infos:"
53
189
  puts "--------------------------------"
54
190
  system("cc --version")
55
191
  puts "--------------------------------"
192
+ self
56
193
  end
57
194
 
58
195
  def clean
196
+ MCBuild.clean("#{@d}/#{@outpath}")
197
+ self
198
+ end
199
+
200
+ def prepare
59
201
  begin
60
202
  FileUtils.rm_rf("#{@d}/#{@outpath}")
203
+ FileUtils.mkdir_p "#{@d}/#{@outpath}/archive"
204
+ if @headers.count != 0
205
+ self.copy_headers
206
+ else
207
+ self.copy_headers_all
208
+ end
61
209
  rescue Exception => e
62
210
  puts e
63
211
  end
212
+ self
64
213
  end
65
214
 
66
- def prepare(libpath=[], libs=[])
67
- @compile_arg = " -I#{@d}/#{@outpath}/archive"
68
- @link_arg = " -L#{@d}/#{@outpath}/archive"
215
+ def set_dependency(libs=[])
216
+ libs.each { |lib|
217
+ path = lib.export_path
218
+ name = lib.name
69
219
 
70
- libpath.each { |path|
71
220
  @compile_arg += " -I#{path}"
72
- @link_arg += " -L#{path}"
73
- }
74
-
75
- libs.each { |lib|
76
- @link_arg += " -l#{lib}"
221
+ @link_arg += " -L#{path}"
222
+ @link_arg += " -l#{name}"
77
223
  }
78
-
79
224
  @link_arg += @compile_arg
225
+ self
226
+ end
80
227
 
228
+ def prehash(string)
229
+ self
230
+ end
231
+
232
+ def copy_headers
81
233
  begin
82
- FileUtils.rm_rf("#{@d}/#{@outpath}")
83
- FileUtils.mkdir_p "#{@d}/#{@outpath}/archive"
234
+ Find.find(@d) { |header|
235
+ base = File.basename(header)
236
+ if @headers.include? base
237
+ puts "copying-> #{header}"
238
+ FileUtils.cp("#{header}", "#{@d}/#{@outpath}/archive")
239
+ end
240
+ }
84
241
  rescue Exception => e
85
242
  puts e
86
243
  end
244
+ self
87
245
  end
88
246
 
89
- def prehash(string)
90
-
91
- end
92
-
93
- def copy_headers(headers)
247
+ def copy_headers_all(except=[])
94
248
  begin
95
- headers.each { |header|
96
- puts "copying-> #{@d}/#{header}"
97
- FileUtils.cp("#{@d}/#{header}", "#{@d}/#{@outpath}/archive")
249
+ Find.find(@d) { |header|
250
+ ext = File.extname(header)
251
+ base = File.basename(header)
252
+ if (ext == ".h") && (!header.include? self.export_path)
253
+ if (except != nil) && (except.include? base)
254
+ puts "except: #{base}"
255
+ else
256
+ puts "copying-> #{header}"
257
+ FileUtils.cp("#{header}", self.export_path)
258
+ end
259
+ end
98
260
  }
99
261
  rescue Exception => e
100
262
  puts e
101
263
  end
264
+ self
102
265
  end
103
266
 
104
267
  def compile_file(file)
105
268
  base = File.basename(file, ".c")
106
- cmd = "cc -arch #{@mach} -std=#{@std} -c -o #{@d}/#{@outpath}/#{base}#{@oext} #{file} #{@compile_arg}"
269
+ cmd = "cc -arch #{@mach} -std=#{@std} #{@flags} -c -o #{@d}/#{@outpath}/#{base}#{@oext} #{file} #{@compile_arg}"
107
270
  puts(cmd)
108
271
  system(cmd)
272
+ self
109
273
  end
110
274
 
111
- def compile(path=@d)
112
- Find.find(path) { |file|
113
- if File.extname(file) == ".c" || File.extname(file) == ".asm"
114
- compile_file(file)
115
- end
116
- }
275
+ def compile
276
+ self.clean
277
+ self.prepare
278
+ begin
279
+ Find.find(@d) { |file|
280
+ ext = File.extname(file)
281
+ base = File.basename(file)
282
+ if ext == ".c" || ext == ".asm" || ext == ".S"
283
+ if (@excludes != nil) && (@excludes.include? base)
284
+ puts "exclude: #{base}"
285
+ else
286
+ compile_file(file)
287
+ end
288
+ end
289
+ }
290
+ rescue Exception => e
291
+ puts "Error[#{@d}]: " + e.to_s
292
+ end
293
+ self
117
294
  end
118
295
 
119
- def archive_lib(name)
120
- cmd = "ar -r #{@d}/#{@outpath}/archive/#{name} #{@d}/#{@outpath}/*#{@oext}"
296
+ def archive_lib
297
+ cmd = "ar -r #{@d}/#{@outpath}/archive/lib#{@name}#{@aext} #{@d}/#{@outpath}/*#{@oext}"
121
298
  puts(cmd)
122
299
  system(cmd)
300
+ self
123
301
  end
124
302
 
125
- def archive_exe(name)
126
- cmd = "cc -o #{@d}/#{@outpath}/archive/#{name} #{@d}/#{@outpath}/*#{@oext} #{@link_arg}"
303
+ def archive_exe
304
+ cmd = "cc -o #{@d}/#{@outpath}/archive/#{@name} #{@d}/#{@outpath}/*#{@oext} #{@link_arg}"
127
305
  puts(cmd)
128
306
  system(cmd)
307
+ self
308
+ end
309
+
310
+ def run
311
+ system("#{self.export_path}/#{name}")
312
+ end
313
+
314
+ def done
315
+ puts "---------- build finished ----------"
316
+ puts "#{self.export_path}/#{name}"
129
317
  end
130
318
  end
131
319
 
320
+ #test area
321
+ =begin
322
+ runt = MCBuild.new('../../../mcruntime')
323
+ .set_name("monkc")
324
+ .set_headers(["monkc.h"])
325
+ .set_excludes(["MCNonLock.S"])
326
+ .info
327
+ .compile
328
+ .archive_lib
329
+
330
+ lmt = MCBuild.new('../../../lemontea')
331
+ .set_name("lemontea")
332
+ .set_dependency([runt])
333
+ .info
334
+ .compile
335
+ .archive_lib
336
+
337
+ exp = MCBuild.new('../../../example')
338
+ .set_name("exp")
339
+ .set_dependency([runt, lmt])
340
+ .info
341
+ .compile
342
+ .archive_exe
343
+ .run
344
+ =end
345
+
132
346
 
133
347
 
metadata CHANGED
@@ -1,23 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mcbuild
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sun Yuli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-20 00:00:00.000000000 Z
11
+ date: 2016-09-10 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: 'find docs here: https://github.com/sunpaq/mcbuild'
13
+ description:
14
14
  email: sunpaq@gmail.com
15
15
  executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
19
  - lib/mcbuild.rb
20
- homepage: https://github.com/sunpaq/mcbuild
20
+ homepage: https://github.com/sunpaq
21
21
  licenses:
22
22
  - BSD
23
23
  metadata: {}