bake-toolkit 2.62.0 → 2.63.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/bin/bakery +25 -0
- data/lib/bake/config/checks.rb +4 -0
- data/lib/bake/libElement.rb +13 -0
- data/lib/bake/model/metamodel.rb +1 -0
- data/lib/bake/options/options.rb +8 -7
- data/lib/blocks/block.rb +45 -14
- data/lib/blocks/compile.rb +19 -5
- data/lib/blocks/executable.rb +4 -0
- data/lib/common/cleanup.rb +1 -1
- data/lib/common/version.rb +1 -1
- data/lib/tocxx.rb +26 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 225fc376c9b3409d01e708f2ec67bb2d80f9c081d26de339d5b4bb3451141e50
|
4
|
+
data.tar.gz: e3769b3550aee5ae45685d8445b0ea3bfec59eea4ffa885900a461c82269b16b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 419125459eab7fb1ea49939389ff85c43ef6e7ddfd2fdc4bbd555e0a5b8d0e282d28e6e52da5ab3bac1d08d1b5cee4d163315d99bceab7700011aa5f3feda46f
|
7
|
+
data.tar.gz: 3e273c6f6a16f89ba30b1d40c8a787a9439693ba50dd33d4667328c91894b7302ae3c1f6e9f2c4d48078fdbba545270fb5c73ff0158f0e6766bc640774808896
|
data/bin/bakery
CHANGED
@@ -24,6 +24,8 @@ require_relative "../lib/bakery/buildPattern"
|
|
24
24
|
require_relative '../lib/common/ext/stdout'
|
25
25
|
require_relative '../lib/common/cleanup'
|
26
26
|
|
27
|
+
require 'json'
|
28
|
+
|
27
29
|
module Bake
|
28
30
|
|
29
31
|
@options = BakeryOptions.new(ARGV)
|
@@ -104,6 +106,7 @@ module Bake
|
|
104
106
|
|
105
107
|
exitValue = 0
|
106
108
|
abort = false
|
109
|
+
@ideps = {}
|
107
110
|
@toBuild.each do |bp|
|
108
111
|
currentRun += 1
|
109
112
|
p = File.dirname(bp.proj)
|
@@ -135,6 +138,12 @@ module Bake
|
|
135
138
|
puts e.message
|
136
139
|
end
|
137
140
|
|
141
|
+
if Bake.options.dev_features.detect { |x| x.start_with?("dep-overview=") }
|
142
|
+
Bake::ToCxx.include_deps.each do |pdir, deps|
|
143
|
+
@ideps[pdir] = Set.new if !@ideps.has_key?(pdir)
|
144
|
+
@ideps[pdir].merge(deps)
|
145
|
+
end
|
146
|
+
end
|
138
147
|
Bake::cleanup
|
139
148
|
ExitHelper.reset_exit_code
|
140
149
|
|
@@ -148,6 +157,22 @@ module Bake
|
|
148
157
|
end
|
149
158
|
end
|
150
159
|
end
|
160
|
+
|
161
|
+
dep_json = Bake.options.dev_features.detect { |x| x.start_with?("dep-overview=") }
|
162
|
+
if dep_json
|
163
|
+
# remove duplicates
|
164
|
+
@ideps.each do |m,d|
|
165
|
+
d.delete_if {|d_tbc| d_tbc.start_with?(m) }
|
166
|
+
d.delete_if {|d_tbc| d.any? {|any_d| d_tbc != any_d && d_tbc.start_with?(any_d + "/") } }
|
167
|
+
end
|
168
|
+
# generate format for output
|
169
|
+
ideps = []
|
170
|
+
@ideps.each do |m,d|
|
171
|
+
ideps << {"module" => m, "dependencies" => d.sort.to_a}
|
172
|
+
end
|
173
|
+
# output
|
174
|
+
File.write(dep_json[13..-1], JSON.pretty_generate(ideps))
|
175
|
+
end
|
151
176
|
|
152
177
|
print "\n"
|
153
178
|
|
data/lib/bake/config/checks.rb
CHANGED
@@ -103,6 +103,10 @@ module Bake
|
|
103
103
|
Bake.formatter.printError("IncludeDir must have inject OR infix (deprecated)", inc)
|
104
104
|
ExitHelper.exit(1)
|
105
105
|
end
|
106
|
+
if (inc.name.empty? || inc.name[0] == " ")
|
107
|
+
Bake.formatter.printError("IncludeDir must not be empty or start with a space", inc)
|
108
|
+
ExitHelper.exit(1)
|
109
|
+
end
|
106
110
|
end if config.respond_to?("includeDir")
|
107
111
|
|
108
112
|
if not ["", "yes", "no", "all"].include?config.mergeInc
|
data/lib/bake/libElement.rb
CHANGED
@@ -60,6 +60,19 @@ module Bake
|
|
60
60
|
@@source_libraries << adaptedPath
|
61
61
|
end
|
62
62
|
end
|
63
|
+
le = block.library ? block.library : (block.executable ? block.executable : nil)
|
64
|
+
if le
|
65
|
+
cb = le.compileBlock
|
66
|
+
if !cb.nil? && !cb.object_files_ignored_in_lib.nil?
|
67
|
+
cb.object_files_ignored_in_lib.each do |ldirect|
|
68
|
+
adaptedPath, prefix = adaptPath(ldirect, block, prefix)
|
69
|
+
if (!block.prebuild or File.exist?adaptedPath)
|
70
|
+
@@linker_libs_array << adaptedPath
|
71
|
+
@@source_libraries << adaptedPath
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
63
76
|
end
|
64
77
|
|
65
78
|
def self.collect_recursive(block, levels = -1)
|
data/lib/bake/model/metamodel.rb
CHANGED
@@ -147,6 +147,7 @@ module Bake
|
|
147
147
|
class Files < ModelElement
|
148
148
|
has_attr 'name', String, :defaultValueLiteral => ""
|
149
149
|
has_attr 'compileOnly', Boolean, :defaultValueLiteral => "false"
|
150
|
+
has_attr 'linkDirectly', Boolean, :defaultValueLiteral => "false"
|
150
151
|
contains_many 'define', Define, 'parent'
|
151
152
|
contains_many 'flags', Flags, 'parent'
|
152
153
|
end
|
data/lib/bake/options/options.rb
CHANGED
@@ -11,13 +11,6 @@ require_relative '../../common/crc32'
|
|
11
11
|
|
12
12
|
module Bake
|
13
13
|
|
14
|
-
def self.options
|
15
|
-
@@options
|
16
|
-
end
|
17
|
-
def self.options=(options)
|
18
|
-
@@options = options
|
19
|
-
end
|
20
|
-
|
21
14
|
class Options < Parser
|
22
15
|
attr_accessor :build_config, :nocache, :analyze, :eclipseOrder, :showConfigs, :cc2j_filename
|
23
16
|
attr_reader :main_dir, :working_dir, :project, :filename, :main_project_name, :buildDirDelimiter, :dot, :dotFilename # String
|
@@ -393,6 +386,14 @@ module Bake
|
|
393
386
|
|
394
387
|
end
|
395
388
|
|
389
|
+
def self.options
|
390
|
+
@@options ||= Options.new([])
|
391
|
+
end
|
392
|
+
|
393
|
+
def self.options=(options)
|
394
|
+
@@options = options
|
395
|
+
end
|
396
|
+
|
396
397
|
end
|
397
398
|
|
398
399
|
|
data/lib/blocks/block.rb
CHANGED
@@ -22,7 +22,7 @@ module Bake
|
|
22
22
|
@@delayed_result = true
|
23
23
|
@@threads = []
|
24
24
|
|
25
|
-
attr_reader :lib_elements, :projectDir, :library, :config, :projectName, :configName, :prebuild, :output_dir, :tcs
|
25
|
+
attr_reader :lib_elements, :projectDir, :library, :executable, :config, :projectName, :configName, :prebuild, :output_dir, :tcs
|
26
26
|
attr_accessor :visited, :inDeps, :result, :bes, :besDirect
|
27
27
|
|
28
28
|
def startupSteps
|
@@ -64,7 +64,11 @@ module Bake
|
|
64
64
|
def set_library(library)
|
65
65
|
@library = library
|
66
66
|
end
|
67
|
-
|
67
|
+
|
68
|
+
def set_executable(executable)
|
69
|
+
@executable = executable
|
70
|
+
end
|
71
|
+
|
68
72
|
def qname()
|
69
73
|
@projectName + "," + @configName
|
70
74
|
end
|
@@ -74,6 +78,7 @@ module Bake
|
|
74
78
|
@prebuild = prebuild
|
75
79
|
@visited = false
|
76
80
|
@library = nil
|
81
|
+
@executable = nil
|
77
82
|
@config = config
|
78
83
|
@referencedConfigs = referencedConfigs
|
79
84
|
@projectName = config.parent.name
|
@@ -119,6 +124,13 @@ module Bake
|
|
119
124
|
resPathMagic = inc[1..-1].join("/") # within self
|
120
125
|
resPathMagic = "." if resPathMagic == ""
|
121
126
|
res << resPathMagic
|
127
|
+
if warnIfLocal
|
128
|
+
if resPathMagic == "."
|
129
|
+
Bake.formatter.printInfo("\"#{d}\" uses path magic in IncludeDir, please use \".\" instead", elem)
|
130
|
+
else
|
131
|
+
Bake.formatter.printInfo("\"#{d}\" uses path magic in IncludeDir, please omit \"#{inc[0]}/\" or use \"./#{resPathMagic}\"", elem) if warnIfLocal
|
132
|
+
end
|
133
|
+
end
|
122
134
|
elsif @referencedConfigs.include?(inc[0])
|
123
135
|
dirOther = @referencedConfigs[inc[0]].first.parent.get_project_dir
|
124
136
|
resPathMagic = File.rel_from_to_project(@projectDir, dirOther, false)
|
@@ -126,17 +138,19 @@ module Bake
|
|
126
138
|
resPathMagic = resPathMagic + "/" + postfix if postfix != ""
|
127
139
|
resPathMagic = "." if resPathMagic == ""
|
128
140
|
res << resPathMagic
|
141
|
+
Bake.formatter.printInfo("\"#{d}\" uses path magic in IncludeDir, please use a Dependency to \"#{inc[0]}\" instead", elem) if warnIfLocal
|
129
142
|
end
|
130
143
|
|
131
144
|
if File.exists?(@projectDir + "/" + d) # prio 2: local, e.g. "include"
|
132
145
|
res << d
|
133
146
|
end
|
134
147
|
|
135
|
-
#
|
148
|
+
# prio 3: check if dir exists without Project.meta entry
|
136
149
|
Bake.options.roots.each do |r|
|
137
150
|
absIncDir = r.dir+"/"+d
|
138
151
|
if File.exists?(absIncDir)
|
139
152
|
res << File.rel_from_to_project(@projectDir,absIncDir,false)
|
153
|
+
Bake.formatter.printInfo("\"#{d}\" uses path magic in IncludeDir, please create a Project.meta in \"#{absIncDir}\" or upwards and use a Dependency instead", elem) if warnIfLocal && res.length == 1
|
140
154
|
end
|
141
155
|
end
|
142
156
|
|
@@ -355,14 +369,14 @@ module Bake
|
|
355
369
|
def callSteps(method)
|
356
370
|
@config.writeEnvVars()
|
357
371
|
Thread.current[:lastCommand] = nil
|
358
|
-
allSteps = (preSteps + mainSteps + postSteps)
|
372
|
+
@allSteps = (preSteps + mainSteps + postSteps)
|
359
373
|
# check if we have to delay the output (if the last step of this block is not in a thread)
|
360
374
|
@outputStep = nil
|
361
|
-
allSteps.each { |step| @outputStep = independent?(method, step) ? step : nil }
|
362
|
-
while
|
375
|
+
@allSteps.each { |step| @outputStep = independent?(method, step) ? step : nil }
|
376
|
+
while !@allSteps.empty?
|
363
377
|
parallel = []
|
364
|
-
while allSteps.first && independent?(method, allSteps.first)
|
365
|
-
parallel << allSteps.shift
|
378
|
+
while @allSteps.first && independent?(method, @allSteps.first)
|
379
|
+
parallel << @allSteps.shift
|
366
380
|
end
|
367
381
|
if parallel.length > 0
|
368
382
|
execute_in_thread(parallel) {
|
@@ -383,7 +397,7 @@ module Bake
|
|
383
397
|
end
|
384
398
|
}
|
385
399
|
else
|
386
|
-
step = allSteps.shift
|
400
|
+
step = @allSteps.shift
|
387
401
|
Blocks::Block::waitForAllThreads()
|
388
402
|
@result = executeStep(step, method) if @result
|
389
403
|
@outputStep = nil if !@result && blockAbort?(@result)
|
@@ -404,13 +418,29 @@ module Bake
|
|
404
418
|
return true
|
405
419
|
end
|
406
420
|
|
407
|
-
|
408
|
-
|
421
|
+
SyncOut.mutex.synchronize do
|
422
|
+
if @visited
|
423
|
+
while !defined?(@allSteps) || !@allSteps.empty?
|
424
|
+
sleep(0.1)
|
425
|
+
end
|
426
|
+
return true # maybe to improve later (return false if step has a failed non-independent step)
|
427
|
+
end
|
428
|
+
@visited = true
|
429
|
+
end
|
409
430
|
|
410
431
|
@inDeps = true
|
411
|
-
|
432
|
+
begin
|
433
|
+
depResult = callDeps(:execute)
|
434
|
+
rescue Exception => e
|
435
|
+
@allSteps = []
|
436
|
+
raise
|
437
|
+
end
|
438
|
+
|
412
439
|
@inDeps = false
|
413
|
-
|
440
|
+
if blockAbort?(depResult)
|
441
|
+
@allSteps = []
|
442
|
+
return @result && depResult
|
443
|
+
end
|
414
444
|
|
415
445
|
Bake::IDEInterface.instance.set_build_info(@projectName, @configName)
|
416
446
|
begin
|
@@ -445,8 +475,9 @@ module Bake
|
|
445
475
|
SyncOut.discardStreams()
|
446
476
|
end
|
447
477
|
end
|
478
|
+
@allSteps = []
|
448
479
|
end
|
449
|
-
|
480
|
+
|
450
481
|
return (depResult && @result)
|
451
482
|
end
|
452
483
|
|
data/lib/blocks/compile.rb
CHANGED
@@ -47,7 +47,7 @@ module Bake
|
|
47
47
|
|
48
48
|
class Compile < BlockBase
|
49
49
|
|
50
|
-
attr_reader :objects, :include_list, :source_files_ignored_in_lib
|
50
|
+
attr_reader :objects, :include_list, :source_files_ignored_in_lib, :object_files_ignored_in_lib
|
51
51
|
|
52
52
|
def mutex
|
53
53
|
@mutex ||= Mutex.new
|
@@ -513,6 +513,7 @@ module Bake
|
|
513
513
|
end
|
514
514
|
|
515
515
|
def calcObjects
|
516
|
+
@object_files_ignored_in_lib = []
|
516
517
|
@source_files.each do |source|
|
517
518
|
type = get_source_type(source)
|
518
519
|
if not type.nil?
|
@@ -526,7 +527,13 @@ module Bake
|
|
526
527
|
end
|
527
528
|
end
|
528
529
|
@object_files[source] = object
|
529
|
-
|
530
|
+
if @source_files_ignored_in_lib.include?(source)
|
531
|
+
if @source_files_link_directly.include?(source)
|
532
|
+
@object_files_ignored_in_lib << object
|
533
|
+
end
|
534
|
+
else
|
535
|
+
@objects << object
|
536
|
+
end
|
530
537
|
end
|
531
538
|
end
|
532
539
|
end
|
@@ -535,6 +542,7 @@ module Bake
|
|
535
542
|
return @source_files if @source_files and not @source_files.empty?
|
536
543
|
@source_files = []
|
537
544
|
@source_files_ignored_in_lib = []
|
545
|
+
@source_files_link_directly = []
|
538
546
|
@fileTcs = {}
|
539
547
|
|
540
548
|
exclude_files = Set.new
|
@@ -564,11 +572,17 @@ module Bake
|
|
564
572
|
if ((!@fileTcs.has_key?(f)) || singleFile)
|
565
573
|
@fileTcs[f] = icf
|
566
574
|
end
|
567
|
-
|
568
|
-
|
575
|
+
if source_files.include?(f) || exclude_files.include?(f)
|
576
|
+
if (singleFile)
|
577
|
+
@source_files_ignored_in_lib << f if sources.compileOnly || sources.linkDirectly
|
578
|
+
@source_files_link_directly << f if sources.linkDirectly
|
579
|
+
end
|
580
|
+
next
|
581
|
+
end
|
569
582
|
source_files << f
|
570
583
|
@source_files << f
|
571
|
-
@source_files_ignored_in_lib << f if sources.compileOnly
|
584
|
+
@source_files_ignored_in_lib << f if sources.compileOnly || sources.linkDirectly
|
585
|
+
@source_files_link_directly << f if sources.linkDirectly
|
572
586
|
end
|
573
587
|
end
|
574
588
|
|
data/lib/blocks/executable.rb
CHANGED
@@ -6,10 +6,14 @@ module Bake
|
|
6
6
|
|
7
7
|
class Executable < BlockBase
|
8
8
|
|
9
|
+
attr_reader :compileBlock
|
10
|
+
|
9
11
|
def initialize(block, config, referencedConfigs, compileBlock)
|
10
12
|
super(block, config, referencedConfigs)
|
11
13
|
@compileBlock = compileBlock
|
12
14
|
|
15
|
+
block.set_executable(self)
|
16
|
+
|
13
17
|
calcArtifactName
|
14
18
|
calcMapFile
|
15
19
|
calcLinkerScript
|
data/lib/common/cleanup.rb
CHANGED
data/lib/common/version.rb
CHANGED
data/lib/tocxx.rb
CHANGED
@@ -45,10 +45,19 @@ module Bake
|
|
45
45
|
class ToCxx
|
46
46
|
|
47
47
|
@@linkBlock = 0
|
48
|
+
@@include_deps = {}
|
48
49
|
|
49
50
|
def self.linkBlock
|
50
51
|
@@linkBlock = 1
|
51
52
|
end
|
53
|
+
|
54
|
+
def self.include_deps
|
55
|
+
@@include_deps
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.reset_include_deps
|
59
|
+
@@include_deps = {}
|
60
|
+
end
|
52
61
|
|
53
62
|
def initialize
|
54
63
|
@configTcMap = {}
|
@@ -232,6 +241,21 @@ module Bake
|
|
232
241
|
end
|
233
242
|
end
|
234
243
|
|
244
|
+
def makeDepOverview
|
245
|
+
return if !Bake.options.dev_features.any? {|feature| feature.start_with?("dep-overview=") }
|
246
|
+
Blocks::ALL_BLOCKS.each do |name,block|
|
247
|
+
block.bes.each do |depInc|
|
248
|
+
@@include_deps[block.projectDir] = Set.new if !@@include_deps.has_key?(block.projectDir)
|
249
|
+
if (Metamodel::Dependency === depInc)
|
250
|
+
c = @referencedConfigs[depInc.name].detect { |configRef| configRef.name == depInc.config }
|
251
|
+
@@include_deps[block.projectDir] << Blocks::ALL_BLOCKS[c.qname].projectDir
|
252
|
+
else
|
253
|
+
@@include_deps[block.projectDir] << depInc.name
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
235
259
|
def makeIncs
|
236
260
|
Blocks::ALL_BLOCKS.each do |name,block|
|
237
261
|
bes2 = []
|
@@ -692,6 +716,8 @@ module Bake
|
|
692
716
|
makeGraph
|
693
717
|
puts "Profiling #{Time.now - $timeStart}: make includes..." if Bake.options.profiling
|
694
718
|
makeIncs
|
719
|
+
puts "Profiling #{Time.now - $timeStart}: make dep overview..." if Bake.options.profiling
|
720
|
+
makeDepOverview
|
695
721
|
puts "Profiling #{Time.now - $timeStart}: make uniq..." if Bake.options.profiling
|
696
722
|
makeUniq
|
697
723
|
puts "Profiling #{Time.now - $timeStart}: convert to building blocks..." if Bake.options.profiling
|
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.
|
4
|
+
version: 2.63.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Schaal
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rtext
|