# Copyright 2020 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/host.gni")
import("//build/test.gni")
import("//src/sys/build/fuchsia_package.gni")
import("//src/sys/build/fuchsia_test_package.gni")
import("//src/sys/build/fuchsia_unittest_package.gni")

executable("bin") {
  output_name = "disk-extract"
  sources = [
    "main.cc",
    "parse.cc",
  ]
  deps = [
    "//sdk/lib/fdio",
    "//src/storage/extractor/cpp:disk_extractor",
  ]
}

fuchsia_component("disk_extract_component") {
  deps = [ ":bin" ]
  manifest = "meta/disk_extract.cml"
}

fuchsia_package("disk-extract") {
  deps = [ ":disk_extract_component" ]
}

install_host_tools("disk_extract_host") {
  deps = [ ":bin($host_toolchain)" ]
  outputs = [ "disk-extract" ]
}

test("disk_extract_unit_test") {
  testonly = true
  sources = [
    "parse.cc",
    "parse_test.cc",
  ]
  deps = [
    "//sdk/fidl/fuchsia.fs",
    "//sdk/lib/fdio",
    "//src/lib/fxl/test:gtest_main",
    "//src/storage/extractor/cpp:disk_extractor",
    "//src/storage/extractor/cpp:disk_extractor",
    "//third_party/googletest:gtest",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/zxc",
  ]
}

fuchsia_component("disk_extract_unit_test_component") {
  testonly = true
  manifest = "meta/bin_tests.cml"
  deps = [ ":disk_extract_unit_test" ]
}

fuchsia_test_package("disk-extract-unit-test") {
  test_components = [ ":disk_extract_unit_test_component" ]
}
