Class: IAR::Project
Constant Summary
collapse
- TOOLCHAIN =
'iar'
Instance Method Summary
collapse
-
#generator(filter, project_data) ⇒ Object
-
#initialize(project_data, generator_variable, logger = nil) ⇒ Project
constructor
A new instance of Project.
-
#outdir ⇒ Object
-
#save_project ⇒ Object
-
#source ⇒ Object
-
#target_as_defines(target_node, doc) ⇒ Object
-
#target_as_flags(target_node, doc) ⇒ Object
-
#target_as_include(target_node, doc) ⇒ Object
-
#target_as_predefines(target_node, doc) ⇒ Object
-
#target_cc_defines(target_node, doc) ⇒ Object
-
#target_cc_flags(target_node, doc) ⇒ Object
-
#target_cc_include(target_node, doc) ⇒ Object
-
#target_cc_predefines(target_node, doc) ⇒ Object
-
#target_cc_preincludes(target_node, doc) ⇒ Object
-
#target_cp_defines(target_node, doc) ⇒ Object
-
#target_cxx_defines(target_node, doc) ⇒ Object
-
#target_cxx_flags(target_node, doc) ⇒ Object
-
#target_cxx_include(target_node, doc) ⇒ Object
-
#target_cxx_predefines(target_node, doc) ⇒ Object
-
#target_cxx_preincludes(target_node, doc) ⇒ Object
-
#target_ld_flags(target_node, doc) ⇒ Object
-
#target_libraries(target_node, doc) ⇒ Object
-
#target_linker_file(target_node, doc) ⇒ Object
-
#target_outdir(target_node, doc) ⇒ Object
-
#target_tool_chain_add_spec(target_node, doc) ⇒ Object
-
#target_tool_chain_set_spec(target_node, doc) ⇒ Object
tool_chain_specific attribute for each target Params: - target_node: the xml node of given target - doc: the hash that holds the data.
-
#targets ⇒ Object
-
#templates ⇒ Object
-
#type ⇒ Object
#get_board, #get_libraries, #get_output_dir, #get_project_name, #get_src_list, #get_target_list, #get_targets, #get_template, #get_type, #is_toolchain_support, #set_hash
Methods included from EWP
#add_sources, #add_specific, #create_node, #load_node, #new_target, #remove_sources, #remove_targets, #remove_unused, #save, #set_specific
Methods included from Base
#create_method, #process
Constructor Details
#initialize(project_data, generator_variable, logger = nil) ⇒ Project
Returns a new instance of Project.
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/ebngen/adapter/iar.rb', line 23
def initialize(project_data, generator_variable, logger = nil)
@logger = logger
unless (logger)
@logger = Logger.new(STDOUT)
@logger.level = Logger::WARN
end
set_hash(project_data)
@project_name = get_project_name()
@board = get_board()
@paths = PathModifier.new(generator_variable["paths"])
@iar_project_files = {".ewp" => nil, ".dni" => nil, ".ewd" => nil, ".yml" => nil}
return nil if get_template(Project::TOOLCHAIN).nil?
get_template(Project::TOOLCHAIN).each do |template|
@logger.info template
ext = File.extname(template)
if @iar_project_files.keys.include?(ext)
path = @paths.fullpath("default_path",template)
case ext
when ".ewp"
doc = Nokogiri::XML(open(path))
@iar_project_files[ext] = doc
when ".ewd"
doc = Nokogiri::XML(open(path))
@iar_project_files[ext] = doc
when ".dni"
doc = Nokogiri::XML(open(path))
@iar_project_files[ext] = doc
end
end
end
end
|
Instance Method Details
#generator(filter, project_data) ⇒ Object
59
60
61
62
63
64
|
# File 'lib/ebngen/adapter/iar.rb', line 59
def generator(filter, project_data)
return if not is_toolchain_support(Project::TOOLCHAIN)
create_method( Project::TOOLCHAIN)
send(Project::TOOLCHAIN.to_sym, project_data)
save_project()
end
|
#outdir ⇒ Object
84
85
86
|
# File 'lib/ebngen/adapter/iar.rb', line 84
def outdir()
end
|
#save_project ⇒ Object
137
138
139
140
|
# File 'lib/ebngen/adapter/iar.rb', line 137
def save_project()
path = get_output_dir(Project::TOOLCHAIN, @paths.rootdir_table)
save(@iar_project_files['.ewp'], File.join(@paths.rootdir_table['output_root'], path, "#{@project_name}_#{@board}.ewp"))
end
|
#source ⇒ Object
66
67
68
69
70
71
72
73
74
|
# File 'lib/ebngen/adapter/iar.rb', line 66
def source()
return if @iar_project_files['.ewp'].nil?
remove_sources(@iar_project_files['.ewp'])
sources = get_src_list(Project::TOOLCHAIN)
o_path = get_output_dir(Project::TOOLCHAIN, @paths.rootdir_table)
proj_path = File.join(@paths.rootdir_table['output_root'], o_path)
add_sources(@iar_project_files['.ewp'], sources, @paths, proj_path)
end
|
#target_as_defines(target_node, doc) ⇒ Object
160
161
162
163
164
165
166
|
# File 'lib/ebngen/adapter/iar.rb', line 160
def target_as_defines(target_node, doc)
settings = {'ADefines' => {
'state' => doc
}
}
add_specific(target_node, settings)
end
|
#target_as_flags(target_node, doc) ⇒ Object
185
186
187
188
189
190
191
|
# File 'lib/ebngen/adapter/iar.rb', line 185
def target_as_flags(target_node, doc)
settings = {'AExtraOptionsV2' => {
'state' => doc
}
}
add_specific(target_node, settings)
end
|
#target_as_include(target_node, doc) ⇒ Object
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
|
# File 'lib/ebngen/adapter/iar.rb', line 168
def target_as_include(target_node, doc)
o_path = get_output_dir(Project::TOOLCHAIN, @paths.rootdir_table)
proj_path = File.join(@paths.rootdir_table['output_root'], o_path)
settings = {'AUserIncludes' => {} }
inc_array = Array.new
doc.each do |item|
if item['rootdir']
full_path = @paths.fullpath(item['rootdir'],item['path'])
else
full_path = @paths.fullpath('default_path',item['path'])
end
inc_array.insert(-1, File.join("$PROJ_DIR$", @paths.relpath(proj_path, full_path)))
end
settings['AUserIncludes']['state'] = inc_array
add_specific(target_node, settings)
end
|
#target_as_predefines(target_node, doc) ⇒ Object
156
157
158
|
# File 'lib/ebngen/adapter/iar.rb', line 156
def target_as_predefines(target_node, doc)
end
|
#target_cc_defines(target_node, doc) ⇒ Object
214
215
216
217
218
219
220
|
# File 'lib/ebngen/adapter/iar.rb', line 214
def target_cc_defines(target_node, doc)
settings = {'CCDefines' => {
'state' => doc
}
}
add_specific(target_node, settings)
end
|
#target_cc_flags(target_node, doc) ⇒ Object
239
240
241
242
243
244
245
246
247
248
249
250
|
# File 'lib/ebngen/adapter/iar.rb', line 239
def target_cc_flags(target_node, doc)
settings_check = { 'IExtraOptionsCheck' => {
'state' => 1
}
}
add_specific(target_node, settings_check)
settings = {'IExtraOptions' => {
'state' => doc
}
}
add_specific(target_node, settings)
end
|
#target_cc_include(target_node, doc) ⇒ Object
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
|
# File 'lib/ebngen/adapter/iar.rb', line 222
def target_cc_include(target_node, doc)
o_path = get_output_dir(Project::TOOLCHAIN, @paths.rootdir_table)
proj_path = File.join(@paths.rootdir_table['output_root'], o_path)
settings = {'CCIncludePath2' => {} }
inc_array = Array.new
doc.each do |item|
if item['rootdir']
full_path = @paths.fullpath(item['rootdir'],item['path'])
else
full_path = @paths.fullpath('default_path',item['path'])
end
inc_array.insert(-1, File.join("$PROJ_DIR$", @paths.relpath(proj_path, full_path)))
end
settings['CCIncludePath2']['state'] = inc_array
add_specific(target_node, settings)
end
|
#target_cc_predefines(target_node, doc) ⇒ Object
193
194
195
|
# File 'lib/ebngen/adapter/iar.rb', line 193
def target_cc_predefines(target_node, doc)
end
|
#target_cc_preincludes(target_node, doc) ⇒ Object
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
|
# File 'lib/ebngen/adapter/iar.rb', line 197
def target_cc_preincludes(target_node, doc)
o_path = get_output_dir(Project::TOOLCHAIN, @paths.rootdir_table)
proj_path = File.join(@paths.rootdir_table['output_root'], o_path)
settings = {'PreInclude' => {} }
inc_array = Array.new
doc.each do |item|
if item['rootdir']
full_path = @paths.fullpath(item['rootdir'],item['path'])
else
full_path = @paths.fullpath('default_path',item['path'])
end
inc_array.insert(-1, File.join("$PROJ_DIR$", @paths.relpath(proj_path, full_path)))
end
settings['PreInclude']['state'] = inc_array
add_specific(target_node, settings)
end
|
#target_cp_defines(target_node, doc) ⇒ Object
142
143
144
145
146
147
148
149
150
151
152
153
154
|
# File 'lib/ebngen/adapter/iar.rb', line 142
def target_cp_defines(target_node, doc)
value = doc.values.join(" ")
settings = {'OGChipSelectEditMenu' => {
'state' => doc.keys.join("") + "\t" + value
}
}
set_specific(target_node, settings)
settings = {'GEndianModeBE' => {
'state' => 1
}
}
set_specific(target_node, settings)
end
|
#target_cxx_defines(target_node, doc) ⇒ Object
260
261
262
|
# File 'lib/ebngen/adapter/iar.rb', line 260
def target_cxx_defines(target_node, doc)
target_cc_defines(target_node, doc)
end
|
#target_cxx_flags(target_node, doc) ⇒ Object
268
269
270
|
# File 'lib/ebngen/adapter/iar.rb', line 268
def target_cxx_flags(target_node, doc)
target_cc_flags(target_node, doc)
end
|
#target_cxx_include(target_node, doc) ⇒ Object
264
265
266
|
# File 'lib/ebngen/adapter/iar.rb', line 264
def target_cxx_include(target_node, doc)
target_cc_include(target_node, doc)
end
|
#target_cxx_predefines(target_node, doc) ⇒ Object
252
253
254
|
# File 'lib/ebngen/adapter/iar.rb', line 252
def target_cxx_predefines(target_node, doc)
target_cc_predefines(target_node, doc)
end
|
#target_cxx_preincludes(target_node, doc) ⇒ Object
256
257
258
|
# File 'lib/ebngen/adapter/iar.rb', line 256
def target_cxx_preincludes(target_node, doc)
target_cc_preincludes(target_node, doc)
end
|
#target_ld_flags(target_node, doc) ⇒ Object
272
273
274
275
276
277
278
|
# File 'lib/ebngen/adapter/iar.rb', line 272
def target_ld_flags(target_node, doc)
settings = {'IlinkConfigDefines' => {
'state' => doc
}
}
add_specific(target_node, settings)
end
|
#target_libraries(target_node, doc) ⇒ Object
280
281
282
283
284
285
286
|
# File 'lib/ebngen/adapter/iar.rb', line 280
def target_libraries(target_node, doc)
settings = {'IlinkAdditionalLibs' => {
'state' => doc
}
}
add_specific(target_node, settings)
end
|
#target_linker_file(target_node, doc) ⇒ Object
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
|
# File 'lib/ebngen/adapter/iar.rb', line 288
def target_linker_file(target_node, doc)
settings_check = { 'IlinkIcfOverride' => {
'state' => 1
}
}
add_specific(target_node, settings_check)
o_path = get_output_dir(Project::TOOLCHAIN, @paths.rootdir_table)
proj_path = File.join(@paths.rootdir_table['output_root'], o_path)
settings = {'IlinkIcfFile' => {} }
inc_array = Array.new
if doc.has_key?("rootdir")
full_path = @paths.fullpath(doc['rootdir'],doc['path'])
else
full_path = @paths.fullpath('default_path',doc['path'])
end
inc_array.insert(-1, File.join("$PROJ_DIR$", @paths.relpath(proj_path, full_path)))
settings['IlinkIcfFile']['state'] = inc_array.join(" ")
add_specific(target_node, settings)
end
|
#target_outdir(target_node, doc) ⇒ Object
308
309
310
|
# File 'lib/ebngen/adapter/iar.rb', line 308
def target_outdir(target_node, doc)
end
|
133
134
135
|
# File 'lib/ebngen/adapter/iar.rb', line 133
def target_tool_chain_add_spec(target_node, doc)
add_specific(target_node, doc)
end
|
tool_chain_specific attribute for each target Params:
129
130
131
|
# File 'lib/ebngen/adapter/iar.rb', line 129
def target_tool_chain_set_spec(target_node, doc)
set_specific(target_node, doc)
end
|
#targets ⇒ Object
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/ebngen/adapter/iar.rb', line 88
def targets()
convert_lut = {
'cx_flags' => 'cxx_flags',
'cc_define' => 'cc_defines',
'cx_define' => 'cxx_defines',
'as_define' => 'as_defines',
'cp_define' => 'cp_defines',
'ar_flags' => 'ar_flags'
}
get_targets(Project::TOOLCHAIN).each do |key, value|
next if value.nil?
t = new_target(key, @iar_project_files['.ewp'])
if t.nil?
@logger.info "missing default debug configuration in template"
return
end
value.each_key do |subkey|
temp_op = subkey.gsub('-', '_')
if convert_lut.has_key? temp_op
target_op = convert_lut[temp_op]
else
target_op = temp_op
end
methods = self.class.instance_methods(false)
if methods.include?("target_#{target_op}".to_sym)
send("target_#{target_op}".to_sym, t, value[subkey])
else
@logger.info "#{subkey} is not processed try to use the tool-chain specific"
end
end
end
remove_targets(@iar_project_files['.ewp'], get_target_list(Project::TOOLCHAIN))
end
|
#templates ⇒ Object
76
77
78
|
# File 'lib/ebngen/adapter/iar.rb', line 76
def templates()
end
|
#type ⇒ Object
80
81
82
|
# File 'lib/ebngen/adapter/iar.rb', line 80
def type()
end
|