# 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("cpp_blob_emitter") {
  sources = [ "tools/cpp_blob_emitter.py" ]
}

perfetto_py_binary("cpp_blob_emitter_bin") {
  sources = [ "tools/cpp_blob_emitter.py" ]
  main = "tools/cpp_blob_emitter.py"
  deps = [ ":cpp_blob_emitter" ]
}

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",
  ]
}

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