bake-toolkit 2.31.0 → 2.31.2

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: 591b37562b34be1359a7a53a148d7e1742ea500f
4
- data.tar.gz: 78bf6242de07bb51e91a4d910ed65ef606683b29
3
+ metadata.gz: 1d4c90f1806dd4419c84066cccc6baac0f7f0239
4
+ data.tar.gz: 86d52706bbfa8461f352319416ce055179529955
5
5
  SHA512:
6
- metadata.gz: fac870359cbe3ba177abb4052466de49c2b314f476b20b3e6aa76305bf11026946421c4b97e6addc16ff3bc581f9648b077e71f827b38bbd3dd92a70e00f7147
7
- data.tar.gz: 750652d03d56a383209e6db4110c737e0119d38f7d1f53ab0cfa0beaf6759f173520ee19dad901384ac664da010f47a5131092e8f4a1ab345b653ae39d2a6459
6
+ metadata.gz: b51c7d5cd389a6dde533f73bd67d6677fcc6a29e0e427702f40f7f0439ff6a68fa69c3b7ee38515b73dfba4ca034699cffa4006f0239a571395df3792b363074
7
+ data.tar.gz: 8d0396add934e717654ee9b218d9e7cf1338feac4e2b0e66e589f2f91c4c08601dfff9b781620c830901cceec3345c7f6cddae55974fb0c03248eebd5c34b544
@@ -1,11 +1,13 @@
1
1
  require "open-uri"
2
2
  require "fileutils"
3
+ require "common/version"
4
+ require "openssl"
3
5
 
4
6
  module Bake
5
7
  class Doc
6
8
  def self.show
7
- if File.exist?(File.dirname(__FILE__)+"/../../../doc/index.html")
8
- link = File.expand_path(File.dirname(__FILE__)+"/../../../doc/index.html")
9
+ if File.exist?(File.dirname(__FILE__)+"/../../../docs/index.html")
10
+ link = File.expand_path(File.dirname(__FILE__)+"/../../../docs/index.html")
9
11
  else
10
12
  link = "http://esrlabs.github.io/bake"
11
13
  end
@@ -24,10 +26,11 @@ module Bake
24
26
  end
25
27
 
26
28
  def self.install
27
- docuSource = "http://esrlabs.github.io/bake/"
29
+
30
+ docuSource = "https://raw.githubusercontent.com/esrlabs/bake/$(Bake::Version.number)/docs/"
28
31
  docuTarget = File.dirname(__FILE__)+"/../../../doc/"
29
32
  begin
30
- f = open(docuSource+"files.txt")
33
+ f = open(docuSource+"files.txt", {ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE})
31
34
  rescue OpenURI::HTTPError => e
32
35
  puts "Could not open #{docuSource}files.txt"
33
36
  ExitHelper.exit(0)
@@ -35,7 +38,7 @@ module Bake
35
38
  f.each_line do |fileName|
36
39
  fileName = fileName[2..-1].strip
37
40
  begin
38
- sourceFile = open(docuSource+fileName)
41
+ sourceFile = open(docuSource+fileName, {ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE})
39
42
  puts "[OK] "+ docuSource+fileName
40
43
  rescue OpenURI::HTTPError => e
41
44
  puts "[FAILED] "+ docuSource+fileName
@@ -31,6 +31,12 @@ module Bake
31
31
  end
32
32
  end
33
33
 
34
+ def get_tasking_severity(str)
35
+ return SEVERITY_INFO if str.start_with?"R"
36
+ return SEVERITY_WARNING if str.start_with?"W"
37
+ return SEVERITY_ERROR # F,E and S
38
+ end
39
+
34
40
  def inv_severity(s)
35
41
  if s == SEVERITY_INFO
36
42
  "info"
