magica 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1ae08a14f9afd492220909acfd962936e1641855
4
- data.tar.gz: 56213a62811fa8ba8a92a4348b8a6016eb7bf978
3
+ metadata.gz: 593737f9dbab87cd2a745fbd7a962a8a94fd9a6f
4
+ data.tar.gz: 767d92965831f71b0cb5463490b960a364f4e0de
5
5
  SHA512:
6
- metadata.gz: 993f0eabf1aadd5242157ded0d659dfb73a4c9ac9e86de8e0457d174c9b465fd7225faa2555134ccbfe43730f1201c85d08555b4f840ba1e768d601429da2afe
7
- data.tar.gz: 89f1a0d336136b312ad3c450fb13fcb814aa6bd69ffa0059972342b6463412e8ddc8eec10711f9d979a02f75acf7b918ea4f728381adeb902724e5bbf17d5a7d
6
+ metadata.gz: dd8fd24617cea40b2bda1336d243cd023a83b4e0a5570bd41b41bc4d8257b87097c089881da347338e49ac92dbe39db6e76509c18fd22c6887994b08c37cfbd9
7
+ data.tar.gz: 9eaf19db454b3642663a115667d1211b16209b332ce5bae16257f76d726aa4314b10639b4339f81dddbbb55c407507df651538d3b02f617c66a24bd3e6d2981b
@@ -38,13 +38,13 @@ module Magica
38
38
  end
39
39
 
40
40
  def sort_options(options)
41
- not_applicable_to_capistrano = %w(verbose execute execute-continue libdir no-search rakefile rakelibdir require system no-system where no-deprecation-warnings)
41
+ not_applicable_to_magica = %w(verbose execute execute-continue libdir no-search rakefile rakelibdir require system no-system where no-deprecation-warnings)
42
42
 
43
43
  options.reject! do |(switch, *)|
44
- switch =~ /--#{Regexp.union(not_applicable_to_capistrano)}/
44
+ switch =~ /--#{Regexp.union(not_applicable_to_magica)}/
45
45
  end
46
46
 
47
- super.push(version, clean, clean_all)
47
+ super.push(version, clean, clean_all, target)
48
48
  end
49
49
 
50
50
  def top_level_tasks
@@ -95,5 +95,13 @@ module Magica
95
95
  options.clean_all = true
96
96
  end]
97
97
  end
98
+
99
+ def target
100
+ ["--target", '-t TARGET',
101
+ "Specify the build to use",
102
+ lambda do |_value|
103
+ options.target = _value
104
+ end]
105
+ end
98
106
  end
99
107
  end
data/lib/magica/build.rb CHANGED
@@ -25,6 +25,9 @@ module Magica
25
25
  @dest = (options[:dest] || 'build').to_s
26
26
  @sources = FileList["src/**/*.cpp"]
27
27
  @options = OpenStruct.new(options.merge(Rake.application.options.to_h))
28
+ @default_target = nil
29
+ @config_block = block
30
+ @targets = {}
28
31
 
29
32
  @exe_name = @name
30
33
  @exe_path = "bin"
@@ -48,13 +51,21 @@ module Magica
48
51
  @dependencies = []
49
52
  @static_libraries = []
50
53
 
51
- Magica.targets[@name] = self
52
- Magica.targets[@name].instance_eval(&block) unless block.nil?
53
- Magica.targets[@name].instance_exec(@options, &Magica.default_compile_task)
54
+ Magica.builds[@name] = self
55
+ Magica.builds[@name].instance_eval(&block) unless block.nil?
56
+ Magica.builds[@name].instance_exec(@options, &Magica.default_compile_task)
54
57
 
55
58
  Magica.default_toolchain.setup(self, Magica.toolchain_params) if Magica.default_toolchain
56
59
  end
57
60
 
61
+ def target(name, **options, &block)
62
+ return if block.nil?
63
+ name = name.to_sym
64
+ @targets[name] = block
65
+ @default_target = name if options[:default]
66
+ Target.new("#{@name}:#{name}", @options.to_h.merge({target: name}), &@config_block) if Magica.const_defined?("Target")
67
+ end
68
+
58
69
  def define(name, value = nil)
59
70
  if name.is_a?(Array)
60
71
  name.flatten.map { |n| define(n, value) }
@@ -113,6 +124,10 @@ module Magica
113
124
  @sources = @sources.exclude(*patterns)
114
125
  end
115
126
 
127
+ def include(*patterns)
128
+ @sources = @sources.include(*patterns)
129
+ end
130
+
116
131
  def dest(path)
117
132
  @dest = path.to_s
118
133
  end
@@ -191,21 +206,30 @@ module Magica
191
206
 
192
207
  def compile(source)
193
208
  file objfile(source) => source do |t|
