# 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/system/ulib/fbl",
  ]

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

test("elflib_unittest") {
  sources = [ "elflib_unittest.cc" ]

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

  # 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",
  ]

  # An example stripped binary:
  # ```
  # #include <stdio.h>
  # #include <string.h>
  # int main(int argc, char** argv) {
  #   printf("%zu\n", strlen(argv[0]));
  #   return 0;
  # }
  # ```
  # Built with:
  # clang -Wl,-z,{rela,rel} --target={aarch64,x86_64}-fuchsia --sysroot=...
  # llvm-objcopy --strip-sections \
  #   unstripped_example.{arm64,x64}.{rela,rel}.elf \
  #   unstripped_example_stripped.{arm64,x64}.{rela,rel}.elf
  foreach(cpu,
          [
            "arm64",
            "x64",
          ]) {
    foreach(rel,
            [
              "rela",
              "rel",
            ]) {
      sources += [
        "test_data/unstripped_example.$cpu.$rel.elf",
        "test_data/unstripped_example_stripped.$cpu.$rel.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" ]
}
