# Copyright 2018 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")

gperftools_src_root = "//third_party/gperftools/src/tests/"

executable("stacktrace_unittest") {
  #  testonly = true

  sources = [ rebase_path("stacktrace_unittest.cc", ".", gperftools_src_root) ]

  deps = [
    "//src/lib/fsl",
    "//src/lib/fxl",
    "//src/performance/lib/profiler:profiler_static",
  ]

  # TODO(https://fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]

  cflags = [ "-Wno-extra-semi" ]
}

source_set("testutil") {
  sources = [ rebase_path("testutil.cc", ".", gperftools_src_root) ]
  deps = [ "//src/performance/lib/profiler:profiler_static" ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]

  cflags = [ "-Wno-extra-semi" ]
}

executable("profiler_unittest") {
  #  testonly = true

  sources = [ rebase_path("profiler_unittest.cc", ".", gperftools_src_root) ]

  deps = [
    ":testutil",
    "//src/lib/fsl",
    "//src/lib/fxl",
    "//src/performance/lib/profiler:profiler_static",
  ]
}

executable("profiledata_unittest") {
  #  testonly = true

  sources = [ rebase_path("profiledata_unittest.cc", ".", gperftools_src_root) ]

  deps = [
    ":testutil",
    "//src/lib/fsl",
    "//src/lib/fxl",
    "//src/performance/lib/profiler:profiler_static",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

fuchsia_package("profiler_tests") {
  #  testonly = true

  deps = [
    ":profiledata_unittest",
    ":profiler_unittest",
    ":stacktrace_unittest",
  ]
}
