# 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/components.gni")
import("//build/go/go_library.gni")
import("//build/go/go_test.gni")
import("//build/go/toolchain.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)",
  ]
}
