# 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("//build/compiled_action.gni")
import("//build/python/python_action.gni")

# Generates a flat romfs image from the provided files.
template("romfs_image") {
  image_target = "_${target_name}_image"
  check_target = "_${target_name}_check"
  compiled_action(image_target) {
    assert(defined(invoker.output), "output must be defined for $target_name")
    assert(defined(invoker.inputs), "inputs must be defined for $target_name")
    forward_variables_from(invoker, "*")
    tool = "//src/virtualization/buildtools:mkromfs"
    outputs = [ output ]
    args = [ rebase_path(output, root_out_dir) ]
    foreach(input, inputs) {
      args += [ rebase_path(input, root_out_dir) ]
    }
  }
  python_action(check_target) {
    forward_variables_from(invoker, [ "testonly" ])
    deps = [ ":${image_target}" ]
    script = "//src/virtualization/buildtools/romfsck.py"
    inputs = [ invoker.output ]
    outputs = [ "${invoker.output}.verify" ]
    args = [
      rebase_path(invoker.output, root_out_dir),
      rebase_path("${invoker.output}.verify", root_out_dir),
    ]
  }
  group("${target_name}") {
    forward_variables_from(invoker, [ "testonly" ])
    public_deps = [ ":${image_target}" ]
    deps = [ ":${check_target}" ]
  }
}
