# Copyright (C) 2017 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")
import("../../../gn/proto_library.gni")
import("../../../gn/protozero_library.gni")

# Common protos used by both the ":minimal_lite" target (for the service) and
# the generic ":lite" target
proto_sources_minimal = [ "clock_snapshot.proto" ]

proto_sources_trusted = [ "trusted_packet.proto" ]

proto_sources = [
  "test_event.proto",
  "trace_packet.proto",
  "trace.proto",
]

# Protozero generated stubs, for writers.
protozero_library("zero") {
  deps = [
    "../config:zero",
    "android:zero",
    "chrome:zero",
    "filesystem:zero",
    "ftrace:zero",
    "interned_data:zero",
    "power:zero",
    "profiling:zero",
    "ps:zero",
    "sys_stats:zero",
    "track_event:zero",
  ]
  sources = proto_sources_minimal + proto_sources
  proto_in_dir = "$perfetto_root_path/protos"
  proto_out_dir = "$perfetto_root_path/protos"
  generator_plugin_options = "wrapper_namespace=pbzero"
}

# Protobuf Lite stubs, for readers.
proto_library("lite") {
  generate_python = false
  link_deps = [
    ":minimal_lite",
    "../config:lite",
    "android:lite",
    "chrome:lite",
    "filesystem:lite",
    "ftrace:lite",
    "interned_data:lite",
    "power:lite",
    "profiling:lite",
    "ps:lite",
    "sys_stats:lite",
    "track_event:lite",
  ]
  if (perfetto_build_standalone) {
    generate_descriptor = "$perfetto_root_path/protos/trace/trace.descriptor"
  }
  sources = proto_sources
  proto_in_dir = "$perfetto_root_path/protos"
  proto_out_dir = "$perfetto_root_path/protos"
}

# Contains the subprotos of TracePacket that all targets need.
proto_library("minimal_lite") {
  generate_python = false
  link_deps = [ "../config:lite" ]
  sources = proto_sources_minimal
  proto_in_dir = "$perfetto_root_path/protos"
  proto_out_dir = "$perfetto_root_path/protos"
}

# Used by the traced service for packet sanitization.
proto_library("trusted_lite") {
  generate_python = false
  link_deps = [
    ":minimal_lite",
    "../config:lite",
  ]
  sources = proto_sources_trusted
  proto_in_dir = "$perfetto_root_path/protos"
  proto_out_dir = "$perfetto_root_path/protos"
}

# This target is not used in the tree and is built only to guarantee that the
# autogenerated merged proto has a valid syntax.
proto_library("merged_trace") {
  generate_python = false
  proto_in_dir = "$perfetto_root_path/protos"
  proto_out_dir = "$perfetto_root_path/protos"
  sources = [
    "perfetto_trace.proto",
  ]
}
