bake-toolkit 2.50.0 → 2.51.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/bake +3 -0
- data/lib/adapt/config/loader.rb +4 -0
- data/lib/bake/config/checks.rb +3 -5
- data/lib/bake/libElement.rb +36 -53
- data/lib/bake/mergeConfig.rb +21 -0
- data/lib/bake/model/metamodel.rb +5 -2
- data/lib/bake/model/metamodel_ext.rb +12 -0
- data/lib/bake/options/options.rb +3 -5
- data/lib/bake/options/usage.rb +1 -2
- data/lib/bake/toolchain/gcc.rb +1 -1
- data/lib/bakeqac/filter.rb +5 -1
- data/lib/blocks/block.rb +5 -10
- data/lib/blocks/blockBase.rb +8 -0
- data/lib/blocks/compile.rb +106 -58
- data/lib/blocks/convert.rb +2 -2
- data/lib/blocks/executable.rb +13 -14
- data/lib/blocks/makefile.rb +138 -138
- data/lib/blocks/showIncludes.rb +145 -141
- data/lib/common/version.rb +1 -1
- data/lib/tocxx.rb +179 -45
- 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: 7be514890067a494671fdac7dfae9504543d2bf1bc6670d27aeaac9f7175a1a4
|
4
|
+
data.tar.gz: c98fb5849e848f75ac62e7baa64a70c3fd43b1b48bb5c1cbe824e6ae78e7349b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6fc7efce7b5c59dddcac4ab3269b0283be77205ddad4d186a88578366aa7da6dcc38b776d214580a0b5e12c9c298152fc51bcf8859ed8ef9e6eb1089a4f2e82
|
7
|
+
data.tar.gz: 6ca78e17679d93e286f23ea6f30ad73648bdb7f3fd6344551a610188e20ba9bda42e56b1ce29a5617a51c63409e40c5ab9f54cf58999086a604fef68ccec340b
|
data/bin/bake
CHANGED
@@ -11,6 +11,8 @@ STDERR.sync = true
|
|
11
11
|
require 'tocxx'
|
12
12
|
require 'socket'
|
13
13
|
|
14
|
+
puts "Profiling #{Time.now - $timeStart}: ruby includes parsed..." if ARGV.include?("--profiling")
|
15
|
+
|
14
16
|
module Bake
|
15
17
|
|
16
18
|
earlyExit = nil
|
@@ -20,6 +22,7 @@ module Bake
|
|
20
22
|
ExitHelper.exit(1)
|
21
23
|
end
|
22
24
|
|
25
|
+
puts "Profiling #{Time.now - $timeStart}: parse options..." if ARGV.include?("--profiling")
|
23
26
|
Bake.options = Options.new(ARGV)
|
24
27
|
Bake.options.parse_options
|
25
28
|
|
data/lib/adapt/config/loader.rb
CHANGED
@@ -48,6 +48,10 @@ module Bake
|
|
48
48
|
Bake.formatter.printError("Allowed types are 'replace', 'remove', 'extend' and 'push_front'.",c)
|
49
49
|
ExitHelper.exit(1)
|
50
50
|
end
|
51
|
+
if not ["", "yes", "no", "all"].include?c.mergeInc
|
52
|
+
Bake.formatter.printError("Allowed modes are 'all', 'yes', 'no' and unset.",c)
|
53
|
+
ExitHelper.exit(1)
|
54
|
+
end
|
51
55
|
end
|
52
56
|
end
|
53
57
|
|
data/lib/bake/config/checks.rb
CHANGED
@@ -78,11 +78,9 @@ module Bake
|
|
78
78
|
end
|
79
79
|
end if config.respond_to?("includeDir")
|
80
80
|
|
81
|
-
config.
|
82
|
-
|
83
|
-
|
84
|
-
ExitHelper.exit(1)
|
85
|
-
end
|
81
|
+
if not ["", "yes", "no", "all"].include?config.mergeInc
|
82
|
+
Bake.formatter.printError("Allowed modes are 'all', 'yes', 'no' and unset.",config)
|
83
|
+
ExitHelper.exit(1)
|
86
84
|
end
|
87
85
|
|
88
86
|
end
|
data/lib/bake/libElement.rb
CHANGED
@@ -29,19 +29,12 @@ module Bake
|
|
29
29
|
|
30
30
|
levels = @@linker[:LINK_ONLY_DIRECT_DEPS] ? 1 : -1
|
31
31
|
collect_recursive(block, levels)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
37
|
-
else
|
38
|
-
@@source_libraries.reverse!
|
39
|
-
@@lib_path_set.reverse!
|
40
|
-
if @@linker[:LIST_MODE] and not @@lib_path_set.empty?
|
41
|
-
@@linker_libs_array.unshift (@@linker[:LIB_PATH_FLAG] + @@lib_path_set.join(","));
|
42
|
-
end
|
43
|
-
@@linker_libs_array.reverse!
|
32
|
+
@@source_libraries.reverse!
|
33
|
+
@@lib_path_set.reverse!
|
34
|
+
if @@linker[:LIST_MODE] and not @@lib_path_set.empty?
|
35
|
+
@@linker_libs_array.unshift (@@linker[:LIB_PATH_FLAG] + @@lib_path_set.join(","));
|
44
36
|
end
|
37
|
+
@@linker_libs_array.reverse!
|
45
38
|
|
46
39
|
return [@@source_libraries + @@withpath, @@linker_libs_array]
|
47
40
|
end
|
@@ -49,7 +42,7 @@ module Bake
|
|
49
42
|
def self.adaptPath(path, block, prefix)
|
50
43
|
adaptedPath = path
|
51
44
|
if not File.is_absolute?(path)
|
52
|
-
prefix ||= File.rel_from_to_project(@@projectDir,block.projectDir)
|
45
|
+
prefix ||= File.rel_from_to_project(@@projectDir, block.projectDir)
|
53
46
|
adaptedPath = prefix + path if prefix
|
54
47
|
adaptedPath = Pathname.new(adaptedPath).cleanpath.to_s
|
55
48
|
end
|
@@ -75,59 +68,50 @@ module Bake
|
|
75
68
|
|
76
69
|
prefix = nil
|
77
70
|
|
78
|
-
if
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
adaptedPath, prefix = adaptPath(elem.value, block, prefix)
|
97
|
-
lpf = "#{@@linker[:LIB_PATH_FLAG]}#{adaptedPath}"
|
98
|
-
|
99
|
-
if not Bake.options.oldLinkOrder
|
71
|
+
if levels != 0
|
72
|
+
lib_elements = calcLibElements(block)
|
73
|
+
lib_elements += block.lib_elements unless block.lib_elements.nil?
|
74
|
+
|
75
|
+
lib_elements.reverse.each do |elem|
|
76
|
+
case elem.type
|
77
|
+
when LibElement::LIB
|
78
|
+
@@linker_libs_array << "#{@@linker[:LIB_FLAG]}#{elem.value}"
|
79
|
+
when LibElement::USERLIB
|
80
|
+
@@linker_libs_array << "#{@@linker[:USER_LIB_FLAG]}#{elem.value}"
|
81
|
+
when LibElement::LIB_WITH_PATH
|
82
|
+
adaptedPath, prefix = adaptPath(elem.value, block, prefix)
|
83
|
+
@@linker_libs_array << adaptedPath
|
84
|
+
@@withpath << adaptedPath
|
85
|
+
when LibElement::SEARCH_PATH
|
86
|
+
adaptedPath, prefix = adaptPath(elem.value, block, prefix)
|
87
|
+
lpf = "#{@@linker[:LIB_PATH_FLAG]}#{adaptedPath}"
|
88
|
+
|
100
89
|
if not @@lib_path_set.include?adaptedPath
|
101
90
|
@@lib_path_set << adaptedPath
|
102
91
|
@@linker_libs_array << lpf if @@linker[:LIST_MODE] == false
|
103
92
|
end
|
104
|
-
|
105
|
-
|
106
|
-
if not Bake.options.oldLinkOrder
|
93
|
+
|
107
94
|
# must be moved to the end, so delete it...
|
108
95
|
ind1 = @@lib_path_set.index(adaptedPath)
|
109
96
|
ind2 = @@linker_libs_array.index(lpf)
|
110
97
|
@@lib_path_set.delete_at(ind1) if not ind1.nil?
|
111
98
|
@@linker_libs_array.delete_at(ind2) if not ind2.nil?
|
112
|
-
|
113
|
-
|
114
|
-
if (not Bake.options.oldLinkOrder) or (not @@lib_path_set.include?adaptedPath)
|
99
|
+
|
115
100
|
# end place it at the end again
|
116
101
|
@@lib_path_set << adaptedPath
|
117
102
|
@@linker_libs_array << lpf if @@linker[:LIST_MODE] == false
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
103
|
+
|
104
|
+
when LibElement::DEPENDENCY
|
105
|
+
if Blocks::ALL_BLOCKS.include?elem.value
|
106
|
+
bb = Blocks::ALL_BLOCKS[elem.value]
|
107
|
+
collect_recursive(bb, levels-1)
|
108
|
+
else
|
109
|
+
# TODO: warning or error?
|
110
|
+
end
|
126
111
|
end
|
127
112
|
end
|
128
|
-
end
|
129
|
-
|
130
|
-
addOwnLib(block) if not Bake.options.oldLinkOrder
|
113
|
+
end
|
114
|
+
addOwnLib(block)
|
131
115
|
end
|
132
116
|
|
133
117
|
|
@@ -135,7 +119,6 @@ module Bake
|
|
135
119
|
lib_elements = [] # value = array pairs [type, name/path string]
|
136
120
|
|
137
121
|
block.config.libStuff.each do |l|
|
138
|
-
|
139
122
|
if (Metamodel::UserLibrary === l)
|
140
123
|
ln = l.name
|
141
124
|
ls = nil
|
data/lib/bake/mergeConfig.rb
CHANGED
@@ -39,6 +39,13 @@ module Bake
|
|
39
39
|
|
40
40
|
|
41
41
|
def replace()
|
42
|
+
if Metamodel::BaseConfig_INTERNAL === @child &&
|
43
|
+
Metamodel::BaseConfig_INTERNAL === @parent
|
44
|
+
if @child.mergeInc != "" && @parent.mergeInc != "no"
|
45
|
+
@parent.mergeInc = @child.mergeInc
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
42
49
|
@child.class.ecore.eAllReferences.each do |f|
|
43
50
|
next unless @parent.class.ecore.eAllReferences.include?f
|
44
51
|
next unless f.containment
|
@@ -78,6 +85,13 @@ module Bake
|
|
78
85
|
|
79
86
|
def removeChilds(childElem, parentElem)
|
80
87
|
return if childElem.nil? or parentElem.nil?
|
88
|
+
|
89
|
+
if Metamodel::BaseConfig_INTERNAL === childElem &&
|
90
|
+
Metamodel::BaseConfig_INTERNAL === parentElem
|
91
|
+
if childElem.mergeInc == parentElem.mergeInc
|
92
|
+
parentElem.mergeInc = ""
|
93
|
+
end
|
94
|
+
end
|
81
95
|
|
82
96
|
childElem.class.ecore.eAllReferences.each do |f|
|
83
97
|
next unless f.containment
|
@@ -128,6 +142,13 @@ module Bake
|
|
128
142
|
end
|
129
143
|
|
130
144
|
def extend(child, parent, push_front)
|
145
|
+
if Metamodel::BaseConfig_INTERNAL === child &&
|
146
|
+
Metamodel::BaseConfig_INTERNAL === parent
|
147
|
+
if child.mergeInc != "" && parent.mergeInc != "no"
|
148
|
+
parent.mergeInc = child.mergeInc
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
131
152
|
(parent.class.ecore.eAllReferences & child.class.ecore.eAllReferences).each do |f|
|
132
153
|
next unless f.containment
|
133
154
|
parentData = parent.getGeneric(f.name)
|
data/lib/bake/model/metamodel.rb
CHANGED
@@ -148,6 +148,9 @@ module Bake
|
|
148
148
|
class BaseElement < ModelElement
|
149
149
|
end
|
150
150
|
|
151
|
+
class LibStuff < BaseElement
|
152
|
+
end
|
153
|
+
|
151
154
|
class IncludeDir < BaseElement
|
152
155
|
has_attr 'name', String, :defaultValueLiteral => ""
|
153
156
|
has_attr 'infix', String, :defaultValueLiteral => ""
|
@@ -156,8 +159,7 @@ module Bake
|
|
156
159
|
has_attr 'system', Boolean, :defaultValueLiteral => "false"
|
157
160
|
end
|
158
161
|
|
159
|
-
|
160
|
-
end
|
162
|
+
|
161
163
|
|
162
164
|
class ExternalLibrary < LibStuff
|
163
165
|
has_attr 'name', String, :defaultValueLiteral => ""
|
@@ -273,6 +275,7 @@ module Bake
|
|
273
275
|
has_attr 'type', String, :defaultValueLiteral => ""
|
274
276
|
has_attr 'project', String, :defaultValueLiteral => ""
|
275
277
|
has_attr 'private', Boolean, :defaultValueLiteral => "false"
|
278
|
+
has_attr 'mergeInc', String, :defaultValueLiteral => ""
|
276
279
|
contains_one 'description', Description, 'parent'
|
277
280
|
contains_one 'startupSteps', StartupSteps, 'parent'
|
278
281
|
contains_one 'preSteps', PreSteps, 'parent'
|
@@ -23,10 +23,22 @@ module Bake
|
|
23
23
|
|
24
24
|
end
|
25
25
|
|
26
|
+
module Dependency::ClassModule
|
27
|
+
def setInjected
|
28
|
+
@injected = true
|
29
|
+
end
|
30
|
+
def injected?
|
31
|
+
@injected ||= false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
26
35
|
module BaseConfig_INTERNAL::ClassModule
|
27
36
|
def qname
|
28
37
|
@qname ||= parent.name + "," + name
|
29
38
|
end
|
39
|
+
def depInc
|
40
|
+
baseElement.find_all { |l| Dependency === l || IncludeDir === l}
|
41
|
+
end
|
30
42
|
def dependency
|
31
43
|
baseElement.find_all { |l| Dependency === l }
|
32
44
|
end
|
data/lib/bake/options/options.rb
CHANGED
@@ -23,7 +23,7 @@ module Bake
|
|
23
23
|
attr_reader :main_dir, :project, :filename, :main_project_name, :buildDirDelimiter, :dot, :cc2j_filename # String
|
24
24
|
attr_reader :include_filter, :exclude_filter, :adapt # String List
|
25
25
|
attr_reader :conversion_info, :stopOnFirstError, :clean, :rebuild, :show_includes, :show_includes_and_defines, :projectPaths, :qac, :dry, :syncedOutput, :debug_threads, :skipBuildingLine # Boolean
|
26
|
-
attr_reader :linkOnly, :compileOnly, :no_autodir, :clobber, :docu, :debug, :prepro, :
|
26
|
+
attr_reader :linkOnly, :compileOnly, :no_autodir, :clobber, :docu, :debug, :prepro, :prebuild, :printTime, :json, :wparse, :caseSensitivityCheck, :fileCmd, :profiling # Boolean
|
27
27
|
attr_reader :threads, :socket # Fixnum
|
28
28
|
attr_reader :vars, :include_filter_args # map
|
29
29
|
attr_reader :verbose
|
@@ -49,7 +49,6 @@ module Bake
|
|
49
49
|
@prebuild = false
|
50
50
|
@printTime = false
|
51
51
|
@buildDirDelimiter = "/"
|
52
|
-
@oldLinkOrder = false
|
53
52
|
@conversion_info = false
|
54
53
|
@envToolchain = false
|
55
54
|
@analyze = false
|
@@ -86,10 +85,10 @@ module Bake
|
|
86
85
|
@main_project_name = ""
|
87
86
|
@adapt = []
|
88
87
|
@syncedOutput = false
|
88
|
+
@profiling = false
|
89
89
|
@diabCaseCheck = false
|
90
90
|
@defines = []
|
91
91
|
@fileCmd = false
|
92
|
-
@mergeInc = false
|
93
92
|
|
94
93
|
add_option(["-b", "" ], lambda { |x| set_build_config(x) })
|
95
94
|
add_option(["-m" ], lambda { |x| @main_dir = x })
|
@@ -101,6 +100,7 @@ module Bake
|
|
101
100
|
add_option(["-r" ], lambda { @stopOnFirstError = true })
|
102
101
|
add_option(["-O" ], lambda { @syncedOutput = true })
|
103
102
|
add_option(["--rebuild" ], lambda { @rebuild = true })
|
103
|
+
add_option(["--profiling" ], lambda { @profiling = true })
|
104
104
|
add_option(["--prepro" ], lambda { @prepro = true })
|
105
105
|
add_option(["--link-only", "--link_only" ], lambda { @linkOnly = true; })
|
106
106
|
add_option(["--compile-only", "--compile_only" ], lambda { @compileOnly = true; })
|
@@ -124,7 +124,6 @@ module Bake
|
|
124
124
|
add_option(["-nb" ], lambda { @skipBuildingLine = true })
|
125
125
|
add_option(["--no-case-check" ], lambda { @caseSensitivityCheck = false })
|
126
126
|
add_option(["--file-cmd" ], lambda { @fileCmd = true })
|
127
|
-
add_option(["--merge-inc" ], lambda { @mergeInc = true })
|
128
127
|
add_option(["--clobber" ], lambda { @clobber = true; @clean = true })
|
129
128
|
add_option(["--ignore-cache", "--ignore_cache" ], lambda { @nocache = true })
|
130
129
|
add_option(["-j", "--threads" ], lambda { |x, dummy1, dummy2| set_threads(x) })
|
@@ -159,7 +158,6 @@ module Bake
|
|
159
158
|
add_option(["--version" ], lambda { Bake::Usage.version })
|
160
159
|
add_option(["--list", "--show_configs" ], lambda { @showConfigs = true })
|
161
160
|
add_option(["--compilation-db" ], lambda { |x,dummy| @cc2j_filename = (x ? x : "compile_commands.json" )})
|
162
|
-
add_option(["--link-2-17", "--link_2_17" ], lambda { @oldLinkOrder = true })
|
163
161
|
add_option(["--build_", ], lambda { @buildDirDelimiter = "_" })
|
164
162
|
|
165
163
|
# deprecated and not replaced by new command
|
data/lib/bake/options/usage.rb
CHANGED
@@ -62,8 +62,7 @@ module Bake
|
|
62
62
|
puts " --crc32 <string> Calulates the CRC32 of string (0x4C11DB7, init 0, final xor 0, input and result not reflected), used for Uid variable calculation"
|
63
63
|
puts " --diab-case-check When compiling with DCC, this switches to the case check on Windows machines. No actual compilation is done."
|
64
64
|
puts " --file-cmd Writes arguments into a file and hands it over the compiler/archiver/linker. Works only for supported compilers."
|
65
|
-
puts " --
|
66
|
-
puts " --link-2-17 DEPRECATED: Using link order of libraries which was used until bake 2.17"
|
65
|
+
puts " --link-beta Improved linking, order of libs changed. Experimental."
|
67
66
|
puts " --build_ DEPRECATED: build directories will be build_<name> instead of build/<name>"
|
68
67
|
puts " --version Print version."
|
69
68
|
puts " --time Print elapsed time at the end."
|
data/lib/bake/toolchain/gcc.rb
CHANGED
@@ -49,7 +49,7 @@ module Bake
|
|
49
49
|
|
50
50
|
GCCChain[:ARCHIVER][:COMMAND] = "ar"
|
51
51
|
GCCChain[:ARCHIVER][:ARCHIVE_FLAGS] = "-rc"
|
52
|
-
GCCChain[:ARCHIVER][:FILE_COMMAND] = "@"
|
52
|
+
GCCChain[:ARCHIVER][:FILE_COMMAND] = (Bake::Utils::OS.name == "Mac" ? "" : "@")
|
53
53
|
|
54
54
|
GCCChain[:LINKER][:COMMAND] = "g++"
|
55
55
|
GCCChain[:LINKER][:SCRIPT] = "-T"
|
data/lib/bakeqac/filter.rb
CHANGED
@@ -20,7 +20,11 @@ module Bake
|
|
20
20
|
|
21
21
|
def self.localFile(str)
|
22
22
|
return true if (not is_valid?) || (not @@options.qacfilefilter)
|
23
|
-
projects.any? { |fil| str.include?(fil+"/")
|
23
|
+
projects.any? { |fil| str.include?(fil+"/") &&
|
24
|
+
!str.include?(fil+"/test/") &&
|
25
|
+
!str.include?(fil+"/mock/") &&
|
26
|
+
!str.include?(fil+"/.qacdata/") &&
|
27
|
+
!str.include?("/mergedIncludes") }
|
24
28
|
end
|
25
29
|
|
26
30
|
def self.writeFilter(filter)
|
data/lib/blocks/block.rb
CHANGED
@@ -22,8 +22,8 @@ module Bake
|
|
22
22
|
@@delayed_result = true
|
23
23
|
@@threads = []
|
24
24
|
|
25
|
-
attr_reader :lib_elements, :projectDir, :library, :config, :projectName, :prebuild, :output_dir, :tcs
|
26
|
-
attr_accessor :visited, :inDeps, :result
|
25
|
+
attr_reader :lib_elements, :projectDir, :library, :config, :projectName, :configName, :prebuild, :output_dir, :tcs
|
26
|
+
attr_accessor :visited, :inDeps, :result, :bes
|
27
27
|
|
28
28
|
def startupSteps
|
29
29
|
@startupSteps ||= []
|
@@ -52,7 +52,7 @@ module Bake
|
|
52
52
|
def dependencies
|
53
53
|
@dependencies ||= []
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
def childs
|
57
57
|
@childs ||= []
|
58
58
|
end
|
@@ -61,10 +61,6 @@ module Bake
|
|
61
61
|
@parents ||= []
|
62
62
|
end
|
63
63
|
|
64
|
-
def depToBlock
|
65
|
-
@depToBlock ||= {}
|
66
|
-
end
|
67
|
-
|
68
64
|
def set_library(library)
|
69
65
|
@library = library
|
70
66
|
end
|
@@ -81,8 +77,8 @@ module Bake
|
|
81
77
|
@projectDir = config.get_project_dir
|
82
78
|
@result = true
|
83
79
|
@tcs = tcs
|
84
|
-
|
85
|
-
@lib_elements =
|
80
|
+
@bes = []
|
81
|
+
@lib_elements = []
|
86
82
|
|
87
83
|
calcOutputDir
|
88
84
|
end
|
@@ -352,7 +348,6 @@ module Bake
|
|
352
348
|
@config.writeEnvVars()
|
353
349
|
Thread.current[:lastCommand] = nil
|
354
350
|
allSteps = (preSteps + mainSteps + postSteps)
|
355
|
-
|
356
351
|
# check if we have to delay the output (if the last step of this block is not in a thread)
|
357
352
|
@outputStep = nil
|
358
353
|
allSteps.each { |step| @outputStep = independent?(method, step) ? step : nil }
|
data/lib/blocks/blockBase.rb
CHANGED
@@ -197,6 +197,14 @@ module Bake
|
|
197
197
|
end
|
198
198
|
args = cmd.drop(onlyCmd.length)
|
199
199
|
argsFlat = args.join(' ')
|
200
|
+
|
201
|
+
splittedArgs = argsFlat.split("\"")
|
202
|
+
argsFlat = ""
|
203
|
+
splittedArgs.each_with_index do |s,i|
|
204
|
+
argsFlat << s
|
205
|
+
argsFlat << (i%2 == 0 ? "\"\\\"" : "\\\"\"") if i != splittedArgs.length - 1
|
206
|
+
end
|
207
|
+
|
200
208
|
cmdFile = orgOut + ".file" + postfix
|
201
209
|
cmdFileLong = File.expand_path(cmdFile, @projectDir)
|
202
210
|
FileUtils.mkdir_p(File.dirname(cmdFileLong))
|
data/lib/blocks/compile.rb
CHANGED
@@ -41,7 +41,6 @@ end
|
|
41
41
|
|
42
42
|
|
43
43
|
|
44
|
-
|
45
44
|
module Bake
|
46
45
|
|
47
46
|
module Blocks
|
@@ -60,10 +59,7 @@ module Bake
|
|
60
59
|
@object_files = {}
|
61
60
|
@system_includes = Set.new
|
62
61
|
|
63
|
-
|
64
|
-
calcIncludes
|
65
|
-
calcDefines # not for files with changed tcs
|
66
|
-
calcFlags # not for files with changed tcs
|
62
|
+
|
67
63
|
end
|
68
64
|
|
69
65
|
def get_object_file(source)
|
@@ -408,12 +404,18 @@ module Bake
|
|
408
404
|
end
|
409
405
|
|
410
406
|
def execute
|
411
|
-
|
412
|
-
|
407
|
+
return true if @config.files.empty?
|
408
|
+
|
413
409
|
SyncOut.mutex.synchronize do
|
410
|
+
calcFileTcs
|
411
|
+
calcIncludes
|
412
|
+
calcDefines # not for files with changed tcs
|
413
|
+
calcFlags # not for files with changed tcs
|
414
414
|
calcSources
|
415
415
|
calcObjects
|
416
|
+
puts "Profiling #{Time.now - $timeStart}: prepareIncludes (#{@projectName+","+@config.name}) start..." if Bake.options.profiling
|
416
417
|
prepareIncludes
|
418
|
+
puts "Profiling #{Time.now - $timeStart}: prepareIncludes (#{@projectName+","+@config.name}) stop..." if Bake.options.profiling
|
417
419
|
end
|
418
420
|
|
419
421
|
fileListBlock = Set.new if Bake.options.filelist
|
@@ -592,78 +594,124 @@ module Bake
|
|
592
594
|
@source_files
|
593
595
|
end
|
594
596
|
|
595
|
-
def mapInclude(inc, orgBlock)
|
596
|
-
|
597
|
-
if inc.name == "___ROOTS___"
|
598
|
-
return Bake.options.roots.map { |r| File.rel_from_to_project(@projectDir,r.dir,false) }
|
599
|
-
end
|
600
|
-
|
601
|
-
i = orgBlock.convPath(inc,nil,true)
|
602
|
-
if orgBlock != @block
|
603
|
-
if not File.is_absolute?(i)
|
604
|
-
i = File.rel_from_to_project(@projectDir,orgBlock.config.parent.get_project_dir) + i
|
605
|
-
end
|
606
|
-
end
|
607
|
-
|
608
|
-
Pathname.new(i).cleanpath
|
609
|
-
end
|
610
|
-
|
611
597
|
def calcIncludesInternal(block)
|
598
|
+
# puts "#{block.projectName},#{block.configName} " + block.to_s
|
599
|
+
noDeps = @blocksRead.include?(block)
|
612
600
|
@blocksRead << block
|
613
|
-
block.
|
601
|
+
block.bes.each do |be|
|
614
602
|
if Metamodel::IncludeDir === be
|
603
|
+
# puts "-- #{be.name}"
|
615
604
|
if be.inherit == true || block == @block
|
616
|
-
mappedInc =
|
617
|
-
|
618
|
-
|
605
|
+
mappedInc = File.rel_from_to_project(@projectDir,be.name,false)
|
606
|
+
mappedInc = "." if mappedInc.empty?
|
607
|
+
if !@include_set.include?(mappedInc) # todo set!!
|
608
|
+
@include_list << mappedInc
|
609
|
+
@include_set << mappedInc
|
610
|
+
if !@include_merge.has_key?(mappedInc)
|
611
|
+
if be.parent.mergeInc == "no"
|
612
|
+
@include_merge[mappedInc] = false
|
613
|
+
elsif @config.mergeInc == "all"
|
614
|
+
@include_merge[mappedInc] = true
|
615
|
+
elsif @block.config != be.parent && @config.mergeInc == "yes"
|
616
|
+
@include_merge[mappedInc] = true
|
617
|
+
else
|
618
|
+
@include_merge[mappedInc] = false
|
619
|
+
end
|
620
|
+
end
|
621
|
+
@system_includes << mappedInc if be.system
|
622
|
+
end
|
619
623
|
end
|
620
624
|
elsif Metamodel::Dependency === be
|
621
|
-
|
622
|
-
|
625
|
+
if (!noDeps)
|
626
|
+
childBlock = Blocks::ALL_BLOCKS[be.name + "," + be.config]
|
627
|
+
if block.projectName == be.parent.parent.name &&
|
628
|
+
block.configName == be.parent.name
|
629
|
+
next if @blocksRead.include?(childBlock)
|
630
|
+
end
|
631
|
+
calcIncludesInternal(childBlock)
|
632
|
+
end
|
623
633
|
end
|
624
634
|
end
|
625
635
|
end
|
626
636
|
|
627
637
|
def calcIncludes
|
628
|
-
|
629
638
|
@blocksRead = Set.new
|
639
|
+
@include_set = Set.new
|
630
640
|
@include_list = []
|
641
|
+
@include_merge = {}
|
631
642
|
@system_includes = Set.new
|
643
|
+
|
644
|
+
#puts @block.bes.length
|
645
|
+
#@block.bes.each {|b| puts "#{b.class}: #{b.name}, #{b.respond_to?(:config) ? b.config : ""}"}
|
646
|
+
#exit(1)
|
647
|
+
|
648
|
+
|
649
|
+
|
632
650
|
calcIncludesInternal(@block) # includeDir and child dependencies with inherit: true
|
651
|
+
# exit(1)
|
652
|
+
@include_list = @include_list.flatten.uniq
|
653
|
+
end
|
633
654
|
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
655
|
+
def prepareIncludes
|
656
|
+
mergeCounter = 0
|
657
|
+
inmerge = false
|
658
|
+
mdir = nil
|
659
|
+
include_list_new = []
|
660
|
+
filesToCopy = {}
|
661
|
+
destDirs = Set.new
|
662
|
+
merging = false
|
663
|
+
@include_list.reverse.each do |idir|
|
664
|
+
idirs = idir.to_s
|
665
|
+
idirs = File.expand_path(idirs, @projectDir) if !File.is_absolute?(idirs)
|
666
|
+
if @include_merge[idir]
|
667
|
+
if (!inmerge)
|
668
|
+
mergeCounter += 1
|
669
|
+
mdir = File.expand_path(@block.output_dir+"/mergedIncludes#{mergeCounter}", @projectDir)
|
670
|
+
FileUtils.rm_rf(mdir)
|
671
|
+
FileUtils.mkdir_p(mdir)
|
672
|
+
inmerge = true
|
673
|
+
end
|
674
|
+
if !merging
|
675
|
+
puts "Profiling #{Time.now - $timeStart}: glob..." if Bake.options.profiling
|
676
|
+
end
|
677
|
+
merging = true
|
678
|
+
|
679
|
+
toCopy = Dir.glob(idirs+"/**/*").
|
680
|
+
reject { |file| file.start_with?(idirs+"/build/") || file.start_with?(idirs+"/.") }.
|
681
|
+
select { |file| File.file?(file) && /^\.(h|i|cfg)/ === File.extname(file) }
|
682
|
+
toCopy.each do |t|
|
683
|
+
dest = mdir+t[idirs.length..-1]
|
684
|
+
destDirs << File.dirname(dest)
|
685
|
+
if filesToCopy.has_key?(t)
|
686
|
+
filesToCopy[t] << dest
|
687
|
+
else
|
688
|
+
filesToCopy[t] = [dest]
|
646
689
|
end
|
647
690
|
end
|
648
|
-
|
691
|
+
include_list_new << (@block.output_dir+"/mergedIncludes#{mergeCounter}")
|
692
|
+
else
|
693
|
+
if (inmerge)
|
694
|
+
inmerge = false
|
695
|
+
end
|
696
|
+
include_list_new << idir
|
649
697
|
end
|
650
698
|
end
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
if Bake.options.mergeInc
|
658
|
-
mdir = File.expand_path(@block.output_dir+"/mergedIncludes", @projectDir)
|
659
|
-
@include_list.each do |idir|
|
660
|
-
FileUtils.mkdir_p(mdir)
|
661
|
-
idir = idir.to_s
|
662
|
-
idir = File.expand_path(idir, @projectDir) if !File.is_absolute?(idir)
|
663
|
-
FileUtils.cp_r(Dir.glob(idir+"/*"), mdir)
|
699
|
+
if merging
|
700
|
+
sizeWarning = 100000
|
701
|
+
sum = filesToCopy.keys.inject(0) do |sum,t|
|
702
|
+
si = File.size(t)
|
703
|
+
puts "Size warning (>#{sizeWarning} byte): #{t} has #{si} byte" if si > sizeWarning and Bake.options.profiling
|
704
|
+
sum + si
|
664
705
|
end
|
665
|
-
|
666
|
-
|
706
|
+
puts "Profiling #{Time.now - $timeStart}: copy #{sum} byte in #{filesToCopy.length} files..." if Bake.options.profiling
|
707
|
+
destDirs.each {|d| FileUtils.mkdir_p(d)}
|
708
|
+
filesToCopy.each do |t, dest|
|
709
|
+
dest.each do |d|
|
710
|
+
FileUtils.cp_r(t, d, :preserve => true)
|
711
|
+
end
|
712
|
+
end
|
713
|
+
end
|
714
|
+
@include_list = include_list_new.uniq.reverse
|
667
715
|
|
668
716
|
@include_array = {}
|
669
717
|
[:CPP, :C, :ASM].each do |type|
|