# Copyright (C) 2022 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")

source_set("minimal") {
  sources = [ "fuchsia_trace_utils.h" ]
  deps = [
    ":fuchsia_record",
    "../../../../gn:default_deps",
    "../../../../include/perfetto/trace_processor:storage",
    "../../../base",
    "../../storage",
  ]
}

source_set("full") {
  sources = [
    "fuchsia_trace_parser.cc",
    "fuchsia_trace_parser.h",
    "fuchsia_trace_tokenizer.cc",
    "fuchsia_trace_tokenizer.h",
    "fuchsia_trace_utils.cc",
  ]
  deps = [
    ":fuchsia_record",
    ":minimal",
    "../../../../gn:default_deps",
    "../../sorter",
    "../../storage",
    "../../types",
    "../common",
    "../proto:minimal",
  ]
}

source_set("fuchsia_record") {
  sources = [
    "fuchsia_record.cc",
    "fuchsia_record.h",
  ]
  deps = [
    "../../../../gn:default_deps",
    "../../../../include/perfetto/trace_processor:storage",
    "../../containers",
  ]
}

perfetto_unittest_source_set("unittests") {
  testonly = true
  sources = [
    "fuchsia_parser_unittest.cc",
    "fuchsia_trace_utils_unittest.cc",
  ]
  deps = [
    ":full",
    ":minimal",
    "../../../../gn:default_deps",
    "../../../../gn:gtest_and_gmock",
    "../../../../protos/perfetto/common:zero",
    "../../../../protos/perfetto/config:zero",
    "../../../../protos/perfetto/trace:zero",
    "../../../../protos/perfetto/trace/android:zero",
    "../../../../protos/perfetto/trace/chrome:zero",
    "../../../../protos/perfetto/trace/ftrace:zero",
    "../../../../protos/perfetto/trace/interned_data:zero",
    "../../../../protos/perfetto/trace/profiling:zero",
    "../../../../protos/perfetto/trace/ps:zero",
    "../../../../protos/perfetto/trace/sys_stats:zero",
    "../../../../protos/perfetto/trace/track_event:zero",
    "../../../protozero",
    "../../sorter",
    "../../storage",
    "../../util:descriptors",
    "../common",
    "../ftrace:full",
    "../proto:full",
    "../proto:minimal",
  ]
}
