# Copyright (C) 2018 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")

protoc_target = "../../gn:protoc($host_toolchain)"

action_foreach("configs") {
  testonly = true
  script = "../../tools/protoc_helper.py"

  deps = [
    "../../protos/perfetto/config:merged_config",
    "../../protos/perfetto/trace:merged_trace",
    protoc_target,
  ]

  sources = [
    "android_log.cfg",
    "atrace.cfg",
    "background.cfg",
    "bad_config.cfg",
    "camera.cfg",
    "client_api.cfg",
    "ftrace.cfg",
    "ftrace_largebuffer.cfg",
    "ftrace_with_filter.cfg",
    "ftrace_with_ksyms.cfg",
    "heapprofd.cfg",
    "long_trace.cfg",
    "mm_events.cfg",
    "scheduling.cfg",
    "summary.cfg",
    "sys_stats.cfg",
    "thermal.cfg",
    "traced_perf.cfg",
  ]

  outputs = [ "$root_out_dir/{{source_file_part}}.protobuf" ]

  # Retrieves the path where protoc is built relative to the dir where commands
  # are ran (root_build_dir == out/xxx). protoc_rel_dir ends up being "." for
  # pure host build and "gcc_like_host" for android builds
  protoc_out_dir = get_label_info(protoc_target, "root_out_dir")
  protoc_rel_dir = rebase_path(protoc_out_dir, root_build_dir)
  protoc_ext = ""
  if (host_os == "win") {
    protoc_ext = ".exe"
  }

  args = [
    "encode",
    "--protoc=$protoc_rel_dir/protoc${protoc_ext}",
    "--input={{source}}",
    "--output={{source_file_part}}.protobuf",
  ]
}
