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

import("//src/virtualization/buildtools/romfs_image.gni")

executable("mkromfs") {
  sources = [
    "mkromfs.cc",
  ]
}

test_file = "${target_out_dir}/foo"
test_file_contents = "bar"
test_image = "${target_out_dir}/test.img"

romfs_image("romfs_test_image") {
  write_file(test_file, test_file_contents)
  inputs = [
    test_file,
  ]
  output = test_image
}

action("romfs_test_image_verify") {
  deps = [
    ":romfs_test_image",
  ]
  script = "romfsck.py"
  inputs = [
    test_image,
  ]
  outputs = [
    "${test_image}.verify",
  ]
  args = [
    rebase_path(test_image, root_out_dir),
    rebase_path("${test_image}.verify", root_out_dir),
  ]
}
