# Copyright 2014 The Chromium 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("//testing/libfuzzer/fuzzer_test.gni")
import("//testing/test.gni")

defines = [ "LEVELDB_PLATFORM_CHROMIUM=1" ]

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

leveldb_sources = [
  "env_chromium.cc",
  "env_chromium.h",
  "leveldb_features.h",
  "leveldb_features.cc",
  "leveldb_chrome.cc",
  "leveldb_chrome.h",
  "port/port_chromium.cc",
  "port/port_chromium.h",
  "src/db/builder.cc",
  "src/db/builder.h",
  "src/db/db_impl.cc",
  "src/db/db_impl.h",
  "src/db/db_iter.cc",
  "src/db/db_iter.h",
  "src/db/dbformat.cc",
  "src/db/dbformat.h",
  "src/db/dumpfile.cc",
  "src/db/filename.cc",
  "src/db/filename.h",
  "src/db/log_format.h",
  "src/db/log_reader.cc",
  "src/db/log_reader.h",
  "src/db/log_writer.cc",
  "src/db/log_writer.h",
  "src/db/memtable.cc",
  "src/db/memtable.h",
  "src/db/repair.cc",
  "src/db/skiplist.h",
  "src/db/snapshot.h",
  "src/db/table_cache.cc",
  "src/db/table_cache.h",
  "src/db/version_edit.cc",
  "src/db/version_edit.h",
  "src/db/version_set.cc",
  "src/db/version_set.h",
  "src/db/write_batch.cc",
  "src/db/write_batch_internal.h",
  "src/helpers/memenv/memenv.cc",
  "src/helpers/memenv/memenv.h",
  "src/include/leveldb/cache.h",
  "src/include/leveldb/comparator.h",
  "src/include/leveldb/db.h",
  "src/include/leveldb/dumpfile.h",
  "src/include/leveldb/env.h",
  "src/include/leveldb/filter_policy.h",
  "src/include/leveldb/iterator.h",
  "src/include/leveldb/options.h",
  "src/include/leveldb/slice.h",
  "src/include/leveldb/status.h",
  "src/include/leveldb/table.h",
  "src/include/leveldb/table_builder.h",
  "src/include/leveldb/write_batch.h",
  "src/port/port.h",
  "src/table/block.cc",
  "src/table/block.h",
  "src/table/block_builder.cc",
  "src/table/block_builder.h",
  "src/table/filter_block.cc",
  "src/table/filter_block.h",
  "src/table/format.cc",
  "src/table/format.h",
  "src/table/iterator.cc",
  "src/table/iterator_wrapper.h",
  "src/table/merger.cc",
  "src/table/merger.h",
  "src/table/table.cc",
  "src/table/table_builder.cc",
  "src/table/two_level_iterator.cc",
  "src/table/two_level_iterator.h",
  "src/util/arena.cc",
  "src/util/arena.h",
  "src/util/bloom.cc",
  "src/util/cache.cc",
  "src/util/coding.cc",
  "src/util/coding.h",
  "src/util/comparator.cc",
  "src/util/crc32c.cc",
  "src/util/crc32c.h",
  "src/util/env.cc",
  "src/util/filter_policy.cc",
  "src/util/hash.cc",
  "src/util/hash.h",
  "src/util/logging.cc",
  "src/util/logging.h",
  "src/util/mutexlock.h",
  "src/util/options.cc",
  "src/util/random.h",
  "src/util/status.cc",
]

config("leveldb_component_config") {
  if (is_component_build) {
    # Must be exported to all dependencies so LEVELDB_EXPORT is correctly
    # defined throughout the component build.
    defines += [ "LEVELDB_SHARED_LIBRARY" ]
  }
}

component("leveldatabase") {
  sources = leveldb_sources

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]

  public_configs = [
    ":leveldb_config",
    ":leveldb_component_config",
  ]

  deps = [
    "//base",
    "//third_party/crc32c",
    "//third_party/re2",
    "//third_party/snappy",
  ]

  if (is_win) {
    # leveldb compiles with a limited set of warnings enabled, and is not
    # likely to accept fixes for other warnings. See crbug.com/698013
    cflags = [ "/wd4018" ]  # Signed/unsigned mismatch in comparison.

    if (is_official_build) {
      # Function recursive on all control paths, crbug.com/620018
      cflags += [ "/wd4717" ]
    }
  }
  defines += [ "LEVELDB_COMPILE_LIBRARY" ]
}

