mcbuild 0.0.2 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: {}