@@ -0,0 +1,31 @@
1
+ require 'bake/toolchain/errorparser/error_parser'
2
+
3
+ module Bake
4
+ class TaskingCompilerErrorParser < ErrorParser
5
+
6
+ def initialize()
7
+ @error_expression = /.* (.+): \[\"(.+)\" ([0-9]+)\] (.*)/
8
+ end
9
+
10
+ def scan_lines(consoleOutput, proj_dir)
11
+ res = []
12
+ consoleOutputFullnames = ""
13
+ consoleOutput[0].each_line do |l|
14
+ d = ErrorDesc.new
15
+ lstripped = l.rstrip
16
+ scan_res = lstripped.scan(@error_expression)
17
+ if scan_res.length > 0
18
+ d.file_name = File.expand_path(scan_res[0][1])
19
+ d.line_number = scan_res[0][2].to_i
20
+ d.message = scan_res[0][3]
21
+ d.severity = get_tasking_severity(scan_res[0][0])
22
+ l.gsub!(scan_res[0][0],d.file_name)
23
+ end
24
+ res << d
25
+ consoleOutputFullnames << l
26
+ end
27
+ [res, consoleOutputFullnames]
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,28 @@
1
+ require 'bake/toolchain/errorparser/error_parser'
2
+
3
+ module Bake
4
+ class TaskingLinkerErrorParser < ErrorParser
5
+
6
+ def initialize()
7
+ @error_expression = /.* (.+): (.*)/
8
+ end
9
+
10
+ def scan_lines(consoleOutput, proj_dir)
11
+ res = []
12
+ consoleOutput[0].each_line do |l|
13
+ l.rstrip!
14
+ d = ErrorDesc.new
15
+ scan_res = l.scan(@error_expression)
16
+ if scan_res.length > 0
17
+ d.file_name = proj_dir
18
+ d.line_number = 0
19
+ d.message = scan_res[0][1]
20
+ d.severity = get_tasking_severity(scan_res[0][0])
21
+ end
22
+ res << d
23
+ end
24
+ [res, consoleOutput[0]]
25
+ end
26
+
27
+ end
28
+ end
@@ -91,6 +91,7 @@ module Bake
91
91
  :PREFIX => "$(LinkerPrefix)",
92
92
  :MUST_FLAGS => "",
93
93
  :SCRIPT => "",
94
+ :SCRIPT_SPACE => true,
94
95
  :USER_LIB_FLAG => "",
95
96
  :EXE_FLAG => "",
96
97
  :EXE_FLAG_SPACE => true,
@@ -158,3 +159,4 @@ require 'bake/toolchain/greenhills'
158
159
  require 'bake/toolchain/keil'
159
160
  require 'bake/toolchain/msvc'
160
161
  require 'bake/toolchain/gcc_env'
162
+ require 'bake/toolchain/tasking'
@@ -0,0 +1,55 @@
1
+ require 'bake/toolchain/provider'
2
+ require 'common/utils'
3
+ require 'bake/toolchain/errorparser/tasking_compiler_error_parser'
4
+ require 'bake/toolchain/errorparser/tasking_linker_error_parser'
5
+
6
+ module Bake
7
+ module Toolchain
8
+
9
+ TaskingChain = Provider.add("Tasking")
10
+
11
+ TaskingChain[:COMPILER][:C].update({
12
+ :COMMAND => "cctc",
13
+ :FLAGS => "",
14
+ :DEFINE_FLAG => "-D",
15
+ :OBJECT_FILE_FLAG => "-o",
16
+ :OBJ_FLAG_SPACE => true,
17
+ :COMPILE_FLAGS => "-c",
18
+ :DEP_FLAGS => "--dep-file=",
19
+ :DEP_FLAGS_SPACE => false,
20
+ :PREPRO_FLAGS => "-P"
21
+ })
22
+
23
+ TaskingChain[:COMPILER][:CPP] = Utils.deep_copy(TaskingChain[:COMPILER][:C])
24
+ TaskingChain[:COMPILER][:CPP][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:CPP][:SOURCE_FILE_ENDINGS]
25
+
26
+ TaskingChain[:COMPILER][:ASM] = Utils.deep_copy(TaskingChain[:COMPILER][:C])
27
+ TaskingChain[:COMPILER][:ASM][:COMMAND] = "astc"
28
+ TaskingChain[:COMPILER][:ASM][:COMPILE_FLAGS] = ""
29
+ TaskingChain[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS]
30
+ TaskingChain[:COMPILER][:ASM][:PREPRO_FLAGS] = ""
31
+
32
+ TaskingChain[:ARCHIVER][:COMMAND] = "artc"
33
+ TaskingChain[:ARCHIVER][:ARCHIVE_FLAGS] = "-rcu"
34
+
35
+ TaskingChain[:LINKER][:COMMAND] = "cctc"
36
+ TaskingChain[:LINKER][:SCRIPT] = "--lsl-file="
37
+ TaskingChain[:LINKER][:SCRIPT_SPACE] = false
38
+ TaskingChain[:LINKER][:USER_LIB_FLAG] = "-l"
39
+ TaskingChain[:LINKER][:EXE_FLAG] = "-o"
40
+ TaskingChain[:LINKER][:LIB_FLAG] = "-l"
41
+ TaskingChain[:LINKER][:LIB_PATH_FLAG] = "-L"
42
+ TaskingChain[:LINKER][:MAP_FILE_PIPE] = false
43
+ TaskingChain[:LINKER][:MAP_FILE_FLAG] = "--map-file="
44
+ TaskingChain[:LINKER][:OUTPUT_ENDING] = ".elf"
45
+
46
+ taskingCompilerErrorParser = TaskingCompilerErrorParser.new
47
+ TaskingChain[:COMPILER][:C][:ERROR_PARSER] = taskingCompilerErrorParser
48
+ TaskingChain[:COMPILER][:CPP][:ERROR_PARSER] = taskingCompilerErrorParser
49
+ TaskingChain[:COMPILER][:ASM][:ERROR_PARSER] = taskingCompilerErrorParser
50
+ TaskingChain[:ARCHIVER][:ERROR_PARSER] = taskingCompilerErrorParser
51
+ TaskingChain[:LINKER][:ERROR_PARSER] = TaskingLinkerErrorParser.new
52
+
53
+ TaskingChain[:COMPILER][:DEP_FILE_SINGLE_LINE] = true
54
+ end
55
+ end
@@ -215,6 +215,7 @@ module Bake
215
215
  def callSteps(method)
216
216
 
217
217
  @config.writeEnvVars()
218
+ Thread.current[:lastCommand] = nil
218
219
 
219
220
  preSteps.each do |step|
220
221
  @result = executeStep(step, method) if @result
@@ -12,9 +12,6 @@ module Bake
12
12
  @projectName = config.parent.name
13
13
  @projectDir = config.get_project_dir
14
14
  @config_date = Time.now
15
-
16
- @printedCmdAlternate = false
17
- @lastCommand = nil
18
15
  end
19
16
 
20
17
  def check_config_file()
@@ -89,18 +86,18 @@ module Bake
89
86
  end
90
87
 
91
88
  def printCmd(cmd, alternate, reason, forceVerbose)
92
- if (cmd == @lastCommand)
93
- if (Bake.options.verbose >= 2 or (@printedCmdAlternate and not forceVerbose))
89
+ if (cmd == Thread.current[:lastCommand])
90
+ if (Bake.options.verbose >= 2 or (Thread.current[:printedCmdAlternate] and not forceVerbose))
94
91
  return
95
92
  end
96
93
  end
97
94
 
98
- @lastCommand = cmd
95
+ Thread.current[:lastCommand] = cmd
99
96
 
100
97
  return if Bake.options.verbose == 0 and not forceVerbose
101
98
 
102
99
  if forceVerbose or Bake.options.verbose >= 2 or not alternate
103
- @printedCmdAlternate = false
100
+ Thread.current[:printedCmdAlternate] = false
104
101
  puts "" if Bake.options.verbose >= 2 # for A.K. :-)
105
102
  if Bake.options.verbose >= 3
106
103
  exedIn = "\n(executed in '#{@projectDir}')"
@@ -116,7 +113,7 @@ module Bake
116
113
  puts cmd + exedIn + because
117
114
  end
118
115
  else
119
- @printedCmdAlternate = true
116
+ Thread.current[:printedCmdAlternate] = true
120
117
  puts alternate
121
118
  end
122
119
 
@@ -190,13 +190,15 @@ module Bake
190
190
 
191
191
  if not (cmdLineCheck and BlockBase.isCmdLineEqual?(cmd, cmdLineFile))
192
192
  BlockBase.prepareOutput(object)
193
+ outputType = Bake.options.analyze ? "Analyzing" : (Bake.options.prepro ? "Preprocessing" : "Compiling")
194
+ printCmd(cmd, "#{outputType} #{source}", reason, false)
195
+ flushOutput()
193
196
  BlockBase.writeCmdLineFile(cmd, cmdLineFile)
197
+
194
198
  success = true
195
199
  consoleOutput = ""
196
200
  success, consoleOutput = ProcessHelper.run(cmd, false, false) if !Bake.options.dry
197
-
198
- outputType = Bake.options.analyze ? "Analyzing" : (Bake.options.prepro ? "Preprocessing" : "Compiling")
199
- incList = process_result(cmd, consoleOutput, compiler[:ERROR_PARSER], "#{outputType} #{source}", reason, success)
201
+ incList = process_result(cmd, consoleOutput, compiler[:ERROR_PARSER], nil, reason, success)
200
202
 
201
203
  if type != :ASM and not Bake.options.analyze and not Bake.options.prepro
202
204
  incList = Compile.read_depfile(dep_filename, @projectDir, @block.tcs[:COMPILER][:DEP_FILE_SINGLE_LINE]) if incList.nil?
@@ -219,7 +221,16 @@ module Bake
219
221
  if singleLine
220
222
  File.readlines(dep_filename).each do |line|
221
223
  splitted = line.split(": ")
222
- deps << splitted[1].gsub(/[\\]/,'/') if splitted.length > 1
224
+ if splitted.length > 1
225
+ deps << splitted[1].gsub(/[\\]/,'/')
226
+ else
227
+ splitted = line.split(":\t") # right now only for tasking compiler
228
+ if splitted.length > 1
229
+ dep = splitted[1].gsub(/[\\]/,'/').strip
230
+ dep = dep[1..-2] if dep.start_with?("\"")
231
+ deps << dep
232
+ end
233
+ end
223
234
  end
224
235
  else
225
236
  deps_string = File.read(dep_filename)
@@ -257,6 +268,19 @@ module Bake
257
268
  @mutex ||= Mutex.new
258
269
  end
259
270
 
271
+ def flushOutput
272
+ mutex.synchronize do
273
+ tmp = Thread.current[:stdout]
274
+ if tmp.string.length > 0
275
+ Thread.current[:stdout] = Thread.current[:tmpStdout]
276
+ puts tmp.string
277
+ tmp.reopen("")
278
+ Thread.current[:stdout] = tmp
279
+ end
280
+ end
281
+ end
282
+
283
+
260
284
  def execute
261
285
  Dir.chdir(@projectDir) do
262
286
 
@@ -274,10 +298,10 @@ module Bake
274
298
  end
275
299
 
276
300
  s = StringIO.new
277
- tmp = Thread.current[:stdout]
278
- Thread.current[:stdout] = s unless tmp
279
-
301
+ Thread.current[:tmpStdout] = Thread.current[:stdout]
302
+ Thread.current[:stdout] = s unless Thread.current[:tmpStdout]
280
303
  Thread.current[:filelist] = Set.new if Bake.options.filelist
304
+ Thread.current[:lastCommand] = nil
281
305
 
282
306
  result = false
283
307
  begin
@@ -294,7 +318,7 @@ module Bake
294
318
 
295
319
  jobs.set_failed if not result
296
320
 
297
- Thread.current[:stdout] = tmp
321
+ Thread.current[:stdout] = Thread.current[:tmpStdout]
298
322
 
299
323
  mutex.synchronize do
300
324
  fileListBlock.merge(Thread.current[:filelist]) if Bake.options.filelist
@@ -1,170 +1,176 @@
1
- require 'blocks/blockBase'
2
-
3
- module Bake
4
-
5
- module Blocks
6
-
7
- class Executable < BlockBase
8
-
9
- def initialize(block, config, referencedConfigs, compileBlock)
10
- super(block, config, referencedConfigs)
11
- @compileBlock = compileBlock
12
-
13
- calcArtifactName
14
- calcMapFile
15
- calcLinkerScript
16
-
17
- end
18
-
19
- def calcLinkerScript
20
- @linker_script = @config.linkerScript.nil? ? nil : @block.convPath(@config.linkerScript)
21
- end
22
-
23
- def calcArtifactName
24
- if not @config.artifactName.nil? and @config.artifactName.name != ""
25
- baseFilename = @config.artifactName.name
26
- else
27
- baseFilename = "#{@projectName}#{Bake::Toolchain.outputEnding(@block.tcs)}"
28
- end
29
- @exe_name ||= File.join([@block.output_dir, baseFilename])
30
- end
31
-
32
- def calcCmdlineFile()
33
- @exe_name + ".cmdline"
34
- end
35
-
36
- def calcMapFile
37
- @mapfile = nil
38
- if (not Bake.options.docu) and (not @config.mapFile.nil?)
39
- if @config.mapFile.name == ""
40
- @mapfile = @exe_name.chomp(File.extname(@exe_name)) + ".map"
41
- else
42
- @mapfile = @config.mapFile.name
43
- end
44
- end
45
- end
46
-
47
- def ignore?
48
- Bake.options.prepro
49
- end
50
-
51
- def needed?(libs)
52
- return "because linkOnly was specified" if Bake.options.linkOnly
53
-
54
- # exe
55
- return "because executable does not exist" if not File.exists?(@exe_name)
56
-
57
- eTime = File.mtime(@exe_name)
58
-
59
- # linkerscript
60
- if @linker_script
61
- return "because linker script does not exist - will most probably result in an error" if not File.exists?(@linker_script)
62
- return "because linker script is newer than executable" if eTime < File.mtime(@linker_script)
63
- end
64
-
65
- # sources
66
- @compileBlock.objects.each do |obj|
67
- return "because object #{obj} does not exist" if not File.exists?(obj)
68
- return "because object #{obj} is newer than executable" if eTime < File.mtime(obj)
69
- end
70
-
71
- # libs
72
- libs.each do |lib|
73
- return "because library #{lib} does not exist" if not File.exists?(lib)
74
- return "because library #{lib} is newer than executable" if eTime < File.mtime(lib)
75
- end
76
- false
77
- end
78
-
79
- def execute
80
- Dir.chdir(@projectDir) do
81
- childs = @block.getBlocks(:childs)
82
- return false if childs.any? { |b| b.result == false }
83
-
84
- allSources = []
85
- (childs + [@block]).each do |b|
86
- Dir.chdir(b.projectDir) do
87
- b.getCompileBlocks.each do |c|
88
- allSources += c.calcSources(true, true).map { |s| File.expand_path(s) }
89
- end
90
- end
91
- end
92
- duplicateSources = allSources.group_by{ |e| e }.select { |k, v| v.size > 1 }.map(&:first)
93
- duplicateSources.each do |d|
94
- Bake.formatter.printWarning("Source compiled more than once: #{d}")
95
- end
96
-
97
- libs, linker_libs_array = LibElements.calc_linker_lib_string(@block, @block.tcs)
98
-
99
- cmdLineCheck = false
100
- cmdLineFile = calcCmdlineFile()
101
-
102
- return true if ignore?
103
- reason = needed?(libs)
104
- if not reason
105
- cmdLineCheck = true
106
- reason = config_changed?(cmdLineFile)
107
- end
108
-
109
- linker = @block.tcs[:LINKER]
110
-
111
- cmd = Utils.flagSplit(linker[:PREFIX], false)
112
- cmd += Utils.flagSplit(linker[:COMMAND], false) # g++
113
- cmd += linker[:MUST_FLAGS].split(" ")
114
- cmd += Bake::Utils::flagSplit(linker[:FLAGS],true)
115
-
116
-
117
- cmd << linker[:EXE_FLAG]
118
- if linker[:EXE_FLAG_SPACE]
119
- cmd << @exe_name
120
- else
121
- cmd[cmd.length-1] += @exe_name
122
- end
123
-
124
- cmd += @compileBlock.objects
125
- cmd << linker[:SCRIPT] if @linker_script # -T
126
- cmd << @linker_script if @linker_script # xy/xy.dld
127
- cmd += linker[:MAP_FILE_FLAG].split(" ") if @mapfile # -Wl,-m6
128
- if not linker[:MAP_FILE_PIPE] and @mapfile
129
- cmd[cmd.length-1] << @mapfile
130
- end
131
- cmd += Bake::Utils::flagSplit(linker[:LIB_PREFIX_FLAGS],true) # "-Wl,--whole-archive "
132
- cmd += linker_libs_array
133
- cmd += Bake::Utils::flagSplit(linker[:LIB_POSTFIX_FLAGS],true) # "-Wl,--no-whole-archive "
134
-
135
- mapfileStr = (@mapfile and linker[:MAP_FILE_PIPE]) ? " >#{@mapfile}" : ""
136
-
137
- # pre print because linking can take much time
138
- cmdLinePrint = cmd.dup
139
- outPipe = (@mapfile and linker[:MAP_FILE_PIPE]) ? "#{@mapfile}" : nil
140
- cmdLinePrint << "> #{outPipe}" if outPipe
141
-
142
- if cmdLineCheck and BlockBase.isCmdLineEqual?(cmd, cmdLineFile)
143
- success = true
144
- else
145
- ToCxx.linkBlock
146
-
147
- BlockBase.prepareOutput(@exe_name)
148
-
149
- printCmd(cmdLinePrint, "Linking #{@exe_name}", reason, false)
150
- BlockBase.writeCmdLineFile(cmd, cmdLineFile)
151
- success = true
152
- consoleOutput = ""
153
- success, consoleOutput = ProcessHelper.run(cmd, false, false, outPipe) if !Bake.options.dry
154
- process_result(cmdLinePrint, consoleOutput, linker[:ERROR_PARSER], nil, reason, success)
155
-
156
- check_config_file()
157
- end
158
-
159
- return success
160
- end
161
- end
162
-
163
- def clean
164
- return cleanProjectDir()
165
- end
166
-
167
- end
168
-
169
- end
1
+ require 'blocks/blockBase'
2
+
3
+ module Bake
4
+
5
+ module Blocks
6
+
7
+ class Executable < BlockBase
8
+
9
+ def initialize(block, config, referencedConfigs, compileBlock)
10
+ super(block, config, referencedConfigs)
11
+ @compileBlock = compileBlock
12
+
13
+ calcArtifactName
14
+ calcMapFile
15
+ calcLinkerScript
16
+
17
+ end
18
+
19
+ def calcLinkerScript
20
+ @linker_script = @config.linkerScript.nil? ? nil : @block.convPath(@config.linkerScript)
21
+ end
22
+
23
+ def calcArtifactName
24
+ if not @config.artifactName.nil? and @config.artifactName.name != ""
25
+ baseFilename = @config.artifactName.name
26
+ else
27
+ baseFilename = "#{@projectName}#{Bake::Toolchain.outputEnding(@block.tcs)}"
28
+ end
29
+ @exe_name ||= File.join([@block.output_dir, baseFilename])
30
+ end
31
+
32
+ def calcCmdlineFile()
33
+ @exe_name + ".cmdline"
34
+ end
35
+
36
+ def calcMapFile
37
+ @mapfile = nil
38
+ if (not Bake.options.docu) and (not @config.mapFile.nil?)
39
+ if @config.mapFile.name == ""
40
+ @mapfile = @exe_name.chomp(File.extname(@exe_name)) + ".map"
41
+ else
42
+ @mapfile = @config.mapFile.name
43
+ end
44
+ end
45
+ end
46
+
47
+ def ignore?
48
+ Bake.options.prepro
49
+ end
50
+
51
+ def needed?(libs)
52
+ return "because linkOnly was specified" if Bake.options.linkOnly
53
+
54
+ # exe
55
+ return "because executable does not exist" if not File.exists?(@exe_name)
56
+
57
+ eTime = File.mtime(@exe_name)
58
+
59
+ # linkerscript
60
+ if @linker_script
61
+ return "because linker script does not exist - will most probably result in an error" if not File.exists?(@linker_script)
62
+ return "because linker script is newer than executable" if eTime < File.mtime(@linker_script)
63
+ end
64
+
65
+ # sources
66
+ @compileBlock.objects.each do |obj|
67
+ return "because object #{obj} does not exist" if not File.exists?(obj)
68
+ return "because object #{obj} is newer than executable" if eTime < File.mtime(obj)
69
+ end
70
+
71
+ # libs
72
+ libs.each do |lib|
73
+ return "because library #{lib} does not exist" if not File.exists?(lib)
74
+ return "because library #{lib} is newer than executable" if eTime < File.mtime(lib)
75
+ end
76
+ false
77
+ end
78
+
79
+ def execute
80
+ Dir.chdir(@projectDir) do
81
+ childs = @block.getBlocks(:childs)
82
+ return false if childs.any? { |b| b.result == false }
83
+
84
+ allSources = []
85
+ (childs + [@block]).each do |b|
86
+ Dir.chdir(b.projectDir) do
87
+ b.getCompileBlocks.each do |c|
88
+ allSources += c.calcSources(true, true).map { |s| File.expand_path(s) }
89
+ end
90
+ end
91
+ end
92
+ duplicateSources = allSources.group_by{ |e| e }.select { |k, v| v.size > 1 }.map(&:first)
93
+ duplicateSources.each do |d|
94
+ Bake.formatter.printWarning("Source compiled more than once: #{d}")
95
+ end
96
+
97
+ libs, linker_libs_array = LibElements.calc_linker_lib_string(@block, @block.tcs)
98
+
99
+ cmdLineCheck = false
100
+ cmdLineFile = calcCmdlineFile()
101
+
102
+ return true if ignore?
103
+ reason = needed?(libs)
104
+ if not reason
105
+ cmdLineCheck = true
106
+ reason = config_changed?(cmdLineFile)
107
+ end
108
+
109
+ linker = @block.tcs[:LINKER]
110
+
111
+ cmd = Utils.flagSplit(linker[:PREFIX], false)
112
+ cmd += Utils.flagSplit(linker[:COMMAND], false) # g++
113
+ cmd += linker[:MUST_FLAGS].split(" ")
114
+ cmd += Bake::Utils::flagSplit(linker[:FLAGS],true)
115
+
116
+
117
+ cmd << linker[:EXE_FLAG]
118
+ if linker[:EXE_FLAG_SPACE]
119
+ cmd << @exe_name
120
+ else
121
+ cmd[cmd.length-1] += @exe_name
122
+ end
123
+
124
+ cmd += @compileBlock.objects
125
+ if @linker_script
126
+ if linker[:SCRIPT_SPACE]
127
+ cmd << linker[:SCRIPT] # -T
128
+ cmd << @linker_script # xy/xy.dld
129
+ else
130
+ cmd << linker[:SCRIPT]+@linker_script
131
+ end
132
+ end
133
+ cmd += linker[:MAP_FILE_FLAG].split(" ") if @mapfile # -Wl,-m6
134
+ if not linker[:MAP_FILE_PIPE] and @mapfile
135
+ cmd[cmd.length-1] << @mapfile
136
+ end
137
+ cmd += Bake::Utils::flagSplit(linker[:LIB_PREFIX_FLAGS],true) # "-Wl,--whole-archive "
138
+ cmd += linker_libs_array
139
+ cmd += Bake::Utils::flagSplit(linker[:LIB_POSTFIX_FLAGS],true) # "-Wl,--no-whole-archive "
140
+
141
+ mapfileStr = (@mapfile and linker[:MAP_FILE_PIPE]) ? " >#{@mapfile}" : ""
142
+
143
+ # pre print because linking can take much time
144
+ cmdLinePrint = cmd.dup
145
+ outPipe = (@mapfile and linker[:MAP_FILE_PIPE]) ? "#{@mapfile}" : nil
146
+ cmdLinePrint << "> #{outPipe}" if outPipe
147
+
148
+ if cmdLineCheck and BlockBase.isCmdLineEqual?(cmd, cmdLineFile)
149
+ success = true
150
+ else
151
+ ToCxx.linkBlock
152
+
153
+ BlockBase.prepareOutput(@exe_name)
154
+
155
+ printCmd(cmdLinePrint, "Linking #{@exe_name}", reason, false)
156
+ BlockBase.writeCmdLineFile(cmd, cmdLineFile)
157
+ success = true
158
+ consoleOutput = ""
159
+ success, consoleOutput = ProcessHelper.run(cmd, false, false, outPipe) if !Bake.options.dry
160
+ process_result(cmdLinePrint, consoleOutput, linker[:ERROR_PARSER], nil, reason, success)
161
+
162
+ check_config_file()
163
+ end
164
+
165
+ return success
166
+ end
167
+ end
168
+
169
+ def clean
170
+ return cleanProjectDir()
171
+ end
172
+
173
+ end
174
+
175
+ end
170
176
  end
@@ -1,7 +1,7 @@
1
1
  module Bake
2
2
  class Version
3
3
  def self.number
4
- "2.31.0"
4
+ "2.31.2"
5
5
  end
6
6
 
7
7
  def self.printBakeVersion(ry = "")
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.31.0
4
+ version: 2.31.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Schaal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-03 00:00:00.000000000 Z
11
+ date: 2017-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rtext
@@ -162,6 +162,8 @@ files:
162
162
  - lib/bake/toolchain/errorparser/msvc_compiler_error_parser.rb
163
163
  - lib/bake/toolchain/errorparser/msvc_linker_error_parser.rb
164
164
  - lib/bake/toolchain/errorparser/process_output.rb
165
+ - lib/bake/toolchain/errorparser/tasking_compiler_error_parser.rb
166
+ - lib/bake/toolchain/errorparser/tasking_linker_error_parser.rb
165
167
  - lib/bake/toolchain/errorparser/ti_compiler_error_parser.rb
166
168
  - lib/bake/toolchain/errorparser/ti_linker_error_parser.rb
167
169
  - lib/bake/toolchain/gcc.rb
@@ -170,6 +172,7 @@ files:
170
172
  - lib/bake/toolchain/keil.rb
171
173
  - lib/bake/toolchain/msvc.rb
172
174
  - lib/bake/toolchain/provider.rb
175
+ - lib/bake/toolchain/tasking.rb
173
176
  - lib/bake/toolchain/ti.rb
174
177
  - lib/bake/util.rb
175
178
  - lib/bakeclean/options/options.rb