# Copyright 2016 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/go/go_library.gni")
import("//build/go/go_test.gni")
import("//build/go/toolchain.gni")
import("//src/sys/build/components.gni")

go_library("thinfs_lib") {
  name = "go.fuchsia.dev/fuchsia/src/lib/thinfs/..."

  deps = [
    "//sdk/fidl/fuchsia.io($go_toolchain)",
    "//sdk/fidl/fuchsia.mem($go_toolchain)",
    "//src/lib/component",
    "//third_party/golibs:github.com/golang/glog",
  ]

  sources = [
    "bitops/bitops.go",
    "bitops/bitops_386.s",
    "bitops/bitops_amd64.s",
    "bitops/bitops_amd64p32.s",
    "bitops/bitops_arm.s",
    "bitops/bitops_arm64.s",
    "bitops/bitops_test.go",
    "bitops/common_test.go",
    "bitops/little_endian.go",
    "bitops/little_endian_test.go",
    "bitops/two_bit_array.go",
    "bitops/two_bit_array_test.go",
    "block/blocktest/blocktest.go",
    "block/device.go",
    "block/fake/device.go",
    "block/fake/device_test.go",
    "block/file/file.go",
    "block/file/file_fuchsia.go",
    "block/file/file_linux.go",
    "block/file/file_other.go",
    "block/file/file_test.go",
    "cache/arc.go",
    "cache/arc_test.go",
    "fs/fs.go",
    "fs/fs_fuchsia.go",
    "fs/fs_other.go",
    "fs/msdosfs/bootrecord/bootrecord.go",
    "fs/msdosfs/bootrecord/bootrecord_large.go",
    "fs/msdosfs/bootrecord/bootrecord_large_test.go",
    "fs/msdosfs/bootrecord/bootrecord_shared.go",
    "fs/msdosfs/bootrecord/bootrecord_small.go",
    "fs/msdosfs/bootrecord/bootrecord_small_test.go",
    "fs/msdosfs/bootrecord/bootrecord_test.go",
    "fs/msdosfs/clock/clock.go",
    "fs/msdosfs/cluster/cluster.go",
    "fs/msdosfs/cluster/cluster_test.go",
    "fs/msdosfs/cluster/fat/fat.go",
    "fs/msdosfs/cluster/fat/fat_test.go",
    "fs/msdosfs/cluster/fat/fsinfo/fsinfo.go",
    "fs/msdosfs/cluster/fat/fsinfo/fsinfo_test.go",
    "fs/msdosfs/directory.go",
    "fs/msdosfs/direntry/dirent.go",
    "fs/msdosfs/direntry/dirent_test.go",
    "fs/msdosfs/direntry/direntry_long.go",
    "fs/msdosfs/direntry/direntry_short.go",
    "fs/msdosfs/direntry/filename_conversion.go",
    "fs/msdosfs/direntry/filename_conversion_test.go",
    "fs/msdosfs/file.go",
    "fs/msdosfs/fs.go",
    "fs/msdosfs/msdosfs_helper_test.go",
    "fs/msdosfs/msdosfs_test.go",
    "fs/msdosfs/node/dcache.go",
    "fs/msdosfs/node/dcache_test.go",
    "fs/msdosfs/node/directory.go",
    "fs/msdosfs/node/directory_test.go",
    "fs/msdosfs/node/metadata.go",
    "fs/msdosfs/node/node.go",
    "fs/msdosfs/node/node_interface.go",
    "fs/msdosfs/node/node_test.go",
    "fs/msdosfs/node/root16.go",
    "fs/msdosfs/ops.go",
    "fs/msdosfs/path.go",
    "fs/msdosfs/testutil/mkfs.go",
    "fs/msdosfs/testutil/random.go",
    "gpt/gpt.go",
    "gpt/gpt_darwin.go",
    "gpt/gpt_fuchsia.go",
    "gpt/gpt_linux.go",
    "gpt/gpt_test.go",
    "gpt/gpt_unix.go",
    "mbr/mbr.go",
    "mbr/mbr_test.go",
    "mbr/ostype_string.go",
    "mbr/signature_string.go",
    "thinio/conductor.go",
    "thinio/conductor_test.go",
    "zircon/rpc/rpc.go",
    "zircon/rpc/rpc_test.go",
  ]
}

go_test("thinfs_bitops_test") {
  gopackages = [ "go.fuchsia.dev/fuchsia/src/lib/thinfs/bitops" ]

  deps = [ ":thinfs_lib" ]
}

go_test("thinfs_block_fake_test") {
  gopackages = [ "go.fuchsia.dev/fuchsia/src/lib/thinfs/block/fake" ]

  deps = [ ":thinfs_lib" ]
}

go_test("thinfs_block_file_test") {
  gopackages = [ "go.fuchsia.dev/fuchsia/src/lib/thinfs/block/file" ]

  deps = [ ":thinfs_lib" ]
}

go_test("thinfs_cache_test") {
  gopackages = [ "go.fuchsia.dev/fuchsia/src/lib/thinfs/cache" ]

  deps = [ ":thinfs_lib" ]
}

go_test("thinfs_gpt_test") {
  gopackages = [ "go.fuchsia.dev/fuchsia/src/lib/thinfs/gpt" ]

  deps = [ ":thinfs_lib" ]
}

go_test("thinfs_mbr_test") {
  gopackages = [ "go.fuchsia.dev/fuchsia/src/lib/thinfs/mbr" ]

  deps = [ ":thinfs_lib" ]
}

go_test("thinfs_thinio_test") {
  gopackages = [ "go.fuchsia.dev/fuchsia/src/lib/thinfs/thinio" ]

  deps = [ ":thinfs_lib" ]
}

go_test("thinfs_zircon_rpc_test") {
  gopackages = [ "go.fuchsia.dev/fuchsia/src/lib/thinfs/zircon/rpc" ]

  deps = [ ":thinfs_lib" ]
}

fuchsia_unittest_package("thinfs-zircon-rpc-test") {
  deps = [ ":thinfs_zircon_rpc_test" ]
}

group("tests") {
  testonly = true

  deps = [
    ":thinfs-zircon-rpc-test",
    ":thinfs_bitops_test($host_toolchain)",
    ":thinfs_block_fake_test($host_toolchain)",
    ":thinfs_block_file_test($host_toolchain)",
    ":thinfs_cache_test($host_toolchain)",
    ":thinfs_gpt_test($host_toolchain)",
    ":thinfs_mbr_test($host_toolchain)",
    ":thinfs_thinio_test($host_toolchain)",
  ]
}
