# Copyright 2019 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/bind/bind.gni")
import("//build/config/fuchsia/rules.gni")
import("//build/test.gni")
import("//build/test/test_package.gni")

bind_rules("nandpart-bind") {
  rules = "nandpart.bind"
  output = "nandpart-bind.h"
  tests = "bind-tests.json"
  deps = [ "//src/devices/bind/fuchsia.nand" ]
}

driver_module("nandpart") {
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [
    "aml-bad-block.cc",
    "bad-block.cc",
    "nandpart-utils.cc",
    "nandpart.cc",
    "synaptics-bad-block.cc",
  ]
  deps = [
    ":nandpart-bind",
    "//sdk/banjo/ddk.protocol.badblock",
    "//sdk/banjo/ddk.protocol.nand",
    "//sdk/fidl/fuchsia.hardware.nand:fuchsia.hardware.nand_c",
    "//src/devices/lib/dev-operation",
    "//src/devices/lib/driver",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zx",
  ]
}

test("nandpart-test") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  output_name = "nandpart-test"
  sources = [
    "aml-bad-block.cc",
    "bad-block.cc",
    "nandpart-utils.cc",
    "synaptics-bad-block.cc",
    "test/aml-bad-block-test.cc",
    "test/nandpart-utils-test.cc",
    "test/synaptics-bad-block-test.cc",
  ]
  include_dirs = [ "." ]
  deps = [
    "//sdk/banjo/ddk.protocol.nand",
    "//sdk/fidl/fuchsia.hardware.nand:fuchsia.hardware.nand_c",
    "//sdk/lib/fdio",
    "//src/devices/testing/no_ddk",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/fzl",
  ]
}

unittest_package("nandpart-test-package") {
  package_name = "nandpart-test"
  deps = [ ":nandpart-test" ]

  tests = [
    {
      name = "nandpart-test"
      environments = basic_envs
    },
  ]
}
group("tests") {
  testonly = true
  deps = [
    ":nandpart-bind_test",
    ":nandpart-test-package",
  ]
}
