# 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")

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

  sources = [ "main.cc" ]

  deps = [ ":trace_app" ]

  # TODO(46850): Fix the leaks and remove this.
  deps += [ "//build/config/sanitizers:suppress-lsan.DO-NOT-USE-THIS" ]
}

source_set("trace_app") {
  sources = [
    "app.cc",
    "app.h",
    "cmd_utils.cc",
    "cmd_utils.h",
    "command.cc",
    "command.h",
    "commands/list_categories.cc",
    "commands/list_categories.h",
    "commands/record.cc",
    "commands/record.h",
    "commands/time.cc",
    "commands/time.h",
    "results_export.cc",
    "results_export.h",
    "results_output.cc",
    "results_output.h",
    "tracer.cc",
    "tracer.h",
    "utils.cc",
    "utils.h",
  ]

  public_deps = [
    "//garnet/lib/measure",
    "//garnet/lib/trace_converters:chromium",
    "//sdk/fidl/fuchsia.tracing.controller",
    "//sdk/lib/sys/cpp",
    "//src/lib/fsl",
    "//src/lib/fxl",
    "//third_party/zlib:zfstream",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/async-loop-default",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/trace-reader",
  ]

  deps = [
    ":spec",
    "//third_party/rapidjson",
  ]
}

source_set("spec") {
  sources = [
    "spec.cc",
    "spec.h",
  ]

  public_deps = [
    "//garnet/lib/measure",
    "//src/lib/fxl",
    "//zircon/public/lib/zx",
  ]

  deps = [
    "//src/lib/json_parser",
    "//third_party/rapidjson",
  ]
}

source_set("unittests") {
  testonly = true

  sources = [ "spec_unittest.cc" ]

  deps = [
    ":spec",
    ":trace_app",
    "//src/lib/fxl",
    "//third_party/googletest:gtest",
  ]
}

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

  binaries = [
    {
      name = "trace"
      shell = true
    },
  ]

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

  # If your build includes the target trace tool, your $host_tools_dir
  # contains the utilities to work with traces copied from the target.
  data_deps = [ "//garnet/bin/traceutil" ]
}
