create_nmf.rb   [plain text]


#!/usr/bin/ruby
# Copyright:: Copyright 2012 Google Inc.
# License:: All Rights Reserved.
# Original Author:: Yugui Sonoda (mailto:yugui@google.com)
#
# Wrapper for create_nmf.py / generate_nmf.py

require File.join(File.dirname(__FILE__), 'nacl-config')

include NaClConfig
$verbosity = 0

def usage_and_exit
  $stderr.puts "Usage: #{$PROGRAM_NAME} [--verbose=N] path/to/input.nexe path/to/output.nmf"
  exit false
end

def create_dynamically_linked(nmf, exe)
  cmd = [
    PYTHON, CREATE_NMF,
    '-o', nmf,
    '-D', OBJDUMP,
    '-L', HOST_LIB,
    exe
  ]
  puts cmd.join(' ') if $verbosity > 0
  exec(*cmd)
end

def create_statically_linked(nmf, exe)
  File.open(nmf, "w") {|f|
    f.write <<-EOS.gsub(/^ {6}/, '')
      {
        "program": {
          "#{ARCH}": {
            "url": "#{exe}"
          }
        }
      }
    EOS
  }
end

def main
  while m = ARGV.first.match(/--([a-z-]+)(?:=(\S+))?/)
    case m[1]
    when 'verbose'
      usage_and_exit unless m[2][/\A[0-9]+\z/]
      $verbosity = m[2].to_i
    when 'help'
      usage_end_exit
    end
    ARGV.shift
  end

  usage_and_exit if ARGV.size < 2

  exe, nmf = ARGV[0], ARGV[1]
  if newlib?
    create_statically_linked(nmf, exe)
  else
    create_dynamically_linked(nmf, exe)
  end
end

if __FILE__ == $0
   main()
end