# 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/db/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",
  ]
}
