# Copyright 2020 The Chromium OS 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("//common-mk/pkg_config.gni")
import("//common-mk/proto_library.gni")

_event_output_dir = "${root_gen_dir}/include/metrics/structured"
_xml_file = "structured.xml"

static_library("structured") {
  sources = [
    "event_base.cc",
    "event_base.h",
  ]

  public_deps = [ ":structured_events" ]
}

action("gen_structured_events") {
  script = "gen_events.py"

  inputs = [
    "gen_events.py",
    "codegen.py",
    "model.py",
    "model_util.py",
    "templates.py",
  ]
  sources = [ _xml_file ]

  outputs = [
    _event_output_dir + "/structured_events.cc",
    _event_output_dir + "/structured_events.h",
  ]

  args = [
    "--input",
    rebase_path(_xml_file, root_build_dir),
    "--output",
    _event_output_dir,
  ]
}

static_library("structured_events") {
  sources = get_target_outputs(":gen_structured_events")

  include_dirs = [ _event_output_dir ]

  deps = [ ":gen_structured_events" ]
}
