# 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/test.gni")

if (enable_perfetto_trace_processor_sqlite) {
  source_set("sqlite") {
    sources = [
      "db_sqlite_table.cc",
      "db_sqlite_table.h",
      "query_cache.h",
      "query_constraints.cc",
      "query_constraints.h",
      "scoped_db.h",
      "span_join_operator_table.cc",
      "span_join_operator_table.h",
      "sql_stats_table.cc",
      "sql_stats_table.h",
      "sqlite3_str_split.cc",
      "sqlite3_str_split.h",
      "sqlite_raw_table.cc",
      "sqlite_raw_table.h",
      "sqlite_table.cc",
      "sqlite_table.h",
      "sqlite_utils.h",
      "stats_table.cc",
      "stats_table.h",
      "window_operator_table.cc",
      "window_operator_table.h",
    ]
    deps = [
      "..:ftrace_descriptors",
      "..:metatrace",
      "../../../gn:default_deps",
      "../../../gn:sqlite",
      "../../../include/perfetto/trace_processor",
      "../../../protos/perfetto/trace/ftrace:zero",
      "../../base",
      "../db:lib",
      "../importers:common",
      "../storage",
      "../types",
    ]
  }

  perfetto_unittest_source_set("unittests") {
    testonly = true
    sources = [
      "db_sqlite_table_unittest.cc",
      "query_constraints_unittest.cc",
      "span_join_operator_table_unittest.cc",
      "sqlite3_str_split_unittest.cc",
    ]
    deps = [
      ":sqlite",
      "../../../gn:default_deps",
      "../../../gn:gtest_and_gmock",
      "../../../gn:sqlite",
      "../../base",
    ]
  }

  if (enable_perfetto_benchmarks) {
    source_set("benchmarks") {
      testonly = true
      deps = [
        ":sqlite",
        "../../../gn:benchmark",
        "../../../gn:default_deps",
        "../../../gn:sqlite",
        "../../base",
      ]
      sources = [ "sqlite_vtable_benchmark.cc" ]
    }
  }
}
