class Zeno::Application

Attributes

arch[R]
dirname[R]
etaos_path[R]
libdir[R]
uploader[R]

Public Class Methods

new(name, path, libdir, arch, upload = nil) click to toggle source
# File lib/zeno/application.rb, line 25
def initialize(name, path, libdir, arch, upload = nil)
  @dirname = name
  @etaos_path = "../#{path}"
  @libdir = "#{libdir}/etaos"
  @arch = arch
  @uploader = upload
end

Public Instance Methods

create() click to toggle source
# File lib/zeno/application.rb, line 33
def create
  raise Zeno::ApplicationAlreadyExistsError if File.directory? @dirname
  FileUtils.mkdir_p @dirname
end
generate() click to toggle source
# File lib/zeno/application.rb, line 38
def generate
  generate_mkfile
  generate_kbuildfile
end

Private Instance Methods

generate_kbuildfile() click to toggle source
# File lib/zeno/application.rb, line 80
def generate_kbuildfile
  file = "#{@dirname}/Kbuild"
  gen = Zeno::FileGenerator.new file
  gen.add_var('obj-y', '# TODO: add source files', '+=')
  gen.add_var('pyusrlib-y', '# TODO: add python libs or delete this line', '+=')
  gen.add_var('crurom-y', '# TODO: add crurom directory or delete this line', ':=')
  gen.add_var('crurom-obj', '# TODO: add crurom object file or delete this line', ':=')
  gen.add_var('ETAOS_LIBS', '-lc', '+=')
  gen.add_var('ETAOS_LIB_DIR', @libdir, ':=')
  gen.add_var('APP_TARGET', "#{@dirname}.img", ':=')
  gen.add_var('clean-files', "#{@dirname}.img", '+=')
  gen.generate
end
generate_mkfile() click to toggle source
# File lib/zeno/application.rb, line 45
def generate_mkfile
  target_rule = "@$(MAKE) -C $(ETAOS) A=`pwd` ARCH=#{@arch} CROSS_COMPILE=#{@arch}-"
  file = "#{@dirname}/Makefile"
  mkfile = Zeno::Makefile.new file
  mkfile.add_var('ETAOS', @etaos_path)
  mkfile.add_var('MAKEFLAGS', '-rR --no-print-directory', '+=')
  mkfile.add_var('OBJCOPY', "#{@arch}-objcopy")
  mkfile.add_var('MCU', "# TODO: add MCU")
  mkfile.add_var('BAUD', "115200")
  mkfile.add_var('PROGRAMMER', "# TODO: set programmer")
  mkfile.add_var('PORT', "# TODO: set port")
  mkfile.add_var('AVRDUDE', "avrdude")
  mkfile.add_var('AVRUPLOAD', "avrupload")
  mkfile.add_target('all', target_rule + " app")
  mkfile.add_target('clean', target_rule + " clean")

  hex_rule = "@$(OBJCOPY) -R .eeprom -O ihex #{@dirname}.img #{@dirname}.hex"
  avrdude_rule = "@$(AVRDUDE) -D -q -V -p $(MCU) -c $(PROGRAMMER) -b $(BAUD) -P $(PORT) "
  avrdude_rule << "-C /etc/avrdude.conf -U flash:w:#{@dirname}.hex:i"

  avrupload_rule = "@$(AVRUPLOAD) -fH test-app.hex -m $(MCU) -p $(PROGRAMMER) -P $(PORT) "
  avrupload_rule << "-b $(BAUD) -c /etc/avrdude.conf"

  case @uploader
  when :avrdude
    mkfile.add_target('hex', hex_rule)
    mkfile.add_target('upload', avrdude_rule)
  when :avrupload
    mkfile.add_target('hex', hex_rule)
    mkfile.add_target('upload', avrupload_rule)
  end

  mkfile.generate
end