Class: IAR::Project

Inherits:
Object
  • Object
show all
Includes:
Base, EWD, EWP, UNI_Project
Defined in:
lib/ebngen/adapter/iar.rb

Constant Summary collapse

TOOLCHAIN =
'iar'

Instance Method Summary collapse

Methods included from UNI_Project

#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)
		  #begin
			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
		  #rescue
		  #	@logger.info "failed to open #{template}"
		  #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

#outdirObject



84
85
86
# File 'lib/ebngen/adapter/iar.rb', line 84

def outdir()

end

#save_projectObject



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

#sourceObject



66
67
68
69
70
71
72
73
74
# File 'lib/ebngen/adapter/iar.rb', line 66

def source()
	#add sources to target
	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

#target_tool_chain_add_spec(target_node, doc) ⇒ Object



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

#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



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

#targetsObject



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?
		#add target for ewp
		t = new_target(key, @iar_project_files['.ewp'])
		if t.nil?
		  @logger.info "missing default debug configuration in template"
			  return
		end
		#do the target settings
		value.each_key do |subkey|
			#for backward compatible
			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

#templatesObject



76
77
78
# File 'lib/ebngen/adapter/iar.rb', line 76

def templates()
	#load tempaltes
end

#typeObject



80
81
82
# File 'lib/ebngen/adapter/iar.rb', line 80

def type()
	#set project type
end