# 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")

bind_rules("bootpart_bind") {
  disable_autobind = true
  rules = "bootpart.bind"
  output = "bootpart_bind.h"
  tests = "bind_tests.json"
  deps = [ "//src/devices/bind/fuchsia.hardware.block" ]
}

group("tests") {
  testonly = true
  deps = [ ":bootpart_bind_test" ]
}

driver_module("bootpart") {
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "bootpart.c" ]
  deps = [
    ":bootpart_bind",
    "//sdk/banjo/fuchsia.hardware.block",
    "//sdk/banjo/fuchsia.hardware.block.partition",
    "//src/devices/lib/driver",
    "//src/lib/ddk",
    "//zircon/public/lib/cksum",
    "//zircon/public/lib/sync",
  ]
}
