// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <iostream>

#include "base/files/file.h"
#include "base/files/file_path.h"
#include "base/logging.h"
#include "mojo/edk/embedder/embedder.h"
#include "mojo/edk/embedder/simple_platform_support.h"
#include "mojo/nacl/sfi/nacl_bindings/monacl_sel_main.h"
#include "native_client/src/public/nacl_desc.h"

NaClDesc* OpenFile(const char* filename) {
  base::FilePath path(filename);
  base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ);
  if (!file.IsValid()) {
    perror(filename);
    exit(1);
  }
  return NaClDescCreateWithFilePathMetadata(file.TakePlatformFile(), "");
}

int main(int argc, char* argv[]) {
  if (argc < 3) {
    std::cout << "Usage: " << argv[0] << " irt.nexe app.nexe [args for app]" <<
        std::endl;
    return 1;
  }

  const char* irt_file = argv[1];
  const char* nexe_file = argv[2];

  NaClDesc* irt_desc = OpenFile(irt_file);
  NaClDesc* nexe_desc = OpenFile(nexe_file);

  // TODO(vtl): Use make_unique when C++14 is available.
  mojo::embedder::Init(std::unique_ptr<mojo::embedder::PlatformSupport>(
      new mojo::embedder::SimplePlatformSupport()));

  int exit_code = mojo::LaunchNaCl(nexe_desc, irt_desc, argc - 2, argv + 2,
                                   MOJO_HANDLE_INVALID);

  // Exits the process cleanly, does not return.
  mojo::NaClExit(exit_code);
  NOTREACHED();
  return 1;
}
