magica 0.6.0 → 0.7.0

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.
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