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

perfetto_py_library("trace_processor_table_generator") {
  sources = [
    "generators/trace_processor_table/public.py",
    "generators/trace_processor_table/serialize.py",
    "generators/trace_processor_table/util.py",
  ]
}

perfetto_py_library("trace_processor_stdlib_docs") {
  sources = [
    "generators/sql_processing/docs_extractor.py",
    "generators/sql_processing/docs_parse.py",
    "generators/sql_processing/utils.py",
  ]
}

perfetto_py_library("trace_processor_diff_tests") {
  sources = [
    "generators/diff_tests/runner.py",
    "generators/diff_tests/testing.py",
    "generators/diff_tests/utils.py",
  ]
}

perfetto_py_binary("trace_processor_py_example") {
  sources = [ "example.py" ]
  deps = [
    ":trace_processor_py",
    "../gn:pandas_py",
  ]
  main = "example.py"
}

perfetto_py_library("common") {
  sources = [
    "perfetto/common/exceptions.py",
    "perfetto/common/query_result_iterator.py",
  ]
}

perfetto_py_library("trace_processor_py_no_resolvers") {
  sources = [
    "perfetto/trace_processor/__init__.py",
    "perfetto/trace_processor/api.py",
    "perfetto/trace_processor/http.py",
    "perfetto/trace_processor/platform.py",
    "perfetto/trace_processor/protos.py",
    "perfetto/trace_processor/shell.py",
  ]
  data = [
    "perfetto/trace_processor/trace_processor.descriptor",
    "perfetto/trace_processor/metrics.descriptor",
    "..:trace_processor_shell",
  ]
  deps = [
    ":common",
    ":trace_uri_resolver",
    "../gn:pandas_py",
    "../gn:protobuf_py",
    "../gn:tp_vendor_py",
  ]
}

perfetto_py_library("trace_processor_py") {
  deps = [
    ":trace_processor_py_no_resolvers",
    "../gn:tp_resolvers_py",
  ]
}

perfetto_py_library("trace_uri_resolver") {
  sources = [
    "perfetto/trace_uri_resolver/__init__.py",
    "perfetto/trace_uri_resolver/path.py",
    "perfetto/trace_uri_resolver/registry.py",
    "perfetto/trace_uri_resolver/resolver.py",
    "perfetto/trace_uri_resolver/util.py",
  ]
}

perfetto_py_library("experimental_slice_breakdown_lib") {
  sources = [
    "perfetto/experimental/slice_breakdown/__init__.py",
    "perfetto/experimental/slice_breakdown/breakdown.py",
  ]
  deps = [ ":trace_processor_py" ]
}

perfetto_py_binary("experimental_slice_breakdown_bin") {
  sources = [ "tools/slice_breakdown.py" ]
  main = "tools/slice_breakdown.py"
  deps = [
    ":experimental_slice_breakdown_lib",
    ":trace_processor_py",
    "../gn:pandas_py",
  ]
}

perfetto_py_library("batch_trace_processor") {
  sources = [
    "perfetto/batch_trace_processor/__init__.py",
    "perfetto/batch_trace_processor/api.py",
    "perfetto/batch_trace_processor/platform.py",
  ]
  deps = [
    ":trace_processor_py",
    "../gn:pandas_py",
    "../gn:tp_vendor_py",
  ]
}
