blob: d0aeeb765bc0f03811102d7afe4afefbc1741e91 [file] [log] [blame]
# 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/unification/zx_library.gni")
# Four copies of libtrace-provider are built:
# (1) trace-provider: Main version that is used by non-drivers.
# This copy uses libtrace-engine.so.
# (2) trace-provider-so: Same as trace-provider, but exported to SDK
# as a shared library. This copy uses libtrace-engine.so.
# (3) trace-provider-with-static-engine: For cases where a statically linked
# trace-engine is needed. This is for very special cases. Please DO NOT
# use this unless you KNOW you need to. Generally you do not. If in doubt,
# ask.
# (4) trace-provider-driver: This copy is for use by libdriver.so for the DDK.
template("trace_provider_library") {
zx_library(target_name) {
sdk = "source"
sdk_headers = [
"lib/trace-provider/fdio_connect.h",
"lib/trace-provider/handler.h",
"lib/trace-provider/provider.h",
"lib/trace-provider/fdio_connect.h",
"lib/trace-provider/handler.h",
"lib/trace-provider/provider.h",
]
forward_variables_from(invoker, "*")
if (defined(extra_configs)) {
configs += extra_configs
}
# Not including fdio_connect.h.
if (!defined(sdk_headers)) {
sdk_headers = []
}
sdk_headers += [
"lib/trace-provider/handler.h",
"lib/trace-provider/provider.h",
]
# Header dependencies, not including the trace engine.
# <trace-provider/handler.h> has #include <trace-engine/handler.h>.
if (!defined(public_deps)) {
public_deps = []
}
public_deps += [
# <trace-provider/provider.h> has #include <lib/async/dispatcher.h>.
"//zircon/public/lib/async",
# <trace-provider/provider.h> has #include <lib/zx/channel.h>.
"//zircon/public/lib/zx",
]
if (!defined(sources)) {
sources = []
}
sources += [
"export.h",
"fnv1hash.h",
"handler.cc",
"provider_impl.cc",
"provider_impl.h",
"session.cc",
"session.h",
"utils.cc",
"utils.h",
]
# Source dependencies, not including the trace engine.
if (!defined(deps)) {
deps = []
}
deps += [
"//sdk/fidl/fuchsia.tracing.provider:fuchsia.tracing.provider_c",
"//zircon/public/lib/async-cpp",
"//zircon/public/lib/fidl",
"//zircon/public/lib/zx",
"//zircon/system/ulib/fidl:fidl_base",
]
}
}
trace_provider_fdio_connect_sources = [
"export.h",
"fdio_connect.cc",
]
trace_provider_fdio_sources = [
"fdio_connect.cc",
"provider_with_fdio.cc",
]
trace_provider_fdio_connect_source_deps = [
"//sdk/lib/fdio",
"//zircon/public/lib/zx",
]
trace_provider_fdio_connect_headers = [ "lib/trace-provider/fdio_connect.h" ]
# The default version for the normal case.
trace_provider_library("trace-provider") {
sdk = "source"
sdk_headers = trace_provider_fdio_connect_headers
public_deps = [ "//zircon/system/ulib/trace-engine" ]
sources = trace_provider_fdio_sources
deps = trace_provider_fdio_connect_source_deps
deps += [ "//zircon/system/ulib/trace-engine" ]
}
# Shared version for the SDK.
# The issue is that the SDK doesn't (yet) support generating C FIDL bindings at
# build time, which we need if we export as "source", and since we're
# implemented in C++ we can't export as "static".
# TODO(fxbug.dev/23081): The name here is temporary, pending being able to build
# the library as "libtrace-provider.so".
trace_provider_library("trace-provider-so") {
sdk_publishable = true
sdk = "shared"
shared = true
static = false
defines = [ "SHARED_LIBRARY" ]
sdk_headers = trace_provider_fdio_connect_headers
public_deps = [ "//zircon/system/ulib/trace-engine" ]
sources = trace_provider_fdio_sources
deps = trace_provider_fdio_connect_source_deps
deps += [ "//zircon/system/ulib/trace-engine" ]
runtime_deps = [
"//sdk/lib/fdio:fdio_sdk",
"//zircon/system/ulib/async-default:async-default_sdk",
]
}
# Same as trace-provider.
# TODO(fxbug.dev/23060): Since this is now an alias of trace-provider, delete.
trace_provider_library("trace-provider-with-fdio") {
sdk = "source"
sdk_headers = trace_provider_fdio_connect_headers
public_deps = [ "//zircon/system/ulib/trace-engine" ]
sources = trace_provider_fdio_sources
deps = trace_provider_fdio_connect_source_deps
deps += [ "//zircon/system/ulib/trace-engine" ]
}
# A special version for programs and shared libraries that can't use
# libtrace-engine.so, e.g., because it is unavailable.
# N.B. Please verify that you really need this before using it.
# Generally you DO NOT want to use this.
trace_provider_library("trace-provider-with-static-engine") {
sdk = "static"
sdk_headers = trace_provider_fdio_connect_headers
public_deps = [ "//zircon/system/ulib/trace-engine:trace-engine-static" ]
sources = []
deps = []
deps += [ "//zircon/system/ulib/trace-engine:trace-engine-static" ]
# This is used by magma client drivers, so it can't depend on fdio (or other shared libraries
# besides libc).
assert_no_deps = [
"//sdk/lib/fdio",
"//zircon/system/ulib/async-default",
]
}
# Version for the DDK.
trace_provider_library("trace-provider-driver") {
public_deps = [ "//zircon/system/ulib/trace-engine:trace-engine-driver" ]
deps = [ "//zircon/system/ulib/trace-engine:trace-engine-driver" ]
}
# For apps that use the trace engine, but not via a trace provider.
# These are usually test and benchmarking apps.
# Normal apps are not expected to use this.
zx_library("trace-handler") {
sdk = "static"
sdk_headers = [ "lib/trace-provider/handler.h" ]
public_deps = [
# It is up to the client to choose which engine (shared, static),
# just reference the headers here.
"//zircon/system/ulib/trace-engine:trace-engine-headers-for-handler",
]
sources = [ "handler.cc" ]
}
# A helper library for clients that want to use fdio to connect to
# trace manager, outside of the regular libraries.
# This is for special cases where the client is choosing its engine separately.
zx_library("trace-provider-fdio-connect") {
sdk = "static"
sdk_headers = trace_provider_fdio_connect_headers
sources = trace_provider_fdio_connect_sources
deps = trace_provider_fdio_connect_source_deps
}
group("tests") {
testonly = true
deps = [ "test:tests" ]
}