# Copyright (C) 2019 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("../../../gn/perfetto_component.gni")
import("../../../gn/test.gni")

# Used by two static libs - trace_processor and libpprofbuilder, hence using
# perfetto_component to turn this into a cc_library in bazel builds.
# The 'public' section gets converted to 'hdrs', and is necessary for the bazel
# build to pass strict header checks.
perfetto_component("containers") {
  public = [
    "bit_vector.h",
    "bit_vector_iterators.h",
    "null_term_string_view.h",
    "nullable_vector.h",
    "row_map.h",
    "string_pool.h",
  ]
  sources = [
    "bit_vector.cc",
    "bit_vector_iterators.cc",
    "nullable_vector.cc",
    "row_map.cc",
    "string_pool.cc",
  ]
  deps = [
    "../../../gn:default_deps",
    "../../../include/perfetto/protozero",
    "../../base",
  ]
}

perfetto_unittest_source_set("unittests") {
  testonly = true
  sources = [
    "bit_vector_unittest.cc",
    "null_term_string_view_unittest.cc",
    "nullable_vector_unittest.cc",
    "row_map_unittest.cc",
    "string_pool_unittest.cc",
  ]
  deps = [
    ":containers",
    "../../../gn:default_deps",
    "../../../gn:gtest_and_gmock",
  ]
}

if (enable_perfetto_benchmarks) {
  source_set("benchmarks") {
    testonly = true
    deps = [
      ":containers",
      "../../../gn:benchmark",
      "../../../gn:default_deps",
    ]
    sources = [
      "bit_vector_benchmark.cc",
      "nullable_vector_benchmark.cc",
      "row_map_benchmark.cc",
    ]
  }
}
