# 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/components.gni")
import("//build/config/linker.gni")
import("//build/test.gni")
import("//build/zircon/migrated_targets.gni")

zx_library("zircon-internal") {
  sdk = "source"
  sdk_headers = [
    "lib/zircon-internal/align.h",
    "lib/zircon-internal/default_stack_size.h",
    "lib/zircon-internal/device/cpu-trace/intel-pm-events.inc",
    "lib/zircon-internal/device/cpu-trace/intel-pm.h",
    "lib/zircon-internal/device/cpu-trace/intel-pt.h",
    "lib/zircon-internal/device/cpu-trace/perf-mon.h",
    "lib/zircon-internal/device/cpu-trace/skylake-misc-events.inc",
    "lib/zircon-internal/device/cpu-trace/skylake-pm-events.inc",
    "lib/zircon-internal/device/cpu-trace/goldmont-pm-events.inc",
    "lib/zircon-internal/e820.h",
    "lib/zircon-internal/fnv1hash.h",
    "lib/zircon-internal/ktrace-def.h",
    "lib/zircon-internal/ktrace.h",
    "lib/zircon-internal/macros.h",
    "lib/zircon-internal/mtrace.h",
    "lib/zircon-internal/paths.h",
    "lib/zircon-internal/unique-backtrace.h",
    "lib/zircon-internal/xorshiftrand.h",
  ]

  sources = []
}

group("tests") {
  testonly = true
  deps = [
    ":zircon-internal-tests",
    ":zircon-internal-unittests($host_toolchain)",
  ]
}

test("zircon-internal-unittests") {
  sources = [ "unique-backtrace-tests.cc" ]

  # Ensure aggressive ICF is enabled regardless of optimization defaults.
  _icf = [ "//build/config:icf" ]
  if (configs + _icf - _icf == configs) {
    configs += [ "//build/config:icf" ]
  }

  # The code-generation switches required for linker GC are also required for
  # ICF, so make sure those are also enabled.
  _linker_gc = [ "//build/config:linker_gc" ]
  if (configs + _linker_gc - _linker_gc == configs) {
    configs += [ "//build/config:linker_gc" ]
  }

  # Instrumentation can prevent ICF that would otherwise happen in normal
  # compilation, so the test code needs to know whether to test that ICF
  # actually happened when expected or not.  (It tests that as a baseline to
  # verify that its test of preventing ICF is actually meaningful.)
  icf_works =
      (linker == "lld" || linker == "gold") && !toolchain_variant.instrumented
  defines = [ "ICF_WORKS=$icf_works" ]

  deps = [
    ":zircon-internal",
    "//zircon/system/ulib/zxtest",
  ]

  if (is_fuchsia) {
    deps += [
      "//zircon/system/ulib/elf-psabi",
      "//zircon/system/ulib/zx",
    ]
  }
}

fuchsia_unittest_package("zircon-internal-tests") {
  deps = [
    ":zircon-internal-unittests",
    "//src/sys/testing/elftest",
  ]
}