# leveldb does not mark symbols used by tests or its command-line utility as
# LEVELDB_EXPORT. So, these targets can only be linked statically against the
# leveldb source code.
static_library("leveldb_static") {
  visibility = [
    ":leveldb_testutil",
    ":leveldb_leveldbutil",
  ]
  sources = leveldb_sources

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]

  public_configs = [ ":leveldb_config" ]

  deps = [
    "//base",
    "//third_party/crc32c",
    "//third_party/re2",
    "//third_party/snappy",
  ]

  if (is_win) {
    # leveldb compiles with a limited set of warnings enabled, and is not
    # likely to accept fixes for other warnings. See crbug.com/698013
    cflags = [ "/wd4018" ]  # Signed/unsigned mismatch in comparison.

    if (is_official_build) {
      # Function recursive on all control paths, crbug.com/620018
      cflags += [ "/wd4717" ]
    }
  }
}

if (!is_ios && !is_android) {
  test("env_chromium_unittests") {
    sources = [
      "env_chromium_unittest.cc",
    ]
    deps = [
      ":leveldatabase",
      "//base/test:test_support",
      "//testing/gtest",
    ]
  }

  static_library("leveldb_testutil") {
    testonly = true
    visibility = [ ":*" ]

    sources = [
      "src/util/histogram.cc",
      "src/util/histogram.h",
      "src/util/testharness.cc",
      "src/util/testharness.h",
      "src/util/testutil.cc",
      "src/util/testutil.h",
    ]

    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]

    public_deps = [
      ":leveldb_static",
    ]
    deps = [
      "//base",
    ]
  }

  test("leveldb_arena_test") {
    sources = [
      "src/util/arena_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_bloom_test") {
    sources = [
      "src/util/bloom_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_cache_test") {
    sources = [
      "src/util/cache_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]

    if (is_win) {
      # util\cache_test.cc(167): warning C4018: '<': signed/unsigned mismatch
      # util\cache_test.cc(171): warning C4018: '<': signed/unsigned mismatch
      cflags = [ "/wd4018" ]  # Signed/unsigned mismatch in comparison.
    }
  }

  test("leveldb_corruption_test") {
    sources = [
      "src/db/corruption_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_crc32c_test") {
    sources = [
      "src/util/crc32c_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_db_bench") {
    sources = [
      "src/benchmarks/db_bench.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_db_test") {
    sources = [
      "src/db/db_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_dbformat_test") {
    sources = [
      "src/db/dbformat_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_env_test") {
    sources = [
      "src/util/env_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]

    if (is_win) {
      cflags = [ "/wd4018" ]  # Signed/unsigned mismatch in comparison.
    }
  }

  test("leveldb_filename_test") {
    sources = [
      "src/db/filename_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_filter_block_test") {
    sources = [
      "src/table/filter_block_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  executable("leveldb_leveldbutil") {
    sources = [
      "src/db/leveldbutil.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_static",
    ]
  }

  test("leveldb_log_test") {
    sources = [
      "src/db/log_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]

    if (is_win) {
      # db\log_test.cc(486) triggers two warnings:
      # util\testharness.h(91): warning C4018: '<=': signed/unsigned mismatch
      # util\testharness.h(89): warning C4018: '>=': signed/unsigned mismatch
      cflags = [ "/wd4018" ]  # Signed/unsigned mismatch in comparison.
    }
  }

  test("leveldb_skiplist_test") {
    sources = [
      "src/db/skiplist_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_table_test") {
    sources = [
      "src/table/table_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_version_edit_test") {
    sources = [
      "src/db/version_edit_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_write_batch_test") {
    sources = [
      "src/db/write_batch_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  group("leveldb_test_targets") {
    testonly = true
    deps = [
      ":env_chromium_unittests",
      ":leveldb_arena_test",
      ":leveldb_bloom_test",
      ":leveldb_cache_test",
      ":leveldb_corruption_test",
      ":leveldb_crc32c_test",
      ":leveldb_db_bench",
      ":leveldb_db_test",
      ":leveldb_dbformat_test",
      ":leveldb_env_test",
      ":leveldb_filename_test",
      ":leveldb_filter_block_test",
      ":leveldb_log_test",
      ":leveldb_skiplist_test",
      ":leveldb_table_test",
      ":leveldb_version_edit_test",
      ":leveldb_write_batch_test",
    ]
  }
}

fuzzer_test("leveldb_put_get_delete_fuzzer") {
  sources = [
    "leveldb_put_get_delete_fuzzer.cc",
  ]
  deps = [
    ":leveldatabase",
    ":leveldb_testutil",
    "//base/test:test_support",
  ]
}
