# 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/cpp/library_headers.gni")
import("//build/cpp/sdk_source_set.gni")

library_headers("headers") {
  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/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.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",
    "lib/zircon-internal/thread_annotations.h",
  ]
}

sdk_source_set("zircon-internal") {
  category = "internal"
  sdk_name = "zircon-internal"
  public = [
    "include/lib/zircon-internal/align.h",
    "include/lib/zircon-internal/default_stack_size.h",
    "include/lib/zircon-internal/device/cpu-trace/goldmont-pm-events.inc",
    "include/lib/zircon-internal/device/cpu-trace/intel-pm-events.inc",
    "include/lib/zircon-internal/device/cpu-trace/intel-pm.h",
    "include/lib/zircon-internal/device/cpu-trace/perf-mon.h",
    "include/lib/zircon-internal/device/cpu-trace/skylake-misc-events.inc",
    "include/lib/zircon-internal/device/cpu-trace/skylake-pm-events.inc",
    "include/lib/zircon-internal/e820.h",
    "include/lib/zircon-internal/fnv1hash.h",
    "include/lib/zircon-internal/ktrace.h",
    "include/lib/zircon-internal/macros.h",
    "include/lib/zircon-internal/mtrace.h",
    "include/lib/zircon-internal/paths.h",
    "include/lib/zircon-internal/thread_annotations.h",
    "include/lib/zircon-internal/unique-backtrace.h",
    "include/lib/zircon-internal/xorshiftrand.h",
  ]
  include_base = "include"
  non_sdk_deps = [ ":headers" ]
  deps = [ "//zircon/system/public" ]
}

if (!is_kernel) {
  import("//build/components.gni")
  import("//build/config/linker.gni")
  import("//build/test.gni")

  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 += [
        "//src/lib/elfldltl",
        "//zircon/system/ulib/zx",
      ]
    }
  }

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