# 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/unification/zx_library.gni")

group("tests") {
  testonly = true
  deps = [
    "test:paver-fuzzers",
    "test:paver-test",
  ]
}

# Core paver implementation shared between all implementations.
source_set("paver-core") {
  sources = [
    "abr-client.cc",
    "abr.cc",
    "device-partitioner.cc",
    "fvm.cc",
    "partition-client.cc",
    "paver.cc",
    "stream-reader.cc",
    "sysconfig-fidl.cc",
    "utils.cc",
    "validation.cc",
  ]
  deps = [
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
    "//sdk/fidl/fuchsia.device:fuchsia.device_llcpp",
    "//sdk/fidl/fuchsia.hardware.block:fuchsia.hardware.block_llcpp",
    "//sdk/fidl/fuchsia.hardware.block.encrypted:fuchsia.hardware.block.encrypted_llcpp",
    "//sdk/fidl/fuchsia.hardware.block.partition:fuchsia.hardware.block.partition_llcpp",
    "//sdk/fidl/fuchsia.hardware.block.volume:fuchsia.hardware.block.volume_llcpp",
    "//sdk/fidl/fuchsia.hardware.skipblock:fuchsia.hardware.skipblock_llcpp",
    "//sdk/fidl/fuchsia.sysinfo:fuchsia.sysinfo_llcpp",
    "//sdk/lib/fdio",
    "//src/security/zxcrypt:zxcrypt-fdio",
    "//zircon/public/lib/cksum",
    "//zircon/public/lib/fidl",
    "//zircon/system/ulib/fdio-caller",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
    "//zircon/system/ulib/fs-management",
    "//zircon/system/ulib/gpt",
    "//zircon/system/ulib/ramdevice-client:ramdevice-client-static",
  ]
  public_deps = [
    "//sdk/fidl/fuchsia.fshost:fuchsia.fshost_llcpp",
    "//sdk/fidl/fuchsia.paver:fuchsia.paver_llcpp",
    "//src/firmware/lib/abr",
    "//src/lib/uuid",
    "//src/storage/fvm",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxc",
    "//zircon/system/ulib/block-client",
  ]

  # TODO(fxbug.dev/57974): UBSan has found an instance of undefined behavior in this target.
  # Disable UBSan for this target temporarily until it is migrated into CI/CQ.
  configs += [ "//build/config:temporarily_disable_ubsan_do_not_use" ]
}

# Helper libraries to aid board specific implementations.
source_set("gpt") {
  sources = [ "gpt.cc" ]
  deps = [ "//sdk/fidl/fuchsia.device:fuchsia.device_llcpp" ]
  public_deps = [
    ":paver-core",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/fdio-caller",
    "//zircon/system/ulib/gpt",
  ]
}

source_set("skip-block") {
  sources = [ "skip-block.cc" ]
  deps = [ "//src/lib/uuid" ]
  public_deps = [
    ":paver-core",
    "//sdk/fidl/fuchsia.hardware.skipblock:fuchsia.hardware.skipblock_llcpp",
    "//zircon/system/ulib/fdio-caller",
    "//zircon/system/ulib/gpt",
  ]
}

source_set("sysconfig") {
  sources = [ "sysconfig.cc" ]
  public_deps = [
    ":paver-core",
    "//zircon/system/ulib/sysconfig-client:sysconfig-sync-client",
  ]
}

# Board specific paver implementations.
source_set("as370") {
  sources = [ "as370.cc" ]
  deps = [
    ":paver-core",
    ":skip-block",
    "//src/lib/uuid",
    "//zircon/system/ulib/gpt",
  ]
}

source_set("astro") {
  sources = [ "astro.cc" ]
  deps = [
    ":paver-core",
    ":sysconfig",
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
    "//src/devices/lib/amlogic",
    "//src/lib/uuid",
    "//zircon/system/ulib/gpt",
  ]
  public_deps = [
    ":skip-block",
    "//zircon/system/ulib/sysconfig-client:sysconfig-sync-client",
  ]
}

source_set("chromebook-x64") {
  sources = [ "chromebook-x64.cc" ]
  deps = [
    ":gpt",
    ":paver-core",
    "//src/lib/uuid",
    "//zircon/system/ulib/chromeos-disk-setup",
  ]
}

source_set("sherlock") {
  sources = [ "sherlock.cc" ]
  deps = [
    ":gpt",
    ":paver-core",
    ":sysconfig",
    "//src/devices/lib/amlogic",
    "//src/lib/uuid",
    "//zircon/system/ulib/gpt",
  ]
}

source_set("nelson") {
  sources = [ "nelson.cc" ]
  deps = [
    ":gpt",
    ":paver-core",
    ":sysconfig",
    "//src/devices/lib/amlogic",
    "//src/lib/uuid",
    "//zircon/system/ulib/gpt",
  ]
}

source_set("luis") {
  sources = [ "luis.cc" ]
  deps = [
    ":gpt",
    ":paver-core",
    ":sysconfig",
    "//src/devices/lib/amlogic",
    "//src/lib/uuid",
    "//zircon/system/ulib/gpt",
  ]
}

source_set("vim3") {
  sources = [ "vim3.cc" ]
  deps = [
    ":gpt",
    ":paver-core",
    ":sysconfig",
    "//src/devices/lib/amlogic",
    "//src/lib/uuid",
    "//zircon/system/ulib/gpt",
  ]
}

source_set("x64") {
  sources = [ "x64.cc" ]
  deps = [
    ":gpt",
    ":paver-core",
    "//src/lib/uuid",
  ]
}

# Glob together all paver implementations into a single library until we can compose ZBI via
# packages.
zx_library("paver") {
  sdk = "source"
  sdk_headers = [ "lib/paver/provider.h" ]
  sources = [ "provider.cc" ]
  deps = [
    ":as370",
    ":astro",
    ":chromebook-x64",
    ":luis",
    ":nelson",
    ":paver-core",
    ":sherlock",
    ":vim3",
    ":x64",
    "//sdk/fidl/fuchsia.paver:fuchsia.paver_llcpp",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
  ]
  public_deps = [ "//zircon/system/ulib/svc" ]
}
