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 +4 -4
- data/lib/magica/application.rb +11 -3
- data/lib/magica/build.rb +32 -8
- data/lib/magica/magica.rb +8 -6
- data/lib/magica/target.rb +23 -0
- data/lib/magica/tasks/framework.rake +2 -2
- data/lib/magica/templates/Magicafile +13 -0
- data/lib/magica/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 593737f9dbab87cd2a745fbd7a962a8a94fd9a6f
|
4
|
+
data.tar.gz: 767d92965831f71b0cb5463490b960a364f4e0de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd8fd24617cea40b2bda1336d243cd023a83b4e0a5570bd41b41bc4d8257b87097c089881da347338e49ac92dbe39db6e76509c18fd22c6887994b08c37cfbd9
|
7
|
+
data.tar.gz: 9eaf19db454b3642663a115667d1211b16209b332ce5bae16257f76d726aa4314b10639b4339f81dddbbb55c407507df651538d3b02f617c66a24bd3e6d2981b
|
data/lib/magica/application.rb
CHANGED
@@ -38,13 +38,13 @@ module Magica
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def sort_options(options)
|
41
|
-
|
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(
|
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.
|
52
|
-
Magica.
|
53
|
-
Magica.
|
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.
|
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
|
201
|
-
task "
|
202
|
-
Build.current = Magica.
|
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.
|
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
|
6
|
-
@
|
5
|
+
def builds
|
6
|
+
@builds ||= {}
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
return to_enum(:
|
11
|
-
@
|
12
|
-
|
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
|
@@ -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
|
data/lib/magica/version.rb
CHANGED
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.
|
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
|