# 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("trace_processor_py") {
  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 = [
    ":trace_uri_resolver",
    "../gn:pandas_py",
    "../gn:protobuf_py",
    "../gn:tp_vendor_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",
  ]
}
