# Copyright (C) 2020 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.gni")

# Track event args parsing logic here is tentatitively planned to eventually
# move to src/util and will be used to implement writing typed args in console
# interceptor.
# Do not add new dependencies to trace_processor code outside of this directory.
#
# TODO(altimin): Move it to src/util and use it in console interceptor.

source_set("util") {
  sources = [ "status_macros.h" ]
  deps = [
    "../../../gn:default_deps",
    "../../../include/perfetto/trace_processor:basic_types",
  ]
}

source_set("gzip") {
  sources = [
    "gzip_utils.cc",
    "gzip_utils.h",
  ]
  deps = [
    "../../../gn:default_deps",
    "../../../include/perfetto/base",
  ]

  # gzip_utils optionally depends on zlib.
  if (enable_perfetto_zlib) {
    deps += [ "../../../gn:zlib" ]
  }
}

source_set("protozero_to_text") {
  sources = [
    "protozero_to_text.cc",
    "protozero_to_text.h",
  ]
  deps = [
    ":descriptors",
    "../../../gn:default_deps",
    "../../../protos/perfetto/common:zero",
    "../../../protos/perfetto/trace/track_event:zero",
    "../../base",
    "../../protozero",
    "../importers:gen_cc_track_event_descriptor",
  ]
}

source_set("interned_message_view") {
  sources = [ "interned_message_view.h" ]
  public_deps = [ "../../../include/perfetto/trace_processor" ]
  deps = [
    "../../../gn:default_deps",
    "../../base",
  ]
}

source_set("descriptors") {
  sources = [
    "descriptors.cc",
    "descriptors.h",
  ]
  deps = [
    ":util",
    "../../../gn:default_deps",
    "../../../protos/perfetto/common:zero",
    "../../../protos/perfetto/trace_processor:zero",
    "../../base",
    "../../protozero",
    "../importers:gen_cc_track_event_descriptor",
  ]
}

source_set("proto_to_args_parser") {
  sources = [
    "debug_annotation_parser.cc",
    "debug_annotation_parser.h",
    "proto_to_args_parser.cc",
    "proto_to_args_parser.h",
  ]
  deps = [
    "../../../gn:default_deps",
    "../../../protos/perfetto/common:zero",
    "../../../protos/perfetto/trace/interned_data:zero",
    "../../../protos/perfetto/trace/track_event:zero",
    "../../../protos/perfetto/trace_processor:zero",
    "../../protozero",
    "../importers:gen_cc_track_event_descriptor",
  ]

  public_deps = [
    ":descriptors",
    ":interned_message_view",
    ":util",
    "../../base",
  ]
}

source_set("unittests") {
  sources = [
    "debug_annotation_parser_unittest.cc",
    "proto_to_args_parser_unittest.cc",
    "protozero_to_text_unittests.cc",
  ]
  testonly = true
  deps = [
    ":descriptors",
    ":proto_to_args_parser",
    ":protozero_to_text",
    "..:gen_cc_test_messages_descriptor",
    "../../../gn:default_deps",
    "../../../gn:gtest_and_gmock",
    "../../../protos/perfetto/common:zero",
    "../../../protos/perfetto/trace/track_event:zero",
    "../../protozero",
    "../../protozero:testing_messages_zero",
    "../importers:gen_cc_track_event_descriptor",
  ]
}
