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

# The core source files that are used both by the "full" version (the host
# executable) and by the "lite" version (the WASM module for the UI).
source_set("common") {
  public_deps = [
    "../../gn:default_deps",
    "../../include/perfetto/base",
    "../../include/perfetto/traced:sys_stats_counters",
    "../../protos/perfetto/trace:lite",
    "../../protos/perfetto/trace/ftrace:lite",
  ]
  sources = [
    "ftrace_event_formatter.cc",
    "ftrace_event_formatter.h",
    "ftrace_inode_handler.cc",
    "ftrace_inode_handler.h",
    "main.cc",
    "process_formatter.h",
    "trace_to_systrace.cc",
    "trace_to_systrace.h",
    "trace_to_text.h",
    "utils.cc",
    "utils.h",
  ]
}

# Lite target for the WASM UI. Doesn't have any dependency on libprotobuf-full.
source_set("lite") {
  deps = [
    ":common",
    "../../gn:default_deps",
  ]
  sources = [
    "lite_fallbacks.cc",
  ]
}

# Full traget for the host. Depends on libprotobuf-full.
source_set("full") {
  testonly = true
  deps = [
    ":common",
    "../../gn:default_deps",
    "../../gn:protobuf_full_deps",
  ]
  sources = [
    "proto_full_utils.cc",
    "proto_full_utils.h",
    "trace_to_text.cc",
  ]
}

if (current_toolchain == host_toolchain) {
  executable("trace_to_text_host") {
    testonly = true
    deps = [
      ":full",
      "../../gn:default_deps",
    ]
  }
}

wasm_lib("trace_to_text_wasm") {
  name = "trace_to_text"
  deps = [
    ":lite",
    "../../gn:default_deps",
  ]
}

# The one for the android tree is defined in the top-level BUILD.gn.
if (!perfetto_build_with_android) {
  copy("trace_to_text") {
    testonly = true
    host_out_dir_ =
        get_label_info(":trace_to_text_host($host_toolchain)", "root_out_dir")
    deps = [
      ":trace_to_text_host($host_toolchain)",
    ]
    sources = [
      "${host_out_dir_}/trace_to_text_host",
    ]
    outputs = [
      "${root_out_dir}/trace_to_text",
    ]
  }
}
