# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/components.gni")
import("//build/fuzzing/fuzzer.gni")
import("//build/test.gni")

# A collection of utilities useful to debuggers and similar programs.

static_library("elflib") {
  sources = [ "elflib.cc" ]

  deps = [ "//zircon/system/public" ]

  public_deps = [
    "//src/lib/llvm:LLVMHeaderOnly",
    "//zircon/public/lib/fbl",
  ]

  # TODO(fxb/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

# An example stripped binary. Originally copied from out/x64/cowsay.
# ARM64 binary generated with:
# fx set core.arm64 --with //examples/cowsay
# fx build
# cp out/default/exe.unstripped/cowsay \
#   src/lib/elflib/test_data/unstripped_example.arm64.elf
# ./prebuilt/third_party/clang/linux-x64/bin/llvm-objcopy \
#     --strip-sections out/default/exe.unstripped/cowsay \
#     src/lib/elflib/test_data/unstripped_example_stripped.arm64.elf
test("elflib_unittest") {
  sources = [ "elflib_unittest.cc" ]

  deps = [
    ":elflib",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gtest",
  ]

  # TODO(fxbug.dev/58160): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-reorder-init-list" ]

  # TODO(fxb/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

resource("test_data") {
  testonly = true
  sources = [
    "test_data/6d4d8ac190ecc7.debug",
    "test_data/stripped_example.elf",
    "test_data/unstripped_example.arm64.elf",
    "test_data/unstripped_example.elf",
    "test_data/unstripped_example_stripped.arm64.elf",
    "test_data/unstripped_example_stripped.elf",
  ]
  outputs = [ "data/{{source_file_part}}" ]
}

fuchsia_unittest_package("elflib_tests") {
  deps = [
    ":elflib_unittest",
    ":test_data",
  ]
}

group("tests") {
  testonly = true

  deps = [
    ":elflib_fuzzers",
    ":elflib_tests",
    "//sdk/lib/syslog/cpp",
  ]
}

fuzzer("elflib_fuzzer") {
  sources = [ "elflib_fuzztest.cc" ]
  deps = [ ":elflib" ]

  # TODO(fxb/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

fuzzers_package("elflib_fuzzers") {
  fuzzers = [ ":elflib_fuzzer" ]
}
