class IAR::Project

Constants

TOOLCHAIN

Public Class Methods

new(project_data, generator_variable, logger = nil) click to toggle source
# 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

Public Instance Methods

document() click to toggle source
# File lib/ebngen/adapter/iar.rb, line 84
def document()
        project_name = get_project_name()

end
generator(filter, project_data) click to toggle source
# 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
save_project() click to toggle source
# File lib/ebngen/adapter/iar.rb, line 138
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() click to toggle source
# 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) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 161
def target_as_defines(target_node, doc)
        defines_array = Array.new
        doc.each do |item|
          if item.class == Hash
              item.each do |key, value|
                defines_array.insert(-1, "#{key}=#{value}")
            end
          else
       defines_array.insert(-1, item)
      end
        end
        settings = {'ADefines' => {
                        'state' => defines_array
                                }
                        }
        add_specific(target_node, settings)
end
target_as_flags(target_node, doc) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 196
def target_as_flags(target_node, doc)
        flags_array = Array.new
        doc.each do |item|
          if item.class == Hash
              item.each do |key, value|
                flags_array.insert(-1, "#{key}=#{value}")
            end
          else
       flags_array.insert(-1, item)
      end
        end
        settings = {'AExtraOptionsV2' => {
                        'state' => flags_array
                                }
                        }
        add_specific(target_node, settings)
end
target_as_include(target_node, doc) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 179
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) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 157
def target_as_predefines(target_node, doc)

end
target_cc_defines(target_node, doc) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 235
def target_cc_defines(target_node, doc)
        defines_array = Array.new
        doc.each do |item, item_value|
           if item_value.nil?
         defines_array.insert(-1, "#{item}")
       else
      defines_array.insert(-1, "#{item}=#{item_value}")
       end
        end
        settings = {'CCDefines' => {
                        'state' => defines_array
                                }
                           }
        add_specific(target_node, settings)
end
target_cc_flags(target_node, doc) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 268
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) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 251
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) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 214
def target_cc_predefines(target_node, doc)

end
target_cc_preincludes(target_node, doc) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 218
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) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 143
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) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 289
def target_cxx_defines(target_node, doc)
        target_cc_defines(target_node, doc)
end
target_cxx_flags(target_node, doc) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 297
def target_cxx_flags(target_node, doc)
        target_cc_flags(target_node, doc)
end
target_cxx_include(target_node, doc) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 293
def target_cxx_include(target_node, doc)
        target_cc_include(target_node, doc)
end
target_cxx_predefines(target_node, doc) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 281
def target_cxx_predefines(target_node, doc)
        target_cc_predefines(target_node, doc)
end
target_cxx_preincludes(target_node, doc) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 285
def target_cxx_preincludes(target_node, doc)
        target_cc_preincludes(target_node, doc)
end
target_ld_flags(target_node, doc) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 301
def target_ld_flags(target_node, doc)
        settings = {'IlinkConfigDefines' => {
                        'state' => doc
                                }
                           }
        add_specific(target_node, settings)
end
target_libraries(target_node, doc) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 309
def target_libraries(target_node, doc)
        settings = {'IlinkAdditionalLibs' => {
                        'state' => doc
                                }
                           }
        add_specific(target_node, settings)
end
target_linker_file(target_node, doc) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 317
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) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 337
        def target_outdir(target_node, doc)
=begin
                <option>
          <name>IlinkOutputFile</name>
          <state>K70_pit_drivers_test.out</state>
        </option>
=end
                settings = { 'IlinkOutputFile' => {
                                'state' => "#{get_project_name()}.out"
                        }
                }
                set_specific(target_node, settings)
        end
target_tool_chain_add_spec(target_node, doc) click to toggle source
# File lib/ebngen/adapter/iar.rb, line 134
def target_tool_chain_add_spec(target_node, doc)
        add_specific(target_node, doc)
end
target_tool_chain_set_spec(target_node, doc) click to toggle source

tool_chain_specific attribute for each target Params:

  • target_node: the xml node of given target

  • doc: the hash that holds the data

# File lib/ebngen/adapter/iar.rb, line 130
def target_tool_chain_set_spec(target_node, doc)
        set_specific(target_node, doc)
end
targets() click to toggle source
# File lib/ebngen/adapter/iar.rb, line 89
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
templates() click to toggle source
# File lib/ebngen/adapter/iar.rb, line 76
def templates()
        #load tempaltes
end
type() click to toggle source
# File lib/ebngen/adapter/iar.rb, line 80
def type()
        #set project type
end