# 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/zircon/zx_library.gni")

template("trace_library") {
  zx_library(target_name) {
    forward_variables_from(invoker, "*")

    sdk_headers = [
      "lib/trace/internal/event_args.h",
      "lib/trace/internal/event_common.h",
      "lib/trace/internal/event_internal.h",
      "lib/trace/internal/pairs_internal.h",
      "lib/trace/internal/string_traits.h",
      "lib/trace/event.h",
      "lib/trace/event_args.h",
      "lib/trace/observer.h",
    ]

    # Header dependencies, not including the trace engine.
    # <trace/internal/event_internal.h> has #include <trace-engine/instrumentation.h>.
    public_deps += [
      # <trace/observer.h> has #include <trace-engine/instrumentation.h> (already
      # covered, <lib/async/cpp/wait.h>, <fit/function.h>, and <lib/zx/event.h>.
      ":trace-headersonly",
      "//sdk/lib/fit",
      "//zircon/system/ulib/async:async-cpp",
      "//zircon/system/ulib/zx",
    ]

    sources = [
      "event.cc",
      "observer.cc",
    ]

    # Source dependencies, not including the trace engine.
    deps += [
      "//sdk/lib/fit",
      "//zircon/system/ulib/async",
      "//zircon/system/ulib/async:async-cpp",
      "//zircon/system/ulib/zx",
    ]
  }
}

set_defaults("trace_library") {
  configs = default_common_binary_configs
}

config("trace_include") {
  include_dirs = [ "include" ]
}

sdk_source_set("trace-headersonly") {
  category = "partner"
  sdk_name = "trace-headersonly"

  public = [
    "include/lib/trace/event.h",
    "include/lib/trace/event_args.h",
    "include/lib/trace/internal/event_args.h",
    "include/lib/trace/internal/event_common.h",
    "include/lib/trace/internal/event_internal.h",
    "include/lib/trace/internal/pairs_internal.h",
    "include/lib/trace/internal/string_traits.h",
    "include/lib/trace/observer.h",
  ]

  sdk_headers_for_internal_use = [
    "include/lib/trace/internal/event_internal.h",
    "include/lib/trace/internal/pairs_internal.h",
    "include/lib/trace/internal/event_args.h",
    "include/lib/trace/internal/event_common.h",
    "include/lib/trace/internal/string_traits.h",
  ]

  public_deps = [
    "//sdk/lib/fit",
    "//zircon/system/ulib/async",
    "//zircon/system/ulib/async:async-cpp",
    "//zircon/system/ulib/trace-engine:trace-engine-headersonly",
    "//zircon/system/ulib/zx",
  ]
  public_configs = [ ":trace_include" ]
}

# The default version for the normal case, and for the SDK.
# For the SDK this needs to be published as "source": We're implemented in
# C++ and C++ SDK libraries can't be published as "static".
# TODO(https://fxbug.dev/42097099): libtrace-engine.so is getting linked into places it shouldn't.
trace_library("trace") {
  sdk_publishable = "partner"
  sdk = "source"
  public_deps = [ "//zircon/system/ulib/trace-engine" ]
  deps = [ "//zircon/system/ulib/trace-engine" ]
  configs += [
    # TODO(https://fxbug.dev/42136089): delete the below and fix compiler warnings
    "//build/config:Wno-conversion",
  ]
}

# A special version for programs and shared libraries that can't use
# libtrace-engine.so.
# N.B. Please verify that you really need this before using it.
# Generally you DON'T want to use this.
trace_library("trace-with-static-engine") {
  sdk = "static"
  public_deps = [ "//zircon/system/ulib/trace-engine:trace-engine-static" ]
  deps = [ "//zircon/system/ulib/trace-engine:trace-engine-static" ]

  # TODO(https://fxbug.dev/42136089): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}
