# Copyright 2016 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/package.gni")

source_set("lib") {
  sources = [
    "app.cc",
    "app.h",
    "config.cc",
    "config.h",
    "trace_manager.cc",
    "trace_manager.h",
    "trace_provider_bundle.cc",
    "trace_provider_bundle.h",
    "trace_session.cc",
    "trace_session.h",
    "tracee.cc",
    "tracee.h",
    "util.cc",
    "util.h",
  ]

  deps = [
    "//src/lib/fsl",
    "//third_party/rapidjson",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/trace-provider",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.tracing.controller",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/trace-reader",
    "//zircon/public/lib/zx",
    "//zircon/system/fidl/fuchsia-tracing-provider",
  ]
}

executable("bin") {
  output_name = "trace_manager"

  sources = [ "main.cc" ]

  deps = [
    ":lib",
    "//src/lib/fxl",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/async-loop-default",
  ]
}

package("trace_manager") {
  deps = [ ":bin" ]

  binary = "trace_manager"

  meta = [
    {
      path = rebase_path("meta/trace_manager.cmx")
      dest = "trace_manager.cmx"
    },
  ]

  resources = [
    {
      path = rebase_path("tracing.config")
      dest = "tracing.config"
    },
  ]
}
