# 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("//build_overrides/build.gni")

config("ftrace_reader_config") {
  include_dirs = [
    "include",
    "..",
  ]

  if (build_with_chromium) {
    include_dirs += [ "//testing/gtest/include" ]
  }
}

executable("ftrace_reader_unittests") {
  testonly = true
  deps = [
    ":ftrace_reader",
    "../gn:default_deps",
    "../gn:gtest_deps",
    "../gn:protobuf_full_deps",
    "../protos/ftrace:full",
  ]

  sources = [
    "src/cpu_reader_unittest.cc",
    "src/format_parser_unittest.cc",
    "src/ftrace_controller_unittest.cc",
    "src/ftrace_to_proto_unittest.cc",
    "src/proto_translation_table_unittest.cc",
    "src/scattered_stream_delegate_for_testing.h",
  ]
}

# These tests require access to a real ftrace implementation and must
# run with sudo.
executable("ftrace_reader_integrationtests") {
  testonly = true
  deps = [
    ":ftrace_reader",
    "../gn:default_deps",
    "../gn:gtest_deps",
    "../perfetto_base",
    "../protos/ftrace:full",
  ]

  sources = [
    "src/end_to_end_integrationtest.cc",
    "src/ftrace_procfs_integrationtest.cc",
  ]
}

executable("ftrace_reader_demo") {
  testonly = true
  sources = [
    "src/main.cc",
  ]
  deps = [
    ":ftrace_reader",
    "../gn:default_deps",
    "../perfetto_base",
  ]
}

source_set("ftrace_reader") {
  all_dependent_configs = [ ":ftrace_reader_config" ]

  deps = [
    "../perfetto_base",
    "../protozero",
  ]

  if (!build_with_chromium) {
    all_dependent_configs += [ "//buildtools:googletest_prod_config" ]
  }

  public_deps = [
    "../protos/ftrace:zero",
  ]
  sources = [
    "include/ftrace_reader/format_parser.h",
    "include/ftrace_reader/ftrace_controller.h",
    "include/ftrace_reader/ftrace_to_proto.h",
    "src/cpu_reader.cc",
    "src/cpu_reader.h",
    "src/format_parser.cc",
    "src/ftrace_controller.cc",
    "src/ftrace_procfs.cc",
    "src/ftrace_procfs.h",
    "src/ftrace_to_proto.cc",
    "src/proto_translation_table.cc",
    "src/proto_translation_table.h",
  ]
}
