# 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/package.gni")
import("//build/test/test_package.gni")

test_package("leveldb_tests") {
  deps = [ ":leveldb_tests_bin" ]

  tests = [
    {
      name = "leveldb_tests"
    },
  ]
}

defines = [
  "LEVELDB_PLATFORM_POSIX=1",
  "LEVELDB_IS_BIG_ENDIAN=0",
  "HAVE_SNAPPY=1",
  "HAVE_FDATASYNC=1",
]

config("leveldb_config") {
  include_dirs = [
    ".",
    "include",
  ]
}

config("leveldb_warnings_config") {
  cflags = [
    "-Wall",
    "-Werror",
    "-Wthread-safety",
    "-Wno-sign-compare",
    "-Wno-unused-variable",
  ]
}

static_library("leveldb") {
  sources = [
    "db/builder.cc",
    "db/builder.h",
    "db/db_impl.cc",
    "db/db_impl.h",
    "db/db_iter.cc",
    "db/db_iter.h",
    "db/dbformat.cc",
    "db/dbformat.h",
    "db/dumpfile.cc",
    "db/filename.cc",
    "db/filename.h",
    "db/log_format.h",
    "db/log_reader.cc",
    "db/log_reader.h",
    "db/log_writer.cc",
    "db/log_writer.h",
    "db/memtable.cc",
    "db/memtable.h",
    "db/repair.cc",
    "db/skiplist.h",
    "db/snapshot.h",
    "db/table_cache.cc",
    "db/table_cache.h",
    "db/version_edit.cc",
    "db/version_edit.h",
    "db/version_set.cc",
    "db/version_set.h",
    "db/write_batch.cc",
    "db/write_batch_internal.h",
    "helpers/memenv/memenv.cc",
    "helpers/memenv/memenv.h",
    "include/leveldb/cache.h",
    "include/leveldb/comparator.h",
    "include/leveldb/db.h",
    "include/leveldb/dumpfile.h",
    "include/leveldb/env.h",
    "include/leveldb/export.h",
    "include/leveldb/filter_policy.h",
    "include/leveldb/iterator.h",
    "include/leveldb/options.h",
    "include/leveldb/slice.h",
    "include/leveldb/status.h",
    "include/leveldb/table.h",
    "include/leveldb/table_builder.h",
    "include/leveldb/write_batch.h",
    "port/port.h",
    "port/port_stdxx.h",
    "port/thread_annotations.h",
    "table/block.cc",
    "table/block.h",
    "table/block_builder.cc",
    "table/block_builder.h",
    "table/filter_block.cc",
    "table/filter_block.h",
    "table/format.cc",
    "table/format.h",
    "table/iterator.cc",
    "table/iterator_wrapper.h",
    "table/merger.cc",
    "table/merger.h",
    "table/table.cc",
    "table/table_builder.cc",
    "table/two_level_iterator.cc",
    "table/two_level_iterator.h",
    "util/arena.cc",
    "util/arena.h",
    "util/bloom.cc",
    "util/cache.cc",
    "util/coding.cc",
    "util/coding.h",
    "util/comparator.cc",
    "util/crc32c.cc",
    "util/crc32c.h",
    "util/env.cc",
    "util/env_fuchsia.cc",
    "util/env_fuchsia.h",
    "util/filter_policy.cc",
    "util/hash.cc",
    "util/hash.h",
    "util/logging.cc",
    "util/logging.h",
    "util/mutexlock.h",
    "util/options.cc",
    "util/random.h",
    "util/status.cc",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.io",
    "//sdk/lib/fdio",
    "//third_party/re2",
    "//third_party/snappy",
    "//zircon/system/ulib/async",
    "//zircon/system/ulib/async:async-cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/fit",
    "//zircon/system/ulib/syslog",
    "//zircon/system/ulib/zx",
  ]

  public_configs = [ ":leveldb_config" ]

  configs -= [ "//build/config:default_warnings" ]
  configs += [ ":leveldb_warnings_config" ]
}

