bake-toolkit 1.0.1
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.
- data/Rakefile.rb +3 -0
- data/bin/bake +86 -0
- data/bin/bakery +234 -0
- data/lib/alias/loader.rb +56 -0
- data/lib/alias/model/language.rb +22 -0
- data/lib/alias/model/metamodel.rb +29 -0
- data/lib/bake/cache.rb +142 -0
- data/lib/bake/loader.rb +92 -0
- data/lib/bake/model/language.rb +46 -0
- data/lib/bake/model/metamodel.rb +226 -0
- data/lib/bake/model/metamodel_ext.rb +15 -0
- data/lib/bake/options.rb +288 -0
- data/lib/bake/subst.rb +90 -0
- data/lib/bake/util.rb +98 -0
- data/lib/bake/version.rb +30 -0
- data/lib/bakery/loader.rb +57 -0
- data/lib/bakery/model/language.rb +22 -0
- data/lib/bakery/model/metamodel.rb +44 -0
- data/lib/bakery/options.rb +98 -0
- data/lib/option/parser.rb +66 -0
- data/lib/tocxx.rb +883 -0
- data/license.txt +64 -0
- metadata +109 -0
data/lib/bake/loader.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'bake/model/metamodel'
|
2
|
+
require 'bake/model/language'
|
3
|
+
require 'bake/version'
|
4
|
+
|
5
|
+
require 'rgen/environment'
|
6
|
+
require 'rgen/fragment/dump_file_cache'
|
7
|
+
require 'rgen/fragment/fragmented_model'
|
8
|
+
require 'rgen/util/file_cache_map'
|
9
|
+
|
10
|
+
require 'rtext/default_loader'
|
11
|
+
|
12
|
+
require 'cxxproject/utils/exit_helper'
|
13
|
+
require 'cxxproject/utils/printer'
|
14
|
+
require 'bake/options'
|
15
|
+
|
16
|
+
module Cxxproject
|
17
|
+
|
18
|
+
class Loader
|
19
|
+
|
20
|
+
attr_reader :model
|
21
|
+
|
22
|
+
def initialize(options)
|
23
|
+
@env = RGen::Environment.new
|
24
|
+
@options = options
|
25
|
+
|
26
|
+
fcm = RGen::Util::FileCacheMap.new(".bake", ".cache")
|
27
|
+
fcm.version_info = Version.bake
|
28
|
+
@DumpFileCache = RGen::Fragment::DumpFileCache.new(fcm)
|
29
|
+
if @options.nocache
|
30
|
+
def @DumpFileCache.load(fragment)
|
31
|
+
:invalid
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
@model = RGen::Fragment::FragmentedModel.new(:env => @env)
|
36
|
+
@mainProjectName = File::basename(@options.main_dir)
|
37
|
+
end
|
38
|
+
|
39
|
+
def load(filename)
|
40
|
+
|
41
|
+
sumErrors = 0
|
42
|
+
|
43
|
+
if not File.exists?filename
|
44
|
+
Printer.printError "Error: #{filename} does not exist"
|
45
|
+
ExitHelper.exit(1)
|
46
|
+
end
|
47
|
+
|
48
|
+
loader = RText::DefaultLoader.new(
|
49
|
+
Cxxproject::Language,
|
50
|
+
@model,
|
51
|
+
:file_provider => proc { [filename] },
|
52
|
+
:cache => @DumpFileCache)
|
53
|
+
loader.load(:before_load => proc {|fragment, kind|
|
54
|
+
case kind
|
55
|
+
when :load_update_cache
|
56
|
+
if @options.verbose
|
57
|
+
puts "Loading and caching #{fragment.location}"
|
58
|
+
else
|
59
|
+
puts "Loading #{fragment.location}"
|
60
|
+
end
|
61
|
+
when :load_cached
|
62
|
+
if @options.verbose
|
63
|
+
puts "Loading cached #{fragment.location}"
|
64
|
+
else
|
65
|
+
puts "Loading #{fragment.location}"
|
66
|
+
end
|
67
|
+
when :load
|
68
|
+
puts "Loading #{fragment.location}"
|
69
|
+
else
|
70
|
+
Printer.printError "Error: Could not load #{fragment.location}"
|
71
|
+
ExitHelper.exit(1)
|
72
|
+
end
|
73
|
+
})
|
74
|
+
|
75
|
+
f = @model.fragments[0]
|
76
|
+
@model.remove_fragment(f)
|
77
|
+
|
78
|
+
f.data[:problems].each do |p|
|
79
|
+
Printer.printError "Error: "+p.file+"("+p.line.to_s+"): "+p.message
|
80
|
+
end
|
81
|
+
|
82
|
+
if f.data[:problems].length > 0
|
83
|
+
ExitHelper.exit(1)
|
84
|
+
end
|
85
|
+
|
86
|
+
return f
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'bake/model/metamodel'
|
2
|
+
|
3
|
+
require 'rtext/language'
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
module Cxxproject
|
8
|
+
|
9
|
+
class Idp
|
10
|
+
def call(e,unused)
|
11
|
+
e.respond_to?(:ident) ? e.ident() : nil # IdentifierProvider.qualified_name(e)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
Language =
|
17
|
+
RText::Language.new(Metamodel.ecore,
|
18
|
+
:feature_provider => proc {|c|
|
19
|
+
RGen::Serializer::OppositeReferenceFilter.call(c.eAllStructuralFeatures).reject {|f|
|
20
|
+
f.eAnnotations.any? {|a|
|
21
|
+
a.details.any? {|d| d.key == 'internal' && d.value == 'true'}
|
22
|
+
}
|
23
|
+
}
|
24
|
+
},
|
25
|
+
:unlabled_arguments => proc {|c|
|
26
|
+
if c.name == "Compiler" or c.name == "CompilerAdaptions"
|
27
|
+
["ctype"]
|
28
|
+
elsif c.name == "Define"
|
29
|
+
["str"]
|
30
|
+
elsif c.name == "Flags" or c.name == "LibPostfixFlags" or c.name == "LibPrefixFlags"
|
31
|
+
["overwrite"]
|
32
|
+
elsif c.name == "UserLibrary"
|
33
|
+
["lib"]
|
34
|
+
elsif c.name == "DefaultToolchain"
|
35
|
+
["basedOn"]
|
36
|
+
else
|
37
|
+
["name"]
|
38
|
+
end
|
39
|
+
},
|
40
|
+
:identifier_provider => Idp.new,
|
41
|
+
:line_number_attribute => "line_number",
|
42
|
+
:file_name_attribute => "file_name",
|
43
|
+
:fragment_ref_attribute => "fragment_ref"#,
|
44
|
+
)
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,226 @@
|
|
1
|
+
require 'rgen/metamodel_builder'
|
2
|
+
require 'rgen/metamodel_builder/data_types'
|
3
|
+
|
4
|
+
module Cxxproject
|
5
|
+
|
6
|
+
module Metamodel
|
7
|
+
extend RGen::MetamodelBuilder::ModuleExtension
|
8
|
+
|
9
|
+
class ModelElement < RGen::MetamodelBuilder::MMBase
|
10
|
+
abstract
|
11
|
+
has_attr 'line_number', Integer do
|
12
|
+
annotation :details => {'internal' => 'true'}
|
13
|
+
end
|
14
|
+
has_attr 'file_name', String do
|
15
|
+
annotation :details => {'internal' => 'true'}
|
16
|
+
end
|
17
|
+
module ClassModule
|
18
|
+
attr_accessor :fragment_ref
|
19
|
+
|
20
|
+
def id
|
21
|
+
splitted = file_name.split("/")
|
22
|
+
splitted[splitted.length-2]
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
CompilerType = RGen::MetamodelBuilder::DataTypes::Enum.new([:CPP, :C, :ASM])
|
29
|
+
|
30
|
+
class Flags < ModelElement
|
31
|
+
has_attr 'overwrite', String, :defaultValueLiteral => ""
|
32
|
+
has_attr 'add', String, :defaultValueLiteral => ""
|
33
|
+
has_attr 'remove', String, :defaultValueLiteral => ""
|
34
|
+
end
|
35
|
+
class LibPrefixFlags < ModelElement
|
36
|
+
has_attr 'overwrite', String, :defaultValueLiteral => ""
|
37
|
+
has_attr 'add', String, :defaultValueLiteral => ""
|
38
|
+
has_attr 'remove', String, :defaultValueLiteral => ""
|
39
|
+
end
|
40
|
+
class LibPostfixFlags < ModelElement
|
41
|
+
has_attr 'overwrite', String, :defaultValueLiteral => ""
|
42
|
+
has_attr 'add', String, :defaultValueLiteral => ""
|
43
|
+
has_attr 'remove', String, :defaultValueLiteral => ""
|
44
|
+
end
|
45
|
+
class Define < ModelElement
|
46
|
+
has_attr 'str', String, :defaultValueLiteral => ""
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
class Archiver < ModelElement
|
51
|
+
has_attr 'command', String, :defaultValueLiteral => ""
|
52
|
+
contains_many 'flags', Flags, 'parent'
|
53
|
+
end
|
54
|
+
|
55
|
+
class Linker < ModelElement
|
56
|
+
has_attr 'command', String, :defaultValueLiteral => ""
|
57
|
+
contains_many 'flags', Flags, 'parent'
|
58
|
+
contains_many 'libprefixflags', LibPrefixFlags, 'parent'
|
59
|
+
contains_many 'libpostfixflags', LibPostfixFlags, 'parent'
|
60
|
+
end
|
61
|
+
|
62
|
+
class Compiler < ModelElement
|
63
|
+
has_attr 'ctype', CompilerType
|
64
|
+
has_attr 'command', String, :defaultValueLiteral => ""
|
65
|
+
contains_many 'define', Define, 'parent'
|
66
|
+
contains_many 'flags', Flags, 'parent'
|
67
|
+
end
|
68
|
+
|
69
|
+
class DefaultToolchain < ModelElement
|
70
|
+
has_attr 'basedOn', String, :defaultValueLiteral => ""
|
71
|
+
contains_many 'compiler', Compiler, 'parent'
|
72
|
+
contains_one 'archiver', Archiver, 'parent'
|
73
|
+
contains_one 'linker', Linker, 'parent'
|
74
|
+
end
|
75
|
+
|
76
|
+
class Toolchain < ModelElement
|
77
|
+
contains_many 'compiler', Compiler, 'parent'
|
78
|
+
contains_one 'archiver', Archiver, 'parent'
|
79
|
+
contains_one 'linker', Linker, 'parent'
|
80
|
+
end
|
81
|
+
|
82
|
+
class Person < ModelElement
|
83
|
+
has_attr 'name', String, :defaultValueLiteral => ""
|
84
|
+
has_attr 'email', String, :defaultValueLiteral => ""
|
85
|
+
end
|
86
|
+
|
87
|
+
class Responsible < ModelElement
|
88
|
+
contains_many "person", Person, 'parent'
|
89
|
+
end
|
90
|
+
|
91
|
+
class Files < ModelElement
|
92
|
+
has_attr 'name', String, :defaultValueLiteral => ""
|
93
|
+
contains_many 'define', Define, 'parent'
|
94
|
+
contains_many 'flags', Flags, 'parent'
|
95
|
+
end
|
96
|
+
|
97
|
+
class ExcludeFiles < ModelElement
|
98
|
+
has_attr 'name', String, :defaultValueLiteral => ""
|
99
|
+
end
|
100
|
+
|
101
|
+
class IncludeDir < ModelElement
|
102
|
+
has_attr 'name', String, :defaultValueLiteral => ""
|
103
|
+
end
|
104
|
+
|
105
|
+
class ExternalLibrary < ModelElement
|
106
|
+
has_attr 'name', String, :defaultValueLiteral => ""
|
107
|
+
has_attr 'search', Boolean, :defaultValueLiteral => "true"
|
108
|
+
end
|
109
|
+
|
110
|
+
class ExternalLibrarySearchPath < ModelElement
|
111
|
+
has_attr 'name', String, :defaultValueLiteral => ""
|
112
|
+
end
|
113
|
+
|
114
|
+
class Step < ModelElement
|
115
|
+
has_attr 'name', String, :defaultValueLiteral => ""
|
116
|
+
has_attr 'default', String, :defaultValueLiteral => "on"
|
117
|
+
has_attr 'filter', String, :defaultValueLiteral => ""
|
118
|
+
end
|
119
|
+
|
120
|
+
class Makefile < Step
|
121
|
+
has_attr 'lib', String, :defaultValueLiteral => ""
|
122
|
+
has_attr 'target', String, :defaultValueLiteral => ""
|
123
|
+
has_attr 'pathTo', String, :defaultValueLiteral => ""
|
124
|
+
has_attr 'flags', String, :defaultValueLiteral => ""
|
125
|
+
end
|
126
|
+
|
127
|
+
class CommandLine < Step
|
128
|
+
end
|
129
|
+
|
130
|
+
class PreSteps < ModelElement
|
131
|
+
contains_many 'step', Step, 'parent'
|
132
|
+
end
|
133
|
+
|
134
|
+
class PostSteps < ModelElement
|
135
|
+
contains_many 'step', Step, 'parent'
|
136
|
+
end
|
137
|
+
|
138
|
+
class UserLibrary < ModelElement
|
139
|
+
has_attr 'lib', String, :defaultValueLiteral => ""
|
140
|
+
end
|
141
|
+
|
142
|
+
class LinkerScript < ModelElement
|
143
|
+
has_attr 'name', String, :defaultValueLiteral => ""
|
144
|
+
end
|
145
|
+
|
146
|
+
class MapFile < ModelElement
|
147
|
+
has_attr 'name', String, :defaultValueLiteral => ""
|
148
|
+
end
|
149
|
+
|
150
|
+
class ArtifactName < ModelElement
|
151
|
+
has_attr 'name', String, :defaultValueLiteral => ""
|
152
|
+
end
|
153
|
+
|
154
|
+
class BaseConfig_INTERNAL < ModelElement
|
155
|
+
has_attr 'name', String, :defaultValueLiteral => ""
|
156
|
+
contains_one 'preSteps', PreSteps, 'parent'
|
157
|
+
contains_one 'postSteps', PostSteps, 'parent'
|
158
|
+
contains_many 'userLibrary', UserLibrary, 'parent'
|
159
|
+
contains_many 'exLib', ExternalLibrary, 'parent'
|
160
|
+
contains_many 'exLibSearchPath', ExternalLibrarySearchPath, 'parent'
|
161
|
+
contains_one 'defaultToolchain', DefaultToolchain, 'parent'
|
162
|
+
|
163
|
+
module ClassModule
|
164
|
+
def ident
|
165
|
+
s = file_name.split("/")
|
166
|
+
s[s.length-2] + "/" + name
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
171
|
+
|
172
|
+
class BuildConfig_INTERNAL < BaseConfig_INTERNAL
|
173
|
+
contains_many 'files', Files, 'parent'
|
174
|
+
contains_many 'excludeFiles', ExcludeFiles, 'parent'
|
175
|
+
contains_many 'includeDir', IncludeDir, 'parent'
|
176
|
+
contains_one 'toolchain', Toolchain, 'parent'
|
177
|
+
|
178
|
+
module ClassModule
|
179
|
+
def ident
|
180
|
+
s = file_name.split("/")
|
181
|
+
s[s.length-2] + "/" + name
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
class ExecutableConfig < BuildConfig_INTERNAL
|
188
|
+
contains_one 'linkerScript', LinkerScript, 'parent'
|
189
|
+
contains_one 'artifactName', ArtifactName, 'parent'
|
190
|
+
contains_one 'mapFile', MapFile, 'parent'
|
191
|
+
end
|
192
|
+
|
193
|
+
class LibraryConfig < BuildConfig_INTERNAL
|
194
|
+
end
|
195
|
+
|
196
|
+
class CustomConfig < BaseConfig_INTERNAL
|
197
|
+
contains_one 'step', Step, 'parent'
|
198
|
+
end
|
199
|
+
|
200
|
+
class Project < ModelElement
|
201
|
+
#has_attr 'name', String do
|
202
|
+
# annotation :details => {'internal' => 'true'}
|
203
|
+
#end
|
204
|
+
contains_one 'responsible', Responsible, 'parent'
|
205
|
+
contains_many 'config', BaseConfig_INTERNAL, 'parent'
|
206
|
+
|
207
|
+
module ClassModule
|
208
|
+
def name
|
209
|
+
splitted = file_name.split("/")
|
210
|
+
x = splitted[splitted.length-2]
|
211
|
+
x
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
end
|
216
|
+
|
217
|
+
class Dependency < ModelElement
|
218
|
+
has_attr 'name', String, :defaultValueLiteral => ""
|
219
|
+
has_attr 'config', String, :defaultValueLiteral => ""
|
220
|
+
end
|
221
|
+
|
222
|
+
BaseConfig_INTERNAL.contains_many 'dependency', Dependency, 'parent'
|
223
|
+
|
224
|
+
end
|
225
|
+
|
226
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'bake/model/metamodel'
|
2
|
+
require 'cxxproject/ext/file'
|
3
|
+
|
4
|
+
module Cxxproject
|
5
|
+
module Metamodel
|
6
|
+
|
7
|
+
module Project::ClassModule
|
8
|
+
def get_project_dir
|
9
|
+
# todo: no. must be set from outside
|
10
|
+
::File.dirname(file_name)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
data/lib/bake/options.rb
ADDED
@@ -0,0 +1,288 @@
|
|
1
|
+
require 'cxxproject/ext/rake'
|
2
|
+
require 'cxxproject/utils/printer'
|
3
|
+
require "cxxproject/toolchain/colorizing_formatter"
|
4
|
+
require "option/parser"
|
5
|
+
|
6
|
+
module Cxxproject
|
7
|
+
|
8
|
+
class Options < Parser
|
9
|
+
attr_reader :build_config, :main_dir, :project, :filename, :eclipse_version, :alias_filename # String
|
10
|
+
attr_reader :roots, :include_filter, :exclude_filter # String List
|
11
|
+
attr_reader :clean, :rebuild, :single, :verbose, :nocache, :color, :show_includes, :linkOnly, :check_uninc, :printLess # Boolean
|
12
|
+
attr_reader :threads, :socket # Fixnum
|
13
|
+
|
14
|
+
def initialize(argv)
|
15
|
+
super(argv)
|
16
|
+
|
17
|
+
@build_config = ""
|
18
|
+
@main_dir = nil
|
19
|
+
@project = nil
|
20
|
+
@filename = nil
|
21
|
+
@single = false
|
22
|
+
@clean = false
|
23
|
+
@rebuild = false
|
24
|
+
@verbose = false
|
25
|
+
@nocache = false
|
26
|
+
@check_uninc = false
|
27
|
+
@color = false
|
28
|
+
@show_includes = false
|
29
|
+
@linkOnly = false
|
30
|
+
@printLess = false
|
31
|
+
@threads = 8
|
32
|
+
@roots = []
|
33
|
+
@socket = 0
|
34
|
+
@include_filter = []
|
35
|
+
@exclude_filter = []
|
36
|
+
@def_root = nil
|
37
|
+
@eclipse_version = ""
|
38
|
+
@alias_filename = ""
|
39
|
+
|
40
|
+
add_option(Option.new("-m",true) { |x| set_main_dir(x) })
|
41
|
+
add_option(Option.new("-b",true) { |x| set_build_config(x) })
|
42
|
+
add_option(Option.new("-p",true) { |x| set_project(x); set_single })
|
43
|
+
add_option(Option.new("-f",true) { |x| set_filename(x) })
|
44
|
+
add_option(Option.new("-c",false) { set_clean })
|
45
|
+
add_option(Option.new("-a",true) { |x| set_color(x) })
|
46
|
+
add_option(Option.new("-w",true) { |x| set_root(x) })
|
47
|
+
add_option(Option.new("-v",false) { set_verbose })
|
48
|
+
add_option(Option.new("-r",false) { set_error })
|
49
|
+
add_option(Option.new("--rebuild",false) { set_rebuild })
|
50
|
+
add_option(Option.new("--prepro",false) { set_prepro })
|
51
|
+
add_option(Option.new("--link_only",false) { set_linkOnly })
|
52
|
+
add_option(Option.new("--print_less",false) { set_printLess })
|
53
|
+
add_option(Option.new("--ignore_cache",false) { set_nocache })
|
54
|
+
add_option(Option.new("--threads",true) { |x| set_threads(x) })
|
55
|
+
add_option(Option.new("--socket",true) { |x| set_socket(x) })
|
56
|
+
add_option(Option.new("--toolchain_info",true) { |x| print_toolchain(x) })
|
57
|
+
add_option(Option.new("--available_toolchain",false) { print_toolchains })
|
58
|
+
add_option(Option.new("--include_filter",true) { |x| set_include_filter(x) })
|
59
|
+
add_option(Option.new("--exclude_filter",true) { |x| set_exclude_filter(x) })
|
60
|
+
add_option(Option.new("--show_abs_paths",false) { set_show_fullnames })
|
61
|
+
add_option(Option.new("-h",false) { usage; ExitHelper.exit(0) })
|
62
|
+
add_option(Option.new("--help",false) { usage; ExitHelper.exit(0) })
|
63
|
+
add_option(Option.new("--show_include_paths",false) { set_show_inc })
|
64
|
+
add_option(Option.new("--eclipse_version",true) { |x| set_eclipse_version(x) })
|
65
|
+
add_option(Option.new("--show_license",false) { show_license })
|
66
|
+
add_option(Option.new("--check_uninc",false) { set_check_uninc })
|
67
|
+
add_option(Option.new("--alias",true) { |x| set_alias_filename(x) })
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
def usage
|
72
|
+
puts "\nUsage: bake [options]"
|
73
|
+
puts " -m <dir> Directory of main project (default is current directory)."
|
74
|
+
puts " -b <name> Config name of main project"
|
75
|
+
puts " -p <dir> Project to build/clean (default is main project)"
|
76
|
+
puts " -f <name> Build/Clean this file only."
|
77
|
+
puts " -c Clean the file/project."
|
78
|
+
puts " -a <scheme> Use ansi color sequences (console must support it). Possible values are 'white' and 'black'."
|
79
|
+
puts " -v Verbose output."
|
80
|
+
puts " -r Stop on first error."
|
81
|
+
puts " -w <root> Add a workspace root (can be used multiple times)."
|
82
|
+
puts " If no root is specified, the parent directory of the main project is added automatically."
|
83
|
+
puts " --rebuild Clean before build."
|
84
|
+
puts " --prepro Stop after preprocessor."
|
85
|
+
puts " --link_only Only link executable - doesn't update objects and archives or start PreSteps and PostSteps"
|
86
|
+
puts " --print_less Some progression logs will be suppressed"
|
87
|
+
puts " --ignore_cache Rereads the original meta files - usefull if workspace structure has been changed."
|
88
|
+
puts " --check_uninc Checks for unnecessary includes (only done for successful project builds)."
|
89
|
+
puts " --threads <num> Set NUMBER of parallel compiled files (default is 8)."
|
90
|
+
puts " --socket <num> Set SOCKET for sending errors, receiving commands, etc. - used by e.g. Eclipse."
|
91
|
+
puts " --toolchain_info <name> Prints default values of a toolchain."
|
92
|
+
puts " --toolchain_names Prints available toolchains."
|
93
|
+
puts " --include_filter <name> Includes steps with this filter name (can be used multiple times)."
|
94
|
+
puts " 'PRE' or 'POST' includes all PreSteps respectively PostSteps."
|
95
|
+
puts " --exclude_filter <name> Excludes steps with this filter name (can be used multiple times)."
|
96
|
+
puts " 'PRE' or 'POST' excludes all PreSteps respectively PostSteps."
|
97
|
+
puts " --show_abs_paths Compiler prints absolute filename paths instead of relative paths."
|
98
|
+
puts ""
|
99
|
+
puts " -h, --help Print this help."
|
100
|
+
puts " --show_license Print the license."
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
def parse_options()
|
105
|
+
parse_internal(false)
|
106
|
+
set_main_dir(Dir.pwd) if @main_dir.nil?
|
107
|
+
set_project(File.basename(@main_dir)) if @project.nil?
|
108
|
+
@roots << @def_root if @roots.length == 0
|
109
|
+
Rake::application.max_parallel_tasks = @threads
|
110
|
+
|
111
|
+
if @linkOnly
|
112
|
+
if @rebuild
|
113
|
+
Printer.printError "Error: --link_only and --rebuild not allowed at the same time"
|
114
|
+
ExitHelper.exit(1)
|
115
|
+
end
|
116
|
+
if @clean
|
117
|
+
Printer.printError "Error: --link_only and -c not allowed at the same time"
|
118
|
+
ExitHelper.exit(1)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def check_valid_dir(dir)
|
124
|
+
if not File.exists?(dir)
|
125
|
+
Printer.printError "Error: Directory #{dir} does not exist"
|
126
|
+
ExitHelper.exit(1)
|
127
|
+
end
|
128
|
+
if not File.directory?(dir)
|
129
|
+
Printer.printError "Error: #{dir} is not a directory"
|
130
|
+
ExitHelper.exit(1)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def set_include_filter(x)
|
135
|
+
@include_filter << x
|
136
|
+
end
|
137
|
+
|
138
|
+
def set_exclude_filter(x)
|
139
|
+
@exclude_filter << x
|
140
|
+
end
|
141
|
+
|
142
|
+
def set_build_config(config)
|
143
|
+
@build_config = config
|
144
|
+
end
|
145
|
+
|
146
|
+
def set_main_dir(dir)
|
147
|
+
check_valid_dir(dir)
|
148
|
+
@main_dir = File.expand_path(dir.gsub(/[\\]/,'/'))
|
149
|
+
@def_root = File.dirname(@main_dir)
|
150
|
+
end
|
151
|
+
|
152
|
+
def set_project(name)
|
153
|
+
@project = name
|
154
|
+
end
|
155
|
+
|
156
|
+
def set_filename(filename)
|
157
|
+
@filename = filename.gsub(/[\\]/,'/')
|
158
|
+
end
|
159
|
+
|
160
|
+
def set_single()
|
161
|
+
@single = true
|
162
|
+
end
|
163
|
+
def set_clean()
|
164
|
+
@clean = true
|
165
|
+
end
|
166
|
+
def set_rebuild()
|
167
|
+
@clean = true
|
168
|
+
@rebuild = true
|
169
|
+
end
|
170
|
+
def set_verbose()
|
171
|
+
@verbose = true
|
172
|
+
end
|
173
|
+
def set_nocache()
|
174
|
+
@nocache = true
|
175
|
+
end
|
176
|
+
def set_check_uninc()
|
177
|
+
@check_uninc = true
|
178
|
+
end
|
179
|
+
def set_prepro()
|
180
|
+
Rake::application.preproFlags = true
|
181
|
+
end
|
182
|
+
def set_linkOnly()
|
183
|
+
@linkOnly = true
|
184
|
+
set_single()
|
185
|
+
end
|
186
|
+
def set_printLess()
|
187
|
+
@printLess = true
|
188
|
+
end
|
189
|
+
def set_color(x)
|
190
|
+
if (x != "black" and x != "white")
|
191
|
+
Printer.printError "Error: color scheme must be 'black' or 'white'"
|
192
|
+
ExitHelper.exit(1)
|
193
|
+
end
|
194
|
+
begin
|
195
|
+
ColorizingFormatter::setColorScheme(x.to_sym)
|
196
|
+
@color = true
|
197
|
+
ColorizingFormatter.enabled = true
|
198
|
+
rescue Exception => e
|
199
|
+
Printer.printError "Error: colored gem not installed (#{e.message})"
|
200
|
+
puts e.backtrace if @verbose
|
201
|
+
ExitHelper.exit(1)
|
202
|
+
end
|
203
|
+
end
|
204
|
+
def set_error()
|
205
|
+
Rake::Task.bail_on_first_error = true
|
206
|
+
end
|
207
|
+
|
208
|
+
def set_show_inc
|
209
|
+
@show_includes = true
|
210
|
+
end
|
211
|
+
|
212
|
+
def set_show_fullnames
|
213
|
+
Rake::application.consoleOutput_fullnames = true
|
214
|
+
end
|
215
|
+
|
216
|
+
def set_root(dir)
|
217
|
+
check_valid_dir(dir)
|
218
|
+
r = File.expand_path(dir.gsub(/[\\]/,'/'))
|
219
|
+
@roots << r if not @roots.include?r
|
220
|
+
end
|
221
|
+
|
222
|
+
def set_threads(num)
|
223
|
+
@threads = String === num ? num.to_i : num
|
224
|
+
if @threads <= 0
|
225
|
+
Printer.printError "Error: number of threads must be > 0"
|
226
|
+
ExitHelper.exit(1)
|
227
|
+
end
|
228
|
+
end
|
229
|
+
def set_socket(num)
|
230
|
+
@socket = String === num ? num.to_i : num
|
231
|
+
end
|
232
|
+
|
233
|
+
def printHash(x, level)
|
234
|
+
x.each do |k,v|
|
235
|
+
if Hash === v
|
236
|
+
if level > 0
|
237
|
+
level.times {print " "}
|
238
|
+
else
|
239
|
+
print "\n"
|
240
|
+
end
|
241
|
+
puts k
|
242
|
+
printHash(v,level+1)
|
243
|
+
elsif Array === v or String === v
|
244
|
+
level.times {print " "}
|
245
|
+
puts "#{k} = #{v}"
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
def print_toolchain(x)
|
251
|
+
tcs = Cxxproject::Toolchain::Provider[x]
|
252
|
+
if tcs.nil?
|
253
|
+
puts "Toolchain not available"
|
254
|
+
else
|
255
|
+
printHash(tcs, 0)
|
256
|
+
end
|
257
|
+
ExitHelper.exit(0)
|
258
|
+
end
|
259
|
+
|
260
|
+
def print_toolchains()
|
261
|
+
puts "Available toolchains:"
|
262
|
+
Cxxproject::Toolchain::Provider.list.keys.each { |c| puts "* #{c}" }
|
263
|
+
ExitHelper.exit(0)
|
264
|
+
end
|
265
|
+
|
266
|
+
def show_license()
|
267
|
+
licenseFile = File.join(File.dirname(File.dirname(File.dirname(__FILE__))), "license.txt")
|
268
|
+
file = File.new(licenseFile, "r")
|
269
|
+
while (line = file.gets)
|
270
|
+
puts "#{line}"
|
271
|
+
end
|
272
|
+
file.close
|
273
|
+
ExitHelper.exit(0)
|
274
|
+
end
|
275
|
+
|
276
|
+
def set_eclipse_version(x)
|
277
|
+
@eclipse_version = x
|
278
|
+
end
|
279
|
+
|
280
|
+
def set_alias_filename(x)
|
281
|
+
@alias_filename = x
|
282
|
+
end
|
283
|
+
|
284
|
+
end
|
285
|
+
|
286
|
+
end
|
287
|
+
|
288
|
+
|