194
- Build.current = Magica.targets[@name]
209
+ Build.current = Magica.builds[@name]
195
210
  @compiler.run t.name, t.prerequisites.first, @defines, @include_paths, @flags
196
211
  end
197
212
  end
198
213
 
199
214
  def link(exec, objects)
200
- desc "Build target #{@name}'s executable file"
201
- task "build:#{@name}" => @dependencies + objects do
202
- Build.current = Magica.targets[@name]
215
+ desc "Build #{@name}'s executable file"
216
+ task "#{@name}" => @dependencies + objects do
217
+ Build.current = Magica.builds[@name]
203
218
  @linker.run "#{exec}", objects + @static_libraries, @libraries, @library_paths, @flags
204
219
  end
205
220
  end
206
221
 
222
+ def do_target(name = nil)
223
+ name ||= @default_target
224
+ return if name.nil?
225
+ target = @targets[name.to_sym]
226
+ @sources.clear_exclude # Reset exclude files
227
+ @exe_name = name.to_s.capitalize
228
+ Magica.builds[@name].instance_eval(&target) unless target.nil?
229
+ end
230
+
207
231
  def build_task(&block)
208
- Magica.targets[@name].instance_eval(@options, &block)
232
+ Magica.builds[@name].instance_eval(@options, &block)
209
233
  end
210
234
  end
211
235
  end
data/lib/magica/magica.rb CHANGED
@@ -2,14 +2,14 @@ module Magica
2
2
  class << self
3
3
  attr_accessor :default_toolchain, :toolchain_params
4
4
 
5
- def targets
6
- @targets ||= {}
5
+ def builds
6
+ @builds ||= {}
7
7
  end
8
8
 
9
- def each_target(&block)
10
- return to_enum(:each_target) if block.nil?
11
- @targets.each do |key, target|
12
- target.instance_eval(&block)
9
+ def each_build(&block)
10
+ return to_enum(:each_build) if block.nil?
11
+ @builds.each do |key, build|
12
+ build.instance_eval(&block)
13
13
  end
14
14
  end
15
15
 
@@ -21,6 +21,8 @@ module Magica
21
21
  proc { |options|
22
22
  clean if options[:clean]
23
23
 
24
+ do_target(options[:target])
25
+
24
26
  objects = objfile(@sources)
25
27
  @sources.each { |source| compile source }
26
28
 
@@ -0,0 +1,23 @@
1
+ include Magica::DSL
2
+
3
+ require "magica/framework"
4
+
5
+ module Magica
6
+ class Target < Build
7
+ def target(name, **options, &block)
8
+ return if block.nil?
9
+ name = name.to_sym
10
+ @targets[name] = block
11
+ @default_target = name if options[:default]
12
+ end
13
+
14
+ def dependency(name, options = {}, &block)
15
+ Dependency.new(name, options, &block)
16
+ task "#{@name}:dependency:#{name}" do |t|
17
+ Dependency[name].build(self)
18
+ end
19
+ @dependencies << "#{@name}:dependency:#{name}"
20
+ @static_libraries.push(*Dependency[name].static_libraries)
21
+ end
22
+ end
23
+ end
@@ -4,8 +4,8 @@ task :_all do |t|
4
4
  if Rake::Task.task_defined?(:all)
5
5
  Rake::Task[:all].invoke
6
6
  else
7
- Magica.each_target do
8
- Rake::Task["build:#{@name}"].invoke
7
+ Magica.each_build do
8
+ Rake::Task["#{@name}"].invoke
9
9
  end
10
10
  end
11
11
  end
@@ -1,4 +1,5 @@
1
1
  require "magica/build"
2
+ require "magica/target"
2
3
 
3
4
  # Define default toolchain
4
5
  # toolchain :gcc
@@ -8,6 +9,18 @@ require "magica/build"
8
9
  build :main, {clean: true} do
9
10
  # define :debug
10
11
  # dynamic_library "sdl2"
12
+
13
+ # dependency :mruby do
14
+ # source "git@github.com:mruby/mruby.git"
15
+ # version "1.2.0"
16
+ # command "./minirake -quiet"
17
+ #
18
+ # static_library "libmruby.a"
19
+ # end
20
+
21
+ # target :test do
22
+ # exclude('src/Main.cpp')
23
+ # end
11
24
  end
12
25
 
13
26
  task :run => "build:main" do
@@ -1,3 +1,3 @@
1
1
  module Magica
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: magica
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - 蒼時弦也
@@ -99,6 +99,7 @@ files:
99
99
  - lib/magica/initialize.rb
100
100
  - lib/magica/magica.rb
101
101
  - lib/magica/package_config.rb
102
+ - lib/magica/target.rb
102
103
  - lib/magica/tasks/build.rake
103
104
  - lib/magica/tasks/framework.rake
104
105
  - lib/magica/tasks/initialize.rake