# Copyright 2019 The Fuchsia Authors
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT

zx_library("instrumentation") {
  kernel = true
  sources = []
  public_deps = [ "$zx/system/ulib/fbl:headers" ]
  if (is_kernel) {
    sources += [ "vmo.cc" ]
    deps = [
      ":profile",
      ":sancov",
      "$zx/kernel/lib/ktl",
      "$zx/kernel/object",
      "$zx/system/ulib/fbl",
      "asan",
    ]
    public_deps += [
      # <lib/instrumentation/vmo.h> has #include <ktl/array.h>.
      "$zx/kernel/lib/ktl:headers",

      # TODO(fxb/51163): Move this to deps when possible.
      # <lib/instrumentation/asan/asan-init.cc> has #include <vm/vm_aspace.h>.
      "$zx/kernel/vm:headers",
    ]
  }
}

# This defines C symbol `__llvm_profile_header` with reference to the other
# `__llvm_prof*` sections generated by the compiler.  These pasted together in
# the right order make up the data file format understood by `llvm-profdata`.
# That can be done statically in a linker script, or dynamically at run time
# by code referring to the various implicit `__start___llvm_prof*` symbols.
# The compiler also generates a dummy reference to `__llvm_profile_runtime`,
# so a symbol by that name must be defined at link time regardless; this file
# also defines it.
source_set("profile") {
  _profile_config = [ "$zx/public/gn/config/instrumentation:profile" ]
  if (toolchain.configs + _profile_config - _profile_config !=
      toolchain.configs) {
    sources = [ "profile.cc" ]

    if (current_os == "win") {
      # The LLVM header file describing the instrumentation data tests this.
      defines = [ "_WIN32" ]
    }
  }
}

source_set("sancov") {
  _sancov_config = [ "$zx/public/gn/config/instrumentation:sancov" ]
  if (configs + _sancov_config - _sancov_config != configs) {
    configs -= _sancov_config
    sources = [ "sancov.cc" ]
  }
}
