magica 0.1.0 → 0.2.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 +4 -4
- data/lib/magica/builder.rb +26 -3
- data/lib/magica/commands/compiler.rb +13 -2
- data/lib/magica/commands/linker.rb +20 -3
- data/lib/magica/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c76457397a26e8c8f5530223241085a5de1ed2cd
|
4
|
+
data.tar.gz: a00d14e584583a1b50774002f0ebe94ea05c5d0c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7acc35bd25b2c8d3c416097a78ae04a47ff813c85eaad74e7ef921406533947ec58f13ea7e62dd89dd40385ef8bc49d65b74c9aa1e14a2df0303acc5d52c2646
|
7
|
+
data.tar.gz: 8518c22efb3a15fbd7834847e1a655b9b05448f25272d0c004e4a5fdc8be0599c091ae569d3b912f00b6bc7094a751f8aa09bc09f80e98b40946af3d48356654
|
data/lib/magica/builder.rb
CHANGED
@@ -13,6 +13,11 @@ module Magica
|
|
13
13
|
@sources = FileList["src/**/*.cpp"]
|
14
14
|
@cxx = Command::Compiler.new(self, %w(.cpp))
|
15
15
|
@linker = Command::Linker.new(self)
|
16
|
+
@defines = %w()
|
17
|
+
@include_paths = %w()
|
18
|
+
@libaries = %w()
|
19
|
+
@libary_paths = %w()
|
20
|
+
@flags = %w()
|
16
21
|
|
17
22
|
Magica.targets[@name] = self
|
18
23
|
Magica.targets[@name].instance_eval(&block) unless block.nil?
|
@@ -20,11 +25,29 @@ module Magica
|
|
20
25
|
Magica.default_toolchain.setup(self, Magica.toolchain_params) if Magica.default_toolchain
|
21
26
|
end
|
22
27
|
|
28
|
+
def define(name)
|
29
|
+
@defines << name.to_s.upcase
|
30
|
+
end
|
31
|
+
|
32
|
+
def include_path(path)
|
33
|
+
@include_paths << path.to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
def flag(flag)
|
37
|
+
@flags << flag.to_s
|
38
|
+
end
|
39
|
+
|
40
|
+
def library(name, path)
|
41
|
+
@libaries << name.to_s
|
42
|
+
@libary_paths << path.to_s
|
43
|
+
end
|
44
|
+
|
23
45
|
def source(path)
|
24
46
|
@sources = FileList[path]
|
25
47
|
end
|
26
48
|
|
27
|
-
def filename
|
49
|
+
def filename(name)
|
50
|
+
'"%s"' % name
|
28
51
|
end
|
29
52
|
|
30
53
|
def exefile(name)
|
@@ -54,13 +77,13 @@ module Magica
|
|
54
77
|
|
55
78
|
def compile(source)
|
56
79
|
file objfile(source) => source do |t|
|
57
|
-
@cxx.run t.name, t.prerequisites.first
|
80
|
+
@cxx.run t.name, t.prerequisites.first, @defines, @include_paths, @flags
|
58
81
|
end
|
59
82
|
end
|
60
83
|
|
61
84
|
def link(exec, objects)
|
62
85
|
task "build:#{@name}" => objects do
|
63
|
-
@linker.run "#{exec}", objects
|
86
|
+
@linker.run "#{exec}", objects, @libaries, @libary_paths, @flags
|
64
87
|
end
|
65
88
|
end
|
66
89
|
end
|
@@ -9,11 +9,22 @@ module Magica
|
|
9
9
|
@flags = [ENV['CFLAGS'] || []]
|
10
10
|
@source_exts = source_exts
|
11
11
|
@compile_options = "%{flags} -o %{outfile} -c %{infile}"
|
12
|
+
@include_paths = ["include"]
|
13
|
+
@defines = %w()
|
14
|
+
|
15
|
+
@option_include_path = "-I%s"
|
16
|
+
@option_defines = "-D%s"
|
17
|
+
end
|
18
|
+
|
19
|
+
def combine_flags(_defines = [], _include_paths = [], _flags = [])
|
20
|
+
define_flags = [@defines, _defines].flatten.map { |define| @option_defines % define }
|
21
|
+
include_path_flags = [@include_paths, _include_paths].flatten.map { |include_path| @option_include_path % filename(include_path) }
|
22
|
+
[define_flags, include_path_flags, _flags].flatten.join(' ')
|
12
23
|
end
|
13
24
|
|
14
|
-
def run(outfile, infile)
|
25
|
+
def run(outfile, infile, _defines = [], _include_paths = [], _flags = [])
|
15
26
|
FileUtils.mkdir_p File.dirname(outfile)
|
16
|
-
_run @compile_options, { outfile: outfile, infile: infile, flags:
|
27
|
+
_run @compile_options, { outfile: outfile, infile: infile, flags: combine_flags(_defines, _include_paths, _flags) }
|
17
28
|
end
|
18
29
|
end
|
19
30
|
end
|
@@ -7,11 +7,28 @@ module Magica
|
|
7
7
|
|
8
8
|
@command = ENV['LD'] || 'ld'
|
9
9
|
@flags = (ENV['LDFLAGS'] || [])
|
10
|
-
@link_options = "%{flags} -o %{outfile} %{objects}"
|
10
|
+
@link_options = "%{flags} -o %{outfile} %{objects} %{libs}"
|
11
|
+
@libaries = []
|
12
|
+
@libary_paths = []
|
13
|
+
|
14
|
+
@option_libary = "-l%s"
|
15
|
+
@option_libary_path = "-L%s"
|
16
|
+
end
|
17
|
+
|
18
|
+
def combine_flags(_library_paths = [], _flags = [])
|
19
|
+
libary_paths = [@libary_paths, _library_paths].flatten.map { |path| @option_libary_path % filename(path) }
|
20
|
+
[flags, libary_paths, _flags].flatten.join(" ")
|
11
21
|
end
|
12
22
|
|
13
|
-
def run(outfile, objects)
|
14
|
-
|
23
|
+
def run(outfile, objects, _libaries = [], _library_paths = [], _flags = [])
|
24
|
+
libary_flags = [@libaries, _libaries].flatten.map { |library| @option_libary % library }
|
25
|
+
|
26
|
+
_run @link_options, {
|
27
|
+
outfile: outfile,
|
28
|
+
objects: objects.join(" "),
|
29
|
+
libs: libary_flags.join(" "),
|
30
|
+
flags: combine_flags(_library_paths, _flags)
|
31
|
+
}
|
15
32
|
end
|
16
33
|
end
|
17
34
|
end
|
data/lib/magica/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: magica
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 蒼時弦也
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09-
|
11
|
+
date: 2016-09-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|