source_set("leveldb_testutil") {
  sources = [
    "util/histogram.cc",
    "util/histogram.h",
    "util/testharness.cc",
    "util/testharness.h",
    "util/testutil.cc",
    "util/testutil.h",
  ]

  public_deps = [ ":leveldb" ]

  configs -= [ "//build/config:default_warnings" ]
  configs += [ ":leveldb_warnings_config" ]
}

# These leveldb *_test.cc files all define their own identical main function which
# just calls the same RunAllTests helper. Having this many different binaries is
# really difficult to deal with in our setup, so we glob them into one binary
# called leveldb_tests. To do this we need to give each file a different name
# for its main symbol which we'll ignore. We do this with the magic and horror
# of a GN template to generate distinct defines for each file.

template("leveldb_test_source_wrapper") {
  assert(defined(invoker.test), "Must define test")

  source_set(target_name) {
    testonly = true

    sources = [ invoker.test ]

    deps = [
      ":leveldb_testutil",
      "//third_party/googletest:gtest",
    ]

    cflags = [ "-Dmain=fake_main_${target_name}" ]

    configs -= [ "//build/config:default_warnings" ]
    configs += [ ":leveldb_warnings_config" ]
  }
}

leveldb_test_source_wrapper("corruption_test") {
  test = "db/corruption_test.cc"
}
leveldb_test_source_wrapper("dbformat_test") {
  test = "db/dbformat_test.cc"
}
leveldb_test_source_wrapper("filename_test") {
  test = "db/filename_test.cc"
}
leveldb_test_source_wrapper("log_test") {
  test = "db/log_test.cc"
}
leveldb_test_source_wrapper("skiplist_test") {
  test = "db/skiplist_test.cc"
}
leveldb_test_source_wrapper("version_edit_test") {
  test = "db/version_edit_test.cc"
}
leveldb_test_source_wrapper("write_batch_test") {
  test = "db/write_batch_test.cc"
}
leveldb_test_source_wrapper("filter_block_test") {
  test = "table/filter_block_test.cc"
}
leveldb_test_source_wrapper("table_test") {
  test = "table/table_test.cc"
}
leveldb_test_source_wrapper("arena_test") {
  test = "util/arena_test.cc"
}
leveldb_test_source_wrapper("bloom_test") {
  test = "util/bloom_test.cc"
}
leveldb_test_source_wrapper("cache_test") {
  test = "util/cache_test.cc"
}
leveldb_test_source_wrapper("crc32c_test") {
  test = "util/crc32c_test.cc"
}
leveldb_test_source_wrapper("logging_test") {
  test = "util/logging_test.cc"
}
leveldb_test_source_wrapper("status_test") {
  test = "util/status_test.cc"
}
leveldb_test_source_wrapper("fuchsia_env_test") {
  test = "util/env_fuchsia_test.cc"
}

group("leveldb_test_sources") {
  testonly = true

  deps = [
    ":arena_test",
    ":bloom_test",
    ":cache_test",
    ":corruption_test",
    ":crc32c_test",
    ":dbformat_test",
    ":filename_test",
    ":filter_block_test",
    ":fuchsia_env_test",
    ":log_test",
    ":logging_test",
    ":skiplist_test",
    ":status_test",
    ":table_test",
    ":version_edit_test",
    ":write_batch_test",
  ]
}

executable("leveldb_tests_bin") {
  output_name = "leveldb_tests"
  testonly = true

  sources = [
    # Use the actual main from env_test.cc (arbitrarily chosen).
    # The rest of the test sources come from :leveldb_test_sources
    "util/env_test.cc",
  ]

  deps = [
    ":leveldb_test_sources",
    ":leveldb_testutil",
    "//third_party/googletest:gtest",
  ]

  configs -= [ "//build/config:default_warnings" ]
  configs += [ ":leveldb_warnings_config" ]
}

package("leveldb_benchmarks") {
  testonly = true

  deps = [ ":leveldb_db_bench" ]

  binaries = [
    {
      name = "leveldb_db_benchmark"
    },
  ]
}

executable("leveldb_db_bench") {
  testonly = true
  output_name = "leveldb_db_benchmark"

  sources = [ "db/db_bench.cc" ]

  deps = [ ":leveldb_testutil" ]
}
# TODO: Figure out "db/db_test.cc",
