blob: f854091ea9058a808e9e64137170c65c1abf5a52 [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/zircon/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.
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",
]
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/system/ulib/async",
# <trace-provider/provider.h> has #include <lib/zx/channel.h>.
"//zircon/system/ulib/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_cpp",
"//sdk/lib/fidl",
"//sdk/lib/fidl_base",
"//zircon/system/ulib/async:async-cpp",
"//zircon/system/ulib/zx",
]
}
}
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/system/ulib/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
sources += [ "start.cc" ]
deps = trace_provider_fdio_connect_source_deps
deps += [
"//zircon/system/ulib/async-loop",
"//zircon/system/ulib/async-loop:async-loop-cpp",
"//zircon/system/ulib/async-loop:async-loop-default",
"//zircon/system/ulib/sync",
"//zircon/system/ulib/trace",
"//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(https://fxbug.dev/42097127): The name here is temporary, pending being able to build
# the library as "libtrace-provider.so".
#
# TODO(https://fxbug.dev/42096938): Add start.cc to this library in order to match the
# non-shared version of the library.
trace_provider_library("trace-provider-so") {
sdk_publishable = "partner"
sdk = "shared"
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" ]
}
# 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",
]
}
# 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-headersonly",
]
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" ]
}