bake-toolkit 2.3.4 → 2.4.3
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/doc/further/change.html +13 -0
- data/doc/index.html +1 -1
- data/doc/syntax/syntax.html +6 -1
- data/doc/vs/debug.html +1 -1
- data/lib/bake/cache.rb +2 -13
- data/lib/bake/config/loader.rb +2 -44
- data/lib/bake/model/metamodel.rb +7 -0
- data/lib/bake/options/options.rb +2 -1
- data/lib/bake/subst.rb +12 -7
- data/lib/bake/toolchain/errorparser/msvc_compiler_error_parser.rb +2 -2
- data/lib/bake/toolchain/gcc_env.rb +55 -0
- data/lib/bake/toolchain/msvc.rb +3 -2
- data/lib/bake/toolchain/provider.rb +1 -0
- data/lib/blocks/blockBase.rb +43 -2
- data/lib/blocks/compile.rb +21 -5
- data/lib/blocks/executable.rb +17 -6
- data/lib/blocks/library.rb +17 -7
- data/lib/common/version.rb +1 -1
- data/lib/tocxx.rb +24 -2
- metadata +3 -3
- data/lib/bake/toolchain/gcc_param.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5988f843e875a56d7340d145eb04d2802ded9afc
|
4
|
+
data.tar.gz: a1385eaa3a37f33d7266790bea4ff5cb5d877fa0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 213f610952f6bcfacef10bbb4e8e27c877f6c3eadbdd590f419e483eb0c9b206a7136d255de5f8ce65bc311440745ea5ec361a866a98b8c024a5bf691799fa9f
|
7
|
+
data.tar.gz: 8f0c811eebcf0af7ebf827dbfc6dace9b221352dc5941ffd3be73cc2325b2369055a497269ba06d6da487acd1cb6362e7e820e1905832dce6d453c9b3e96ca7f
|
data/doc/further/change.html
CHANGED
@@ -7,6 +7,19 @@
|
|
7
7
|
<body>
|
8
8
|
<h1>Changelog</h1>
|
9
9
|
|
10
|
+
March 30, 2015 - bake-toolkit 2.4.3<br>
|
11
|
+
<ul>
|
12
|
+
<li><b>Added: If Project.meta files are updated, sources will only be recompiled if necessary</b>
|
13
|
+
<li><b>Added: <i>Set</i> command in Project.meta has now an <i>env</i> attribute to store variables also in system environment which makes them accessible from user scripts</b>
|
14
|
+
<li><b>Added: GCC_ENV toolchain (uses environment variables)</b>
|
15
|
+
<li><b>Added: Improved MSVC support</b>
|
16
|
+
</ul>
|
17
|
+
|
18
|
+
March 16, 2015 - VS plugin 1.0.1 <br>
|
19
|
+
<ul>
|
20
|
+
<li><b>Added: Support for VS2013</b>
|
21
|
+
</ul>
|
22
|
+
|
10
23
|
March 12, 2015 - bake-toolkit 2.3.4<br>
|
11
24
|
<ul>
|
12
25
|
<li><b>Changed: Clang command is now "clang" per default instead of llvm-gcc</b>
|
data/doc/index.html
CHANGED
@@ -74,7 +74,7 @@ bake is used to build software <font color="#009900"><b>fast</b></font> and <fon
|
|
74
74
|
|
75
75
|
<p>
|
76
76
|
<hr>
|
77
|
-
<table width="100%" border="0"><tr><td align="left">Described bake-toolkit version: 2.3
|
77
|
+
<table width="100%" border="0"><tr><td align="left">Described bake-toolkit version: 2.4.3</td><td align="right">March 30, 2015</td></tr></table>
|
78
78
|
|
79
79
|
</body>
|
80
80
|
|
data/doc/syntax/syntax.html
CHANGED
@@ -81,7 +81,7 @@ z-index: 100;
|
|
81
81
|
|
82
82
|
<span><span style="background-color:#EEEEEE;" class="show">
|
83
83
|
<span class="mycomment"># Valid for all config types</span><br><br>
|
84
|
-
<span class="help" onMouseover="showSet()" onMouseout="notip()">Set</span> <variable>, value: <value> | cmd: <line>
|
84
|
+
<span class="help" onMouseover="showSet()" onMouseout="notip()">Set</span> <variable>, value: <value> | cmd: <line>, <span class="help" onMouseover="showEnv()" onMouseout="notip()">env</span>: true|false<br>
|
85
85
|
<span class="help" onMouseover="showDependency()" onMouseout="notip()">Dependency</span> <project>,
|
86
86
|
<span class="help" onMouseover="showDependencyConfig()" onMouseout="notip()">config</span>: <name><br>
|
87
87
|
<span class="help" onMouseover="showExternalLibrary()" onMouseout="notip()">ExternalLibrary</span> <lib>,
|
@@ -431,6 +431,11 @@ function showSet() {
|
|
431
431
|
ddrivetip("Set", "No","0..n","-",str)
|
432
432
|
}
|
433
433
|
|
434
|
+
function showEnv() {
|
435
|
+
str = 'Stores the variable also in system environment, which makes it available in everything which is executed by bake, e.g. in Pre- and PostSteps.'
|
436
|
+
ddrivetip("env", "No","-","false",str)
|
437
|
+
}
|
438
|
+
|
434
439
|
function showDependency() {
|
435
440
|
str = 'Specifies another project to be built before this project.<br>'+
|
436
441
|
'The archive, linker libs and search paths are imported from this project to the this project automatically.<br>'+
|
data/doc/vs/debug.html
CHANGED
@@ -29,7 +29,7 @@ Add debug flags to the MSVC toolchain:
|
|
29
29
|
}
|
30
30
|
}</code></pre>
|
31
31
|
|
32
|
-
Start Visual Studio with e.g. a batch file shown below and choose the appropriate solution. If you don't have a solution yet, check out <a href="
|
32
|
+
Start Visual Studio with e.g. a batch file shown below and choose the appropriate solution. If you don't have a solution yet, check out <a href="create.html">How to create a solution / projects in Visual Studio</a>.
|
33
33
|
|
34
34
|
<pre id="rundrum"><code>set PATH=%PATH%;C:\tools\Microsoft Visual Studio 11.0\VC\bin
|
35
35
|
call "C:\tools\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"
|
data/lib/bake/cache.rb
CHANGED
@@ -13,15 +13,11 @@ module Bake
|
|
13
13
|
attr_accessor :workspace_roots
|
14
14
|
attr_accessor :include_filter
|
15
15
|
attr_accessor :exclude_filter
|
16
|
-
attr_accessor :defaultToolchain
|
17
|
-
attr_accessor :defaultToolchainTime
|
18
16
|
attr_accessor :no_autodir
|
19
17
|
attr_accessor :build_config
|
20
18
|
end
|
21
19
|
|
22
20
|
class CacheAccess
|
23
|
-
attr_reader :defaultToolchain
|
24
|
-
attr_reader :defaultToolchainTime
|
25
21
|
attr_reader :cacheFilename
|
26
22
|
|
27
23
|
def initialize()
|
@@ -32,8 +28,6 @@ module Bake
|
|
32
28
|
end
|
33
29
|
|
34
30
|
FileUtils.mkdir_p(File.dirname(@cacheFilename))
|
35
|
-
@defaultToolchain = nil
|
36
|
-
@defaultToolchainTime = nil
|
37
31
|
end
|
38
32
|
|
39
33
|
def load_cache
|
@@ -48,10 +42,7 @@ module Bake
|
|
48
42
|
if cache.version != Version.number
|
49
43
|
Bake.formatter.printInfo("Info: cache version ("+cache.version+") does not match to bake version ("+Version.number+"), reloading meta information")
|
50
44
|
cache = nil
|
51
|
-
|
52
|
-
@defaultToolchain = cache.defaultToolchain
|
53
|
-
@defaultToolchainTime = cache.defaultToolchainTime
|
54
|
-
end
|
45
|
+
end
|
55
46
|
|
56
47
|
if cache != nil
|
57
48
|
if cache.cache_file != @cacheFilename
|
@@ -138,7 +129,7 @@ module Bake
|
|
138
129
|
return nil
|
139
130
|
end
|
140
131
|
|
141
|
-
def write_cache(project_files, referencedConfigs
|
132
|
+
def write_cache(project_files, referencedConfigs)
|
142
133
|
cache = Cache.new
|
143
134
|
cache.referencedConfigs = referencedConfigs
|
144
135
|
cache.files = project_files
|
@@ -148,8 +139,6 @@ module Bake
|
|
148
139
|
cache.no_autodir = Bake.options.no_autodir
|
149
140
|
cache.exclude_filter = Bake.options.exclude_filter
|
150
141
|
cache.workspace_roots = Bake.options.roots
|
151
|
-
cache.defaultToolchain = defaultToolchain
|
152
|
-
cache.defaultToolchainTime = defaultToolchainTime
|
153
142
|
cache.build_config = Bake.options.build_config
|
154
143
|
bbdump = Marshal.dump(cache)
|
155
144
|
begin
|
data/lib/bake/config/loader.rb
CHANGED
@@ -4,13 +4,6 @@ module Bake
|
|
4
4
|
|
5
5
|
class Config
|
6
6
|
attr_reader :referencedConfigs
|
7
|
-
attr_reader :defaultToolchain
|
8
|
-
|
9
|
-
@@defaultToolchainTime = nil
|
10
|
-
|
11
|
-
def self.defaultToolchainTime
|
12
|
-
@@defaultToolchainTime
|
13
|
-
end
|
14
7
|
|
15
8
|
def getFullProject(configs, configname) # note: configs is never empty
|
16
9
|
|
@@ -196,16 +189,6 @@ module Bake
|
|
196
189
|
ExitHelper.exit(1)
|
197
190
|
end
|
198
191
|
|
199
|
-
basedOn = config.defaultToolchain.basedOn
|
200
|
-
@basedOnToolchain = Bake::Toolchain::Provider[basedOn]
|
201
|
-
if @basedOnToolchain.nil?
|
202
|
-
Bake.formatter.printError("DefaultToolchain based on unknown compiler '#{basedOn}'", config.defaultToolchain)
|
203
|
-
ExitHelper.exit(1)
|
204
|
-
end
|
205
|
-
@defaultToolchain = Utils.deep_copy(@basedOnToolchain)
|
206
|
-
integrateToolchain(@defaultToolchain, config.defaultToolchain)
|
207
|
-
@@defaultToolchainTime = File.mtime(mainMeta)
|
208
|
-
|
209
192
|
validateDependencies(config)
|
210
193
|
@depsPending = config.dependency
|
211
194
|
end
|
@@ -267,36 +250,11 @@ module Bake
|
|
267
250
|
while dep = @depsPending.shift
|
268
251
|
loadMeta(dep)
|
269
252
|
end
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
if (cache.defaultToolchain)
|
274
|
-
if @defaultToolchain[:LINKER][:FLAGS] == cache.defaultToolchain[:LINKER][:FLAGS] and
|
275
|
-
@defaultToolchain[:LINKER][:LIB_PREFIX_FLAGS] == cache.defaultToolchain[:LINKER][:LIB_PREFIX_FLAGS] and
|
276
|
-
@defaultToolchain[:LINKER][:LIB_POSTFIX_FLAGS] == cache.defaultToolchain[:LINKER][:LIB_POSTFIX_FLAGS] and
|
277
|
-
@defaultToolchain[:ARCHIVER][:FLAGS] == cache.defaultToolchain[:ARCHIVER][:FLAGS] and
|
278
|
-
@defaultToolchain[:COMPILER][:CPP][:FLAGS] == cache.defaultToolchain[:COMPILER][:CPP][:FLAGS] and
|
279
|
-
@defaultToolchain[:COMPILER][:CPP][:DEFINES].join("") == cache.defaultToolchain[:COMPILER][:CPP][:DEFINES].join("") and
|
280
|
-
@defaultToolchain[:COMPILER][:C][:FLAGS] == cache.defaultToolchain[:COMPILER][:C][:FLAGS] and
|
281
|
-
@defaultToolchain[:COMPILER][:C][:DEFINES].join("") == cache.defaultToolchain[:COMPILER][:C][:DEFINES].join("") and
|
282
|
-
@defaultToolchain[:COMPILER][:ASM][:FLAGS] == cache.defaultToolchain[:COMPILER][:ASM][:FLAGS] and
|
283
|
-
@defaultToolchain[:COMPILER][:ASM][:DEFINES].join("") == cache.defaultToolchain[:COMPILER][:ASM][:DEFINES].join("") and
|
284
|
-
@defaultToolchain[:LINT_POLICY].join("") == cache.defaultToolchain[:LINT_POLICY].join("")
|
285
|
-
@defaultToolchain[:DOCU] == cache.defaultToolchain[:DOCU]
|
286
|
-
@@defaultToolchainTime = cache.defaultToolchainTime
|
287
|
-
end
|
288
|
-
end
|
289
|
-
|
253
|
+
|
290
254
|
filterSteps
|
291
255
|
|
292
|
-
cache.write_cache(@project_files, @referencedConfigs
|
293
|
-
else
|
294
|
-
@defaultToolchain = cache.defaultToolchain
|
295
|
-
@@defaultToolchainTime = cache.defaultToolchainTime
|
256
|
+
cache.write_cache(@project_files, @referencedConfigs)
|
296
257
|
end
|
297
|
-
|
298
|
-
# todo: cleanup this hack
|
299
|
-
Bake.options.analyze = @defaultToolchain[:COMPILER][:CPP][:COMPILE_FLAGS].include?"analyze"
|
300
258
|
|
301
259
|
end
|
302
260
|
|
data/lib/bake/model/metamodel.rb
CHANGED
@@ -142,6 +142,7 @@ module Bake
|
|
142
142
|
has_attr 'name', String, :defaultValueLiteral => ""
|
143
143
|
has_attr 'default', String, :defaultValueLiteral => "on"
|
144
144
|
has_attr 'filter', String, :defaultValueLiteral => ""
|
145
|
+
has_many_attr 'validExitCodes', Integer, :defaultValueLiteral => ["0"]
|
145
146
|
end
|
146
147
|
|
147
148
|
class Makefile < Step
|
@@ -162,6 +163,10 @@ module Bake
|
|
162
163
|
contains_many 'step', Step, 'parent'
|
163
164
|
end
|
164
165
|
|
166
|
+
class ExitSteps < ModelElement
|
167
|
+
contains_many 'step', Step, 'parent'
|
168
|
+
end
|
169
|
+
|
165
170
|
class UserLibrary < ModelElement
|
166
171
|
has_attr 'lib', String, :defaultValueLiteral => ""
|
167
172
|
end
|
@@ -182,6 +187,7 @@ module Bake
|
|
182
187
|
has_attr 'name', String, :defaultValueLiteral => ""
|
183
188
|
has_attr 'value', String, :defaultValueLiteral => ""
|
184
189
|
has_attr 'cmd', String, :defaultValueLiteral => ""
|
190
|
+
has_attr 'env', Boolean, :defaultValueLiteral => "false"
|
185
191
|
end
|
186
192
|
|
187
193
|
class BaseConfig_INTERNAL < ModelElement
|
@@ -189,6 +195,7 @@ module Bake
|
|
189
195
|
has_attr 'extends', String, :defaultValueLiteral => ""
|
190
196
|
contains_one 'preSteps', PreSteps, 'parent'
|
191
197
|
contains_one 'postSteps', PostSteps, 'parent'
|
198
|
+
contains_one 'exitSteps', ExitSteps, 'parent'
|
192
199
|
contains_many 'userLibrary', UserLibrary, 'parent'
|
193
200
|
contains_many 'exLib', ExternalLibrary, 'parent'
|
194
201
|
contains_many 'exLibSearchPath', ExternalLibrarySearchPath, 'parent'
|
data/lib/bake/options/options.rb
CHANGED
@@ -17,7 +17,7 @@ module Bake
|
|
17
17
|
end
|
18
18
|
|
19
19
|
class Options < Parser
|
20
|
-
attr_accessor :build_config, :nocache, :analyze
|
20
|
+
attr_accessor :build_config, :nocache, :analyze, :envToolchain
|
21
21
|
attr_reader :main_dir, :project, :filename, :main_project_name, :cc2j_filename # String
|
22
22
|
attr_reader :roots, :include_filter, :exclude_filter # String List
|
23
23
|
attr_reader :stopOnFirstError, :clean, :rebuild, :show_includes, :show_includes_and_defines, :linkOnly, :no_autodir, :clobber, :lint, :docu, :debug, :prepro # Boolean
|
@@ -30,6 +30,7 @@ module Bake
|
|
30
30
|
def initialize(argv)
|
31
31
|
super(argv)
|
32
32
|
|
33
|
+
@envToolchain = false
|
33
34
|
@analyze = false
|
34
35
|
@showConfigs = false
|
35
36
|
@consoleOutput_fullnames = false
|
data/lib/bake/subst.rb
CHANGED
@@ -18,12 +18,14 @@ module Bake
|
|
18
18
|
linkerCmd = @@config.toolchain.linker.command if @@config.toolchain.linker and @@config.toolchain.linker.command != ""
|
19
19
|
archiverCmd = @@config.toolchain.archiver.command if @@config.toolchain.linker and @@config.toolchain.archiver.command != ""
|
20
20
|
@@config.toolchain.compiler.each do |c|
|
21
|
-
if c.
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
21
|
+
if c.command != ""
|
22
|
+
if c.ctype == :CPP
|
23
|
+
cppCmd = c.command
|
24
|
+
elsif c.ctype == :C
|
25
|
+
cCmd = c.command
|
26
|
+
elsif c.ctype == :ASM
|
27
|
+
asmCmd = c.command
|
28
|
+
end
|
27
29
|
end
|
28
30
|
end
|
29
31
|
end
|
@@ -81,6 +83,7 @@ module Bake
|
|
81
83
|
Bake.formatter.printWarning("Name of variable must not be empty - variable will be ignored", s)
|
82
84
|
else
|
83
85
|
@@userVarMap[s.name] = substString(s.value, s)
|
86
|
+
ENV[s.name] = @@userVarMap[s.name] if s.env
|
84
87
|
end
|
85
88
|
else
|
86
89
|
cmd_result = false
|
@@ -90,6 +93,7 @@ module Bake
|
|
90
93
|
cmd = [substString(s.cmd, s)]
|
91
94
|
cmd_result, consoleOutput = ProcessHelper.run(cmd)
|
92
95
|
@@userVarMap[s.name] = consoleOutput.chomp
|
96
|
+
ENV[s.name] = @@userVarMap[s.name] if s.env
|
93
97
|
end
|
94
98
|
rescue Exception=>e
|
95
99
|
consoleOutput = e.message
|
@@ -97,6 +101,7 @@ module Bake
|
|
97
101
|
if (cmd_result == false)
|
98
102
|
Bake.formatter.printWarning("Command not successful, variable #{s.name} will be set to \"\" (#{consoleOutput.chomp}).", s)
|
99
103
|
@@userVarMap[s.name] = ""
|
104
|
+
ENV[s.name] = "" if s.env
|
100
105
|
end
|
101
106
|
end
|
102
107
|
|
@@ -262,7 +267,7 @@ module Bake
|
|
262
267
|
substStr << str[posSubst..-1]
|
263
268
|
substStr
|
264
269
|
end
|
265
|
-
|
270
|
+
|
266
271
|
def self.substToolchain(elem)
|
267
272
|
if Hash === elem
|
268
273
|
elem.each do |k, e|
|
@@ -4,7 +4,7 @@ module Bake
|
|
4
4
|
class MSVCCompilerErrorParser < ErrorParser
|
5
5
|
|
6
6
|
def initialize()
|
7
|
-
@error_expression = /(.+)\(([0-9]+)\) : ([A-Za-z\._]+) (.+)/
|
7
|
+
@error_expression = /(.+)\(([0-9]+)\) : ([A-Za-z\._]+) (C[\d]+: .+)/
|
8
8
|
@incEng = "Note: including file: "
|
9
9
|
@incGer = "Hinweis: Einlesen der Datei: "
|
10
10
|
end
|
@@ -28,7 +28,7 @@ module Bake
|
|
28
28
|
filterLine = 100
|
29
29
|
|
30
30
|
if l.include?@incEng
|
31
|
-
includeList << l[@incEng.length..-1]
|
31
|
+
includeList << l[@incEng.length..-1].strip
|
32
32
|
next
|
33
33
|
end
|
34
34
|
if l.include?@incGer
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'common/utils'
|
2
|
+
require 'bake/toolchain/provider'
|
3
|
+
require 'bake/toolchain/errorparser/error_parser'
|
4
|
+
require 'bake/toolchain/errorparser/gcc_compiler_error_parser'
|
5
|
+
require 'bake/toolchain/errorparser/gcc_linker_error_parser'
|
6
|
+
|
7
|
+
module Bake
|
8
|
+
module Toolchain
|
9
|
+
|
10
|
+
GCCENVChain = Provider.add("GCC_ENV")
|
11
|
+
|
12
|
+
GCCENVChain[:COMPILER][:CPP].update({
|
13
|
+
:COMMAND => "$(CXX)",
|
14
|
+
:DEFINE_FLAG => "-D",
|
15
|
+
:OBJECT_FILE_FLAG => "-o",
|
16
|
+
:OBJ_FLAG_SPACE => true,
|
17
|
+
:INCLUDE_PATH_FLAG => "-I",
|
18
|
+
:COMPILE_FLAGS => "-c ",
|
19
|
+
:DEP_FLAGS => "-MD -MF",
|
20
|
+
:DEP_FLAGS_SPACE => true,
|
21
|
+
:PREPRO_FLAGS => "-E -P",
|
22
|
+
:FLAGS => "$(CXXFLAGS)"
|
23
|
+
})
|
24
|
+
|
25
|
+
GCCENVChain[:COMPILER][:C] = Utils.deep_copy(GCCENVChain[:COMPILER][:CPP])
|
26
|
+
GCCENVChain[:COMPILER][:C][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:C][:SOURCE_FILE_ENDINGS]
|
27
|
+
GCCENVChain[:COMPILER][:C][:COMMAND] = "$(CC)"
|
28
|
+
GCCENVChain[:COMPILER][:C][:FLAGS] = "$(CFLAGS)"
|
29
|
+
|
30
|
+
GCCENVChain[:COMPILER][:ASM] = Utils.deep_copy(GCCENVChain[:COMPILER][:C])
|
31
|
+
GCCENVChain[:COMPILER][:ASM][:COMMAND] = "$(AS)"
|
32
|
+
GCCENVChain[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS]
|
33
|
+
GCCENVChain[:COMPILER][:ASM][:FLAGS] = "$(ASFLAGS)"
|
34
|
+
|
35
|
+
GCCENVChain[:ARCHIVER][:COMMAND] = "$(AR)"
|
36
|
+
GCCENVChain[:ARCHIVER][:ARCHIVE_FLAGS] = "-rc"
|
37
|
+
GCCENVChain[:ARCHIVER][:FLAGS] = "$(ARFLAGS)"
|
38
|
+
|
39
|
+
GCCENVChain[:LINKER][:COMMAND] = "$(CXX)"
|
40
|
+
GCCENVChain[:LINKER][:SCRIPT] = "-T"
|
41
|
+
GCCENVChain[:LINKER][:USER_LIB_FLAG] = "-l:"
|
42
|
+
GCCENVChain[:LINKER][:EXE_FLAG] = "-o"
|
43
|
+
GCCENVChain[:LINKER][:LIB_FLAG] = "-l"
|
44
|
+
GCCENVChain[:LINKER][:LIB_PATH_FLAG] = "-L"
|
45
|
+
GCCENVChain[:LINKER][:FLAGS] = "$(LDFLAGS)"
|
46
|
+
|
47
|
+
gccCompilerErrorParser = GCCCompilerErrorParser.new
|
48
|
+
GCCENVChain[:COMPILER][:C][:ERROR_PARSER] = gccCompilerErrorParser
|
49
|
+
GCCENVChain[:COMPILER][:CPP][:ERROR_PARSER] = gccCompilerErrorParser
|
50
|
+
GCCENVChain[:COMPILER][:ASM][:ERROR_PARSER] = gccCompilerErrorParser
|
51
|
+
GCCENVChain[:ARCHIVER][:ERROR_PARSER] = gccCompilerErrorParser
|
52
|
+
GCCENVChain[:LINKER][:ERROR_PARSER] = GCCLinkerErrorParser.new
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
data/lib/bake/toolchain/msvc.rb
CHANGED
@@ -15,7 +15,7 @@ module Bake
|
|
15
15
|
:OBJECT_FILE_FLAG => "-Fo",
|
16
16
|
:OBJ_FLAG_SPACE => false,
|
17
17
|
:INCLUDE_PATH_FLAG => "-I",
|
18
|
-
:COMPILE_FLAGS => "-c -EHsc",
|
18
|
+
:COMPILE_FLAGS => "-c -EHsc $(MSVC_FORCE_SYNC_PDB_WRITES)",
|
19
19
|
:DEP_FLAGS_FILENAME => false,
|
20
20
|
:DEP_FLAGS => "-showIncludes",
|
21
21
|
:DEP_FLAGS_SPACE => true,
|
@@ -28,7 +28,7 @@ module Bake
|
|
28
28
|
|
29
29
|
MSVCChain[:COMPILER][:ASM] = Utils.deep_copy(MSVCChain[:COMPILER][:C])
|
30
30
|
MSVCChain[:COMPILER][:ASM][:COMMAND] = "ml"
|
31
|
-
MSVCChain[:COMPILER][:ASM][:COMPILE_FLAGS] = "-c"
|
31
|
+
MSVCChain[:COMPILER][:ASM][:COMPILE_FLAGS] = "-c $(MSVC_FORCE_SYNC_PDB_WRITES)"
|
32
32
|
MSVCChain[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS]
|
33
33
|
|
34
34
|
MSVCChain[:ARCHIVER][:COMMAND] = "lib"
|
@@ -45,6 +45,7 @@ module Bake
|
|
45
45
|
MSVCChain[:LINKER][:MAP_FILE_PIPE] = false
|
46
46
|
MSVCChain[:LINKER][:SCRIPT] = "Linkerscript option not supported for MSVC"
|
47
47
|
|
48
|
+
|
48
49
|
msvcCompilerErrorParser = MSVCCompilerErrorParser.new
|
49
50
|
MSVCChain[:COMPILER][:C][:ERROR_PARSER] = msvcCompilerErrorParser
|
50
51
|
MSVCChain[:COMPILER][:CPP][:ERROR_PARSER] = msvcCompilerErrorParser
|
data/lib/blocks/blockBase.rb
CHANGED
@@ -47,6 +47,48 @@ module Bake
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
def defaultToolchainTime
|
51
|
+
@defaultToolchainTime ||= File.mtime(Bake.options.main_dir+"/Project.meta")
|
52
|
+
end
|
53
|
+
|
54
|
+
def config_changed?(cmdLineFile)
|
55
|
+
return "because command line file does not exist" if not File.exist?(cmdLineFile)
|
56
|
+
cmdTime = File.mtime(cmdLineFile)
|
57
|
+
return "because config file has been changed" if cmdTime < File.mtime(@config.file_name)
|
58
|
+
return "because DefaultToolchain has been changed" if cmdTime < defaultToolchainTime
|
59
|
+
return "because environment variables used for toolchain have been changed" if (Bake.options.envToolchain)
|
60
|
+
false
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.isCmdLineEqual?(cmd, cmdLineFile)
|
64
|
+
begin
|
65
|
+
if File.exist?cmdLineFile
|
66
|
+
lastCmdLineArray = File.readlines(cmdLineFile)[0];
|
67
|
+
if lastCmdLineArray == cmd.join(" ")
|
68
|
+
FileUtils.touch(cmdLineFile)
|
69
|
+
return true
|
70
|
+
end
|
71
|
+
end
|
72
|
+
rescue Exception => e
|
73
|
+
if Bake.options.debug
|
74
|
+
puts e.message
|
75
|
+
puts e.backtrace
|
76
|
+
end
|
77
|
+
end
|
78
|
+
return false
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.writeCmdLineFile(cmd, cmdLineFile)
|
82
|
+
begin
|
83
|
+
File.write(cmdLineFile, cmd.join(" "))
|
84
|
+
rescue Exception => e
|
85
|
+
if Bake.options.debug
|
86
|
+
puts e.message
|
87
|
+
puts e.backtrace
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
50
92
|
def calcOutputDir
|
51
93
|
if @tcs[:OUTPUT_DIR] != nil
|
52
94
|
p = @block.convPath(@tcs[:OUTPUT_DIR])
|
@@ -122,7 +164,7 @@ module Bake
|
|
122
164
|
end
|
123
165
|
|
124
166
|
console_output.gsub!(/[\r]/, "")
|
125
|
-
Bake.formatter.format(console_output, error_descs, error_parser)
|
167
|
+
Bake.formatter.format(console_output, error_descs, error_parser) unless console_output.empty?
|
126
168
|
|
127
169
|
Bake::IDEInterface.instance.set_errors(error_descs)
|
128
170
|
rescue Exception => e
|
@@ -142,7 +184,6 @@ module Bake
|
|
142
184
|
hasError = (success == false)
|
143
185
|
printCmd(cmd, alternate, reason, (hasError and not Bake.options.lint))
|
144
186
|
errorPrinted, incList = process_console_output(console_output, error_parser)
|
145
|
-
|
146
187
|
if hasError and not errorPrinted
|
147
188
|
Bake.formatter.printError("System command failed", @projectDir)
|
148
189
|
end
|
data/lib/blocks/compile.rb
CHANGED
@@ -44,9 +44,6 @@ module Bake
|
|
44
44
|
return "because object does not exist" if not File.exist?(object)
|
45
45
|
oTime = File.mtime(object)
|
46
46
|
|
47
|
-
return "because config file has been changed" if oTime < File.mtime(@config.file_name)
|
48
|
-
return "Compiling #{source} because DefaultToolchain has been changed" if oTime < Bake::Config.defaultToolchainTime
|
49
|
-
|
50
47
|
return "because source is newer than object" if oTime < File.mtime(source)
|
51
48
|
|
52
49
|
if type != :ASM
|
@@ -81,6 +78,10 @@ module Bake
|
|
81
78
|
false
|
82
79
|
end
|
83
80
|
|
81
|
+
def calcCmdlineFile(object)
|
82
|
+
object[0..-3] + ".cmdline"
|
83
|
+
end
|
84
|
+
|
84
85
|
def calcDepFile(object, type)
|
85
86
|
dep_filename = nil
|
86
87
|
if type != :ASM
|
@@ -111,7 +112,13 @@ module Bake
|
|
111
112
|
dep_filename = calcDepFile(object, type)
|
112
113
|
dep_filename_conv = calcDepFileConv(dep_filename) if type != :ASM
|
113
114
|
|
115
|
+
cmdLineCheck = false
|
116
|
+
cmdLineFile = calcCmdlineFile(object)
|
114
117
|
reason = needed?(source, object, type, dep_filename_conv)
|
118
|
+
if not reason
|
119
|
+
cmdLineCheck = true
|
120
|
+
reason = config_changed?(cmdLineFile)
|
121
|
+
end
|
115
122
|
return true unless reason
|
116
123
|
|
117
124
|
if @fileTcs.include?(source)
|
@@ -130,8 +137,6 @@ module Bake
|
|
130
137
|
raise SystemCommandFailed.new
|
131
138
|
end
|
132
139
|
|
133
|
-
BlockBase.prepareOutput(object)
|
134
|
-
|
135
140
|
cmd = Utils.flagSplit(compiler[:COMMAND], false)
|
136
141
|
cmd += compiler[:COMPILE_FLAGS].split(" ")
|
137
142
|
|
@@ -174,7 +179,13 @@ module Bake
|
|
174
179
|
if Bake.options.cc2j_filename
|
175
180
|
Blocks::CC2J << { :directory => @projectDir, :command => cmd, :file => source }
|
176
181
|
end
|
182
|
+
|
183
|
+
return if cmdLineCheck and BlockBase.isCmdLineEqual?(cmd, cmdLineFile)
|
184
|
+
|
185
|
+
BlockBase.prepareOutput(object)
|
177
186
|
success, consoleOutput = ProcessHelper.run(cmd, false, false)
|
187
|
+
BlockBase.writeCmdLineFile(cmd, cmdLineFile) if success
|
188
|
+
|
178
189
|
outputType = Bake.options.analyze ? "Analyzing" : (Bake.options.prepro ? "Preprocessing" : "Compiling")
|
179
190
|
incList = process_result(cmd, consoleOutput, compiler[:ERROR_PARSER], "#{outputType} #{source}", reason, success)
|
180
191
|
|
@@ -304,6 +315,11 @@ module Bake
|
|
304
315
|
puts "Deleting file #{dep_filename}" if Bake.options.verbose >= 2
|
305
316
|
FileUtils.rm_rf(dep_filename)
|
306
317
|
end
|
318
|
+
cmdLineFile = calcCmdlineFile(object)
|
319
|
+
if File.exist?cmdLineFile
|
320
|
+
puts "Deleting file #{cmdLineFile}" if Bake.options.verbose >= 2
|
321
|
+
FileUtils.rm_rf(cmdLineFile)
|
322
|
+
end
|
307
323
|
end
|
308
324
|
end
|
309
325
|
end
|
data/lib/blocks/executable.rb
CHANGED
@@ -29,6 +29,10 @@ module Bake
|
|
29
29
|
@exe_name ||= File.join([@output_dir, baseFilename])
|
30
30
|
end
|
31
31
|
|
32
|
+
def calcCmdlineFile()
|
33
|
+
@exe_name + ".cmdline"
|
34
|
+
end
|
35
|
+
|
32
36
|
def calcMapFile
|
33
37
|
@mapfile = nil
|
34
38
|
if (not Bake.options.docu) and (not Bake.options.lint) and (not @config.mapFile.nil?)
|
@@ -50,7 +54,6 @@ module Bake
|
|
50
54
|
end
|
51
55
|
|
52
56
|
def needed?(libs)
|
53
|
-
return false if depHasError(@block)
|
54
57
|
return false if Bake.options.prepro
|
55
58
|
return "because linkOnly was specified" if Bake.options.linkOnly
|
56
59
|
|
@@ -58,10 +61,6 @@ module Bake
|
|
58
61
|
return "because executable does not exist" if not File.exists?(@exe_name)
|
59
62
|
|
60
63
|
eTime = File.mtime(@exe_name)
|
61
|
-
|
62
|
-
# config
|
63
|
-
return "because config file has been changed" if eTime < File.mtime(@config.file_name)
|
64
|
-
return "because DefaultToolchain has been changed" if eTime < Bake::Config.defaultToolchainTime
|
65
64
|
|
66
65
|
# linkerscript
|
67
66
|
if @linker_script
|
@@ -86,13 +85,20 @@ module Bake
|
|
86
85
|
def execute
|
87
86
|
|
88
87
|
Dir.chdir(@projectDir) do
|
88
|
+
return false if depHasError(@block)
|
89
89
|
|
90
90
|
libs, linker_libs_array = LibElements.calc_linker_lib_string(@block, @tcs)
|
91
91
|
|
92
|
+
cmdLineCheck = false
|
93
|
+
cmdLineFile = calcCmdlineFile()
|
92
94
|
reason = needed?(libs)
|
95
|
+
if not reason
|
96
|
+
cmdLineCheck = true
|
97
|
+
reason = config_changed?(cmdLineFile)
|
98
|
+
end
|
93
99
|
return unless reason
|
94
100
|
|
95
|
-
|
101
|
+
|
96
102
|
|
97
103
|
linker = @tcs[:LINKER]
|
98
104
|
|
@@ -126,8 +132,13 @@ module Bake
|
|
126
132
|
outPipe = (@mapfile and linker[:MAP_FILE_PIPE]) ? "#{@mapfile}" : nil
|
127
133
|
cmdLinePrint << "> #{outPipe}" if outPipe
|
128
134
|
|
135
|
+
return if cmdLineCheck and BlockBase.isCmdLineEqual?(cmd, cmdLineFile)
|
136
|
+
|
137
|
+
BlockBase.prepareOutput(@exe_name)
|
138
|
+
|
129
139
|
printCmd(cmdLinePrint, "Linking #{@exe_name}", reason, false)
|
130
140
|
success, consoleOutput = ProcessHelper.run(cmd, false, false, outPipe)
|
141
|
+
BlockBase.writeCmdLineFile(cmd, cmdLineFile) if success
|
131
142
|
process_result(cmdLinePrint, consoleOutput, linker[:ERROR_PARSER], nil, reason, success)
|
132
143
|
|
133
144
|
check_config_file()
|
data/lib/blocks/library.rb
CHANGED
@@ -17,6 +17,10 @@ module Bake
|
|
17
17
|
@archive_name ||= File.join([@output_dir, "lib#{@projectName}.a"])
|
18
18
|
end
|
19
19
|
|
20
|
+
def calcCmdlineFile()
|
21
|
+
archive_name + ".cmdline"
|
22
|
+
end
|
23
|
+
|
20
24
|
def needed?
|
21
25
|
return false if Bake.options.linkOnly
|
22
26
|
return false if Bake.options.prepro
|
@@ -25,10 +29,6 @@ module Bake
|
|
25
29
|
return "because library does not exist" if not File.exists?(archive_name)
|
26
30
|
|
27
31
|
aTime = File.mtime(archive_name)
|
28
|
-
|
29
|
-
# config
|
30
|
-
return "because config file has been changed" if aTime < File.mtime(@config.file_name)
|
31
|
-
return "because DefaultToolchain has been changed" if aTime < Bake::Config.defaultToolchainTime
|
32
32
|
|
33
33
|
# sources
|
34
34
|
@compileBlock.objects.each do |obj|
|
@@ -42,10 +42,15 @@ module Bake
|
|
42
42
|
def execute
|
43
43
|
|
44
44
|
Dir.chdir(@projectDir) do
|
45
|
+
|
46
|
+
cmdLineCheck = false
|
47
|
+
cmdLineFile = calcCmdlineFile()
|
45
48
|
reason = needed?
|
49
|
+
if not reason
|
50
|
+
cmdLineCheck = true
|
51
|
+
reason = config_changed?(cmdLineFile)
|
52
|
+
end
|
46
53
|
return unless reason
|
47
|
-
|
48
|
-
BlockBase.prepareOutput(archive_name)
|
49
54
|
|
50
55
|
archiver = @tcs[:ARCHIVER]
|
51
56
|
|
@@ -58,10 +63,15 @@ module Bake
|
|
58
63
|
else
|
59
64
|
cmd[cmd.length-1] += archive_name
|
60
65
|
end
|
61
|
-
|
66
|
+
|
62
67
|
cmd += @compileBlock.objects
|
68
|
+
|
69
|
+
return if cmdLineCheck and BlockBase.isCmdLineEqual?(cmd, cmdLineFile)
|
70
|
+
|
71
|
+
BlockBase.prepareOutput(archive_name)
|
63
72
|
|
64
73
|
success, consoleOutput = ProcessHelper.run(cmd, false, false)
|
74
|
+
BlockBase.writeCmdLineFile(cmd, cmdLineFile) if success
|
65
75
|
process_result(cmd, consoleOutput, archiver[:ERROR_PARSER], "Creating #{archive_name}", reason, success)
|
66
76
|
|
67
77
|
check_config_file()
|
data/lib/common/version.rb
CHANGED
data/lib/tocxx.rb
CHANGED
@@ -225,11 +225,33 @@ module Bake
|
|
225
225
|
|
226
226
|
if Bake.options.lint
|
227
227
|
@defaultToolchain = Utils.deep_copy(Bake::Toolchain::Provider["Lint"])
|
228
|
-
integrateToolchain(@defaultToolchain, @mainConfig.defaultToolchain)
|
229
228
|
else
|
230
|
-
|
229
|
+
basedOn = @mainConfig.defaultToolchain.basedOn
|
230
|
+
basedOnToolchain = Bake::Toolchain::Provider[basedOn]
|
231
|
+
if basedOnToolchain.nil?
|
232
|
+
Bake.formatter.printError("DefaultToolchain based on unknown compiler '#{basedOn}'", config.defaultToolchain)
|
233
|
+
ExitHelper.exit(1)
|
234
|
+
end
|
235
|
+
|
236
|
+
# The flag "-FS" must only be set for VS2013 and above
|
237
|
+
ENV["MSVC_FORCE_SYNC_PDB_WRITES"] = ""
|
238
|
+
if basedOn == "MSVC"
|
239
|
+
begin
|
240
|
+
res = `cl.exe 2>&1`
|
241
|
+
scan_res = res.scan(/ersion (\d+).(\d+).(\d+)/)
|
242
|
+
ENV["MSVC_FORCE_SYNC_PDB_WRITES"] = "-FS" if scan_res.length > 0 and scan_res[0][0].to_i >= 18 # 18 is the compiler major version in VS2013
|
243
|
+
rescue Exception
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
@defaultToolchain = Utils.deep_copy(basedOnToolchain)
|
248
|
+
Bake.options.envToolchain = true if (basedOn.include?"_ENV")
|
231
249
|
end
|
250
|
+
integrateToolchain(@defaultToolchain, @mainConfig.defaultToolchain)
|
232
251
|
|
252
|
+
# todo: cleanup this hack
|
253
|
+
Bake.options.analyze = @defaultToolchain[:COMPILER][:CPP][:COMPILE_FLAGS].include?"analyze"
|
254
|
+
|
233
255
|
createBaseTcsForConfig
|
234
256
|
substVars
|
235
257
|
createTcsForConfig
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bake-toolkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3
|
4
|
+
version: 2.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Schaal
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rtext
|
@@ -110,7 +110,7 @@ files:
|
|
110
110
|
- lib/bake/toolchain/errorparser/ti_compiler_error_parser.rb
|
111
111
|
- lib/bake/toolchain/errorparser/ti_linker_error_parser.rb
|
112
112
|
- lib/bake/toolchain/gcc.rb
|
113
|
-
- lib/bake/toolchain/
|
113
|
+
- lib/bake/toolchain/gcc_env.rb
|
114
114
|
- lib/bake/toolchain/greenhills.rb
|
115
115
|
- lib/bake/toolchain/keil.rb
|
116
116
|
- lib/bake/toolchain/lint.rb
|