# 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.

config("ftrace_reader_config") {
  include_dirs = [ "include" ]
}

executable("ftrace_reader_unittests") {
  testonly = true
  deps += [
    ":ftrace_reader",
    "//buildtools:gmock",
    "//buildtools:gtest",
    "//buildtools:gtest_main",
    "//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",
    "//base",
    "//buildtools:gmock",
    "//buildtools:gtest",
    "//buildtools:gtest_main",
    "//buildtools:protobuf_full",
    "//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",
    "//base",
  ]
}

source_set("ftrace_reader") {
  all_dependent_configs = [
    ":ftrace_reader_config",
    "//buildtools:googletest_prod_config",
  ]
  deps += [ "//base" ]
  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",
  ]
}
