# Copyright 2020 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/config.gni")
import("//build/json/validate_json.gni")

# Validates a tee manager configuration file against a schema.
#
# Parameters
#   config (required)
#     This is the tee manager config file that needs to be validated.
template("tee_manager_config_validate") {
  validate_json(target_name) {
    forward_variables_from(invoker,
                           [
                             "deps",
                             "public_deps",
                             "testonly",
                             "visibility",
                           ])

    data = invoker.config
    schema = "//src/security/tee_manager/tee_manager_config_schema.json"
  }
}

# Packages a tee manager configuration after validating it.
#
# Parameters
#   config (required)
#     A file containing a configuration for the tee manager.
template("tee_manager_config") {
  validate_target = target_name + "_validate"

  tee_manager_config_validate(validate_target) {
    forward_variables_from(invoker,
                           [
                             "deps",
                             "testonly",
                             "visibility",
                           ])

    config = invoker.config
  }

  config_data(target_name) {
    for_pkg = "tee_manager"
    sources = [ rebase_path(invoker.config) ]

    outputs = [ "tee_manager.config" ]

    deps = [ ":${validate_target}" ]
  }
}
