REPO_PATH = package_name() + "/"

BUCK_BINS = "buck-out/gen/" + REPO_PATH

TEST_RUNNER = REPO_PATH + "buckifier/rocks_test_runner.sh"

rocksdb_compiler_flags = [
    "-fno-builtin-memcmp",
    "-DROCKSDB_PLATFORM_POSIX",
    "-DROCKSDB_LIB_IO_POSIX",
    "-DROCKSDB_FALLOCATE_PRESENT",
    "-DROCKSDB_MALLOC_USABLE_SIZE",
    "-DROCKSDB_RANGESYNC_PRESENT",
    "-DROCKSDB_SCHED_GETCPU_PRESENT",
    "-DROCKSDB_SUPPORT_THREAD_LOCAL",
    "-DOS_LINUX",
    # Flags to enable libs we include
    "-DSNAPPY",
    "-DZLIB",
    "-DBZIP2",
    "-DLZ4",
    "-DZSTD",
    "-DGFLAGS=gflags",
    "-DNUMA",
    "-DTBB",
    # Needed to compile in fbcode
    "-Wno-expansion-to-defined",
    # Added missing flags from output of build_detect_platform
    "-DROCKSDB_PTHREAD_ADAPTIVE_MUTEX",
    "-DROCKSDB_BACKTRACE",
    "-Wnarrowing",
]

rocksdb_external_deps = [
    ("bzip2", None, "bz2"),
    ("snappy", None, "snappy"),
    ("zlib", None, "z"),
    ("gflags", None, "gflags"),
    ("lz4", None, "lz4"),
    ("zstd", None),
    ("tbb", None),
    ("numa", None, "numa"),
    ("googletest", None, "gtest"),
]

rocksdb_preprocessor_flags = [
    # Directories with files for #include
    "-I" + REPO_PATH + "include/",
    "-I" + REPO_PATH,
]

rocksdb_arch_preprocessor_flags = {
    "x86_64": [
        "-DHAVE_SSE42",
        "-DHAVE_PCLMUL",
    ],
}

build_mode = read_config("fbcode", "build_mode")

is_opt_mode = build_mode.startswith("opt")

# -DNDEBUG is added by default in opt mode in fbcode. But adding it twice
# doesn't harm and avoid forgetting to add it.
if is_opt_mode:
    rocksdb_compiler_flags.append("-DNDEBUG")

cpp_library(
    name = "rocksdb_lib",
    srcs = [
        "cache/clock_cache.cc",
        "cache/lru_cache.cc",
        "cache/sharded_cache.cc",
        "db/builder.cc",
        "db/c.cc",
        "db/column_family.cc",
        "db/compacted_db_impl.cc",
        "db/compaction.cc",
        "db/compaction_iterator.cc",
        "db/compaction_job.cc",
        "db/compaction_picker.cc",
        "db/compaction_picker_universal.cc",
        "db/convenience.cc",
        "db/db_filesnapshot.cc",
        "db/db_impl.cc",
        "db/db_impl_compaction_flush.cc",
        "db/db_impl_debug.cc",
        "db/db_impl_experimental.cc",
        "db/db_impl_files.cc",
        "db/db_impl_open.cc",
        "db/db_impl_readonly.cc",
        "db/db_impl_write.cc",
        "db/db_info_dumper.cc",
        "db/db_iter.cc",
        "db/dbformat.cc",
        "db/event_helpers.cc",
        "db/experimental.cc",
        "db/external_sst_file_ingestion_job.cc",
        "db/file_indexer.cc",
        "db/flush_job.cc",
        "db/flush_scheduler.cc",
        "db/forward_iterator.cc",
        "db/internal_stats.cc",
        "db/log_reader.cc",
        "db/log_writer.cc",
        "db/logs_with_prep_tracker.cc",
        "db/malloc_stats.cc",
        "db/managed_iterator.cc",
        "db/memtable.cc",
        "db/memtable_list.cc",
        "db/merge_helper.cc",
        "db/merge_operator.cc",
        "db/range_del_aggregator.cc",
        "db/repair.cc",
        "db/snapshot_impl.cc",
        "db/table_cache.cc",
        "db/table_properties_collector.cc",
        "db/transaction_log_impl.cc",
        "db/version_builder.cc",
        "db/version_edit.cc",
        "db/version_set.cc",
        "db/wal_manager.cc",
        "db/write_batch.cc",
        "db/write_batch_base.cc",
        "db/write_controller.cc",
        "db/write_thread.cc",
        "env/env.cc",
        "env/env_chroot.cc",
        "env/env_encryption.cc",
        "env/env_hdfs.cc",
        "env/env_posix.cc",
        "env/io_posix.cc",
        "env/mock_env.cc",
        "memtable/alloc_tracker.cc",
        "memtable/hash_cuckoo_rep.cc",
        "memtable/hash_linklist_rep.cc",
        "memtable/hash_skiplist_rep.cc",
        "memtable/skiplistrep.cc",
        "memtable/vectorrep.cc",
        "memtable/write_buffer_manager.cc",
        "monitoring/histogram.cc",
        "monitoring/histogram_windowing.cc",
        "monitoring/instrumented_mutex.cc",
        "monitoring/iostats_context.cc",
        "monitoring/perf_context.cc",
        "monitoring/perf_level.cc",
        "monitoring/statistics.cc",
        "monitoring/thread_status_impl.cc",
        "monitoring/thread_status_updater.cc",
        "monitoring/thread_status_updater_debug.cc",
        "monitoring/thread_status_util.cc",
        "monitoring/thread_status_util_debug.cc",
        "options/cf_options.cc",
        "options/db_options.cc",
        "options/options.cc",
        "options/options_helper.cc",
        "options/options_parser.cc",
        "options/options_sanity_check.cc",
        "port/port_posix.cc",
        "port/stack_trace.cc",
        "table/adaptive_table_factory.cc",
        "table/block.cc",
        "table/block_based_filter_block.cc",
        "table/block_based_table_builder.cc",
        "table/block_based_table_factory.cc",
        "table/block_based_table_reader.cc",
        "table/block_builder.cc",
        "table/block_fetcher.cc",
        "table/block_prefix_index.cc",
        "table/bloom_block.cc",
        "table/cuckoo_table_builder.cc",
        "table/cuckoo_table_factory.cc",
        "table/cuckoo_table_reader.cc",
        "table/flush_block_policy.cc",
        "table/format.cc",
        "table/full_filter_block.cc",
        "table/get_context.cc",
        "table/index_builder.cc",
        "table/iterator.cc",
        "table/merging_iterator.cc",
        "table/meta_blocks.cc",
        "table/partitioned_filter_block.cc",
        "table/persistent_cache_helper.cc",
        "table/plain_table_builder.cc",
        "table/plain_table_factory.cc",
        "table/plain_table_index.cc",
        "table/plain_table_key_coding.cc",
        "table/plain_table_reader.cc",
        "table/sst_file_writer.cc",
        "table/table_properties.cc",
        "table/two_level_iterator.cc",
        "tools/dump/db_dump_tool.cc",
        "tools/ldb_cmd.cc",
        "tools/ldb_tool.cc",
        "tools/sst_dump_tool.cc",
        "util/arena.cc",
        "util/auto_roll_logger.cc",
        "util/bloom.cc",
        "util/build_version.cc",
        "util/coding.cc",
        "util/compaction_job_stats_impl.cc",
        "util/comparator.cc",
        "util/compression_context_cache.cc",
        "util/concurrent_arena.cc",
        "util/crc32c.cc",
        "util/delete_scheduler.cc",
        "util/dynamic_bloom.cc",
        "util/event_logger.cc",
        "util/file_reader_writer.cc",
        "util/file_util.cc",
        "util/filename.cc",
        "util/filter_policy.cc",
        "util/hash.cc",
        "util/log_buffer.cc",
        "util/murmurhash.cc",
        "util/random.cc",
        "util/rate_limiter.cc",
        "util/slice.cc",
        "util/sst_file_manager_impl.cc",
        "util/status.cc",
        "util/status_message.cc",
        "util/string_util.cc",
        "util/sync_point.cc",
        "util/sync_point_impl.cc",
        "util/thread_local.cc",
        "util/threadpool_imp.cc",
        "util/transaction_test_util.cc",
        "util/xxhash.cc",
        "utilities/backupable/backupable_db.cc",
        "utilities/blob_db/blob_compaction_filter.cc",
        "utilities/blob_db/blob_db.cc",
        "utilities/blob_db/blob_db_impl.cc",
        "utilities/blob_db/blob_dump_tool.cc",
        "utilities/blob_db/blob_file.cc",
        "utilities/blob_db/blob_log_format.cc",
        "utilities/blob_db/blob_log_reader.cc",
        "utilities/blob_db/blob_log_writer.cc",
        "utilities/blob_db/ttl_extractor.cc",
        "utilities/cassandra/cassandra_compaction_filter.cc",
        "utilities/cassandra/format.cc",
        "utilities/cassandra/merge_operator.cc",
        "utilities/checkpoint/checkpoint_impl.cc",
        "utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc",
        "utilities/convenience/info_log_finder.cc",
        "utilities/date_tiered/date_tiered_db_impl.cc",
        "utilities/debug.cc",
        "utilities/document/document_db.cc",
        "utilities/document/json_document.cc",
        "utilities/document/json_document_builder.cc",
        "utilities/env_mirror.cc",
        "utilities/env_timed.cc",
        "utilities/geodb/geodb_impl.cc",
        "utilities/leveldb_options/leveldb_options.cc",
        "utilities/lua/rocks_lua_compaction_filter.cc",
        "utilities/memory/memory_util.cc",
        "utilities/merge_operators/bytesxor.cc",
        "utilities/merge_operators/max.cc",
        "utilities/merge_operators/put.cc",
        "utilities/merge_operators/string_append/stringappend.cc",
        "utilities/merge_operators/string_append/stringappend2.cc",
        "utilities/merge_operators/uint64add.cc",
        "utilities/option_change_migration/option_change_migration.cc",
        "utilities/options/options_util.cc",
        "utilities/persistent_cache/block_cache_tier.cc",
        "utilities/persistent_cache/block_cache_tier_file.cc",
        "utilities/persistent_cache/block_cache_tier_metadata.cc",
        "utilities/persistent_cache/persistent_cache_tier.cc",
        "utilities/persistent_cache/volatile_tier_impl.cc",
        "utilities/redis/redis_lists.cc",
        "utilities/simulator_cache/sim_cache.cc",
        "utilities/spatialdb/spatial_db.cc",
        "utilities/table_properties_collectors/compact_on_deletion_collector.cc",
        "utilities/transactions/optimistic_transaction.cc",
        "utilities/transactions/optimistic_transaction_db_impl.cc",
        "utilities/transactions/pessimistic_transaction.cc",
        "utilities/transactions/pessimistic_transaction_db.cc",
        "utilities/transactions/snapshot_checker.cc",
        "utilities/transactions/transaction_base.cc",
        "utilities/transactions/transaction_db_mutex_impl.cc",
        "utilities/transactions/transaction_lock_mgr.cc",
        "utilities/transactions/transaction_util.cc",
        "utilities/transactions/write_prepared_txn.cc",
        "utilities/transactions/write_prepared_txn_db.cc",
        "utilities/transactions/write_unprepared_txn.cc",
        "utilities/transactions/write_unprepared_txn_db.cc",
        "utilities/ttl/db_ttl_impl.cc",
        "utilities/write_batch_with_index/write_batch_with_index.cc",
        "utilities/write_batch_with_index/write_batch_with_index_internal.cc",
    ],
    headers = AutoHeaders.RECURSIVE_GLOB,
    arch_preprocessor_flags = rocksdb_arch_preprocessor_flags,
    compiler_flags = rocksdb_compiler_flags,
    preprocessor_flags = rocksdb_preprocessor_flags,
    deps = [],
    external_deps = rocksdb_external_deps,
)

cpp_library(
    name = "rocksdb_test_lib",
    srcs = [
        "db/db_test_util.cc",
        "table/mock_table.cc",
        "util/fault_injection_test_env.cc",
        "util/testharness.cc",
        "util/testutil.cc",
        "utilities/cassandra/test_utils.cc",
        "utilities/col_buf_decoder.cc",
        "utilities/col_buf_encoder.cc",
        "utilities/column_aware_encoding_util.cc",
    ],
    headers = AutoHeaders.RECURSIVE_GLOB,
    arch_preprocessor_flags = rocksdb_arch_preprocessor_flags,
    compiler_flags = rocksdb_compiler_flags,
    preprocessor_flags = rocksdb_preprocessor_flags,
    deps = [":rocksdb_lib"],
    external_deps = rocksdb_external_deps,
)

cpp_library(
    name = "rocksdb_tools_lib",
    srcs = [
        "tools/db_bench_tool.cc",
        "util/testutil.cc",
    ],
    headers = AutoHeaders.RECURSIVE_GLOB,
    arch_preprocessor_flags = rocksdb_arch_preprocessor_flags,
    compiler_flags = rocksdb_compiler_flags,
    preprocessor_flags = rocksdb_preprocessor_flags,
    deps = [":rocksdb_lib"],
    external_deps = rocksdb_external_deps,
)

cpp_library(
    name = "env_basic_test_lib",
    srcs = ["env/env_basic_test.cc"],
    headers = AutoHeaders.RECURSIVE_GLOB,
    arch_preprocessor_flags = rocksdb_arch_preprocessor_flags,
    compiler_flags = rocksdb_compiler_flags,
    preprocessor_flags = rocksdb_preprocessor_flags,
    deps = [":rocksdb_test_lib"],
    external_deps = rocksdb_external_deps,
)

# [test_name, test_src, test_type]
ROCKS_TESTS = [
    [
        "arena_test",
        "util/arena_test.cc",
        "serial",
    ],
    [
        "auto_roll_logger_test",
        "util/auto_roll_logger_test.cc",
        "serial",
    ],
    [
        "autovector_test",
        "util/autovector_test.cc",
        "serial",
    ],
    [
        "backupable_db_test",
        "utilities/backupable/backupable_db_test.cc",
        "parallel",
    ],
    [
        "blob_db_test",
        "utilities/blob_db/blob_db_test.cc",
        "serial",
    ],
    [
        "block_based_filter_block_test",
        "table/block_based_filter_block_test.cc",
        "serial",
    ],
    [
        "block_test",
        "table/block_test.cc",
        "serial",
    ],
    [
        "bloom_test",
        "util/bloom_test.cc",
        "serial",
    ],
    [
        "c_test",
        "db/c_test.c",
        "serial",
    ],
    [
        "cache_test",
        "cache/cache_test.cc",
        "serial",
    ],
    [
        "cassandra_format_test",
        "utilities/cassandra/cassandra_format_test.cc",
        "serial",
    ],
    [
        "cassandra_functional_test",
        "utilities/cassandra/cassandra_functional_test.cc",
        "serial",
    ],
    [
        "cassandra_row_merge_test",
        "utilities/cassandra/cassandra_row_merge_test.cc",
        "serial",
    ],
    [
        "cassandra_serialize_test",
        "utilities/cassandra/cassandra_serialize_test.cc",
        "serial",
    ],
    [
        "checkpoint_test",
        "utilities/checkpoint/checkpoint_test.cc",
        "serial",
    ],
    [
        "cleanable_test",
        "table/cleanable_test.cc",
        "serial",
    ],
    [
        "coding_test",
        "util/coding_test.cc",
        "serial",
    ],
    [
        "column_aware_encoding_test",
        "utilities/column_aware_encoding_test.cc",
        "serial",
    ],
    [
        "column_family_test",
        "db/column_family_test.cc",
        "serial",
    ],
    [
        "compact_files_test",
        "db/compact_files_test.cc",
        "serial",
    ],
    [
        "compact_on_deletion_collector_test",
        "utilities/table_properties_collectors/compact_on_deletion_collector_test.cc",
        "serial",
    ],
    [
        "compaction_iterator_test",
        "db/compaction_iterator_test.cc",
        "serial",
    ],
    [
        "compaction_job_stats_test",
        "db/compaction_job_stats_test.cc",
        "serial",
    ],
    [
        "compaction_job_test",
        "db/compaction_job_test.cc",
        "serial",
    ],
    [
        "compaction_picker_test",
        "db/compaction_picker_test.cc",
        "serial",
    ],
    [
        "comparator_db_test",
        "db/comparator_db_test.cc",
        "serial",
    ],
    [
        "corruption_test",
        "db/corruption_test.cc",
        "serial",
    ],
    [
        "crc32c_test",
        "util/crc32c_test.cc",
        "serial",
    ],
    [
        "cuckoo_table_builder_test",
        "table/cuckoo_table_builder_test.cc",
        "serial",
    ],
    [
        "cuckoo_table_db_test",
        "db/cuckoo_table_db_test.cc",
        "serial",
    ],
    [
        "cuckoo_table_reader_test",
        "table/cuckoo_table_reader_test.cc",
        "serial",
    ],
    [
        "date_tiered_test",
        "utilities/date_tiered/date_tiered_test.cc",
        "serial",
    ],
    [
        "db_basic_test",
        "db/db_basic_test.cc",
        "serial",
    ],
    [
        "db_blob_index_test",
        "db/db_blob_index_test.cc",
        "serial",
    ],
    [
        "db_block_cache_test",
        "db/db_block_cache_test.cc",
        "serial",
    ],
    [
        "db_bloom_filter_test",
        "db/db_bloom_filter_test.cc",
        "serial",
    ],
    [
        "db_compaction_filter_test",
        "db/db_compaction_filter_test.cc",
        "parallel",
    ],
    [
        "db_compaction_test",
        "db/db_compaction_test.cc",
        "parallel",
    ],
    [
        "db_dynamic_level_test",
        "db/db_dynamic_level_test.cc",
        "serial",
    ],
    [
        "db_encryption_test",
        "db/db_encryption_test.cc",
        "serial",
    ],
    [
        "db_flush_test",
        "db/db_flush_test.cc",
        "serial",
    ],
    [
        "db_inplace_update_test",
        "db/db_inplace_update_test.cc",
        "serial",
    ],
    [
        "db_io_failure_test",
        "db/db_io_failure_test.cc",
        "serial",
    ],
    [
        "db_iter_stress_test",
        "db/db_iter_stress_test.cc",
        "serial",
    ],
    [
        "db_iter_test",
        "db/db_iter_test.cc",
        "serial",
    ],
    [
        "db_iterator_test",
        "db/db_iterator_test.cc",
        "serial",
    ],
    [
        "db_log_iter_test",
        "db/db_log_iter_test.cc",
        "serial",
    ],
    [
        "db_memtable_test",
        "db/db_memtable_test.cc",
        "serial",
    ],
    [
        "db_merge_operator_test",
        "db/db_merge_operator_test.cc",
        "parallel",
    ],
    [
        "db_options_test",
        "db/db_options_test.cc",
        "serial",
    ],
    [
        "db_properties_test",
        "db/db_properties_test.cc",
        "serial",
    ],
    [
        "db_range_del_test",
        "db/db_range_del_test.cc",
        "serial",
    ],
    [
        "db_sst_test",
        "db/db_sst_test.cc",
        "parallel",
    ],
    [
        "db_statistics_test",
        "db/db_statistics_test.cc",
        "serial",
    ],
    [
        "db_table_properties_test",
        "db/db_table_properties_test.cc",
        "serial",
    ],
    [
        "db_tailing_iter_test",
        "db/db_tailing_iter_test.cc",
        "serial",
    ],
    [
        "db_test",
        "db/db_test.cc",
        "parallel",
    ],
    [
        "db_test2",
        "db/db_test2.cc",
        "serial",
    ],
    [
        "db_universal_compaction_test",
        "db/db_universal_compaction_test.cc",
        "parallel",
    ],
    [
        "db_wal_test",
        "db/db_wal_test.cc",
        "parallel",
    ],
    [
        "db_write_test",
        "db/db_write_test.cc",
        "serial",
    ],
    [
        "dbformat_test",
        "db/dbformat_test.cc",
        "serial",
    ],
    [
        "delete_scheduler_test",
        "util/delete_scheduler_test.cc",
        "serial",
    ],
    [
        "deletefile_test",
        "db/deletefile_test.cc",
        "serial",
    ],
    [
        "document_db_test",
        "utilities/document/document_db_test.cc",
        "serial",
    ],
    [
        "dynamic_bloom_test",
        "util/dynamic_bloom_test.cc",
        "serial",
    ],
    [
        "env_basic_test",
        "env/env_basic_test.cc",
        "serial",
    ],
    [
        "env_test",
        "env/env_test.cc",
        "serial",
    ],
    [
        "env_timed_test",
        "utilities/env_timed_test.cc",
        "serial",
    ],
    [
        "event_logger_test",
        "util/event_logger_test.cc",
        "serial",
    ],
    [
        "external_sst_file_basic_test",
        "db/external_sst_file_basic_test.cc",
        "serial",
    ],
    [
        "external_sst_file_test",
        "db/external_sst_file_test.cc",
        "parallel",
    ],
    [
        "fault_injection_test",
        "db/fault_injection_test.cc",
        "parallel",
    ],
    [
        "file_indexer_test",
        "db/file_indexer_test.cc",
        "serial",
    ],
    [
        "file_reader_writer_test",
        "util/file_reader_writer_test.cc",
        "serial",
    ],
    [
        "filelock_test",
        "util/filelock_test.cc",
        "serial",
    ],
    [
        "filename_test",
        "db/filename_test.cc",
        "serial",
    ],
    [
        "flush_job_test",
        "db/flush_job_test.cc",
        "serial",
    ],
    [
        "full_filter_block_test",
        "table/full_filter_block_test.cc",
        "serial",
    ],
    [
        "geodb_test",
        "utilities/geodb/geodb_test.cc",
        "serial",
    ],
    [
        "hash_table_test",
        "utilities/persistent_cache/hash_table_test.cc",
        "serial",
    ],
    [
        "hash_test",
        "util/hash_test.cc",
        "serial",
    ],
    [
        "heap_test",
        "util/heap_test.cc",
        "serial",
    ],
    [
        "histogram_test",
        "monitoring/histogram_test.cc",
        "serial",
    ],
    [
        "inlineskiplist_test",
        "memtable/inlineskiplist_test.cc",
        "parallel",
    ],
    [
        "iostats_context_test",
        "monitoring/iostats_context_test.cc",
        "serial",
    ],
    [
        "json_document_test",
        "utilities/document/json_document_test.cc",
        "serial",
    ],
    [
        "ldb_cmd_test",
        "tools/ldb_cmd_test.cc",
        "serial",
    ],
    [
        "listener_test",
        "db/listener_test.cc",
        "serial",
    ],
    [
        "log_test",
        "db/log_test.cc",
        "serial",
    ],
    [
        "lru_cache_test",
        "cache/lru_cache_test.cc",
        "serial",
    ],
    [
        "manual_compaction_test",
        "db/manual_compaction_test.cc",
        "parallel",
    ],
    [
        "memory_test",
        "utilities/memory/memory_test.cc",
        "serial",
    ],
    [
        "memtable_list_test",
        "db/memtable_list_test.cc",
        "serial",
    ],
    [
        "merge_helper_test",
        "db/merge_helper_test.cc",
        "serial",
    ],
    [
        "merge_test",
        "db/merge_test.cc",
        "serial",
    ],
    [
        "merger_test",
        "table/merger_test.cc",
        "serial",
    ],
    [
        "mock_env_test",
        "env/mock_env_test.cc",
        "serial",
    ],
    [
        "object_registry_test",
        "utilities/object_registry_test.cc",
        "serial",
    ],
    [
        "obsolete_files_test",
        "db/obsolete_files_test.cc",
        "serial",
    ],
    [
        "optimistic_transaction_test",
        "utilities/transactions/optimistic_transaction_test.cc",
        "serial",
    ],
    [
        "option_change_migration_test",
        "utilities/option_change_migration/option_change_migration_test.cc",
        "serial",
    ],
    [
        "options_file_test",
        "db/options_file_test.cc",
        "serial",
    ],
    [
        "options_settable_test",
        "options/options_settable_test.cc",
        "serial",
    ],
    [
        "options_test",
        "options/options_test.cc",
        "serial",
    ],
    [
        "options_util_test",
        "utilities/options/options_util_test.cc",
        "serial",
    ],
    [
        "partitioned_filter_block_test",
        "table/partitioned_filter_block_test.cc",
        "serial",
    ],
    [
        "perf_context_test",
        "db/perf_context_test.cc",
        "serial",
    ],
    [
        "persistent_cache_test",
        "utilities/persistent_cache/persistent_cache_test.cc",
        "parallel",
    ],
    [
        "plain_table_db_test",
        "db/plain_table_db_test.cc",
        "serial",
    ],
    [
        "prefix_test",
        "db/prefix_test.cc",
        "serial",
    ],
    [
        "range_del_aggregator_test",
        "db/range_del_aggregator_test.cc",
        "serial",
    ],
    [
        "rate_limiter_test",
        "util/rate_limiter_test.cc",
        "serial",
    ],
    [
        "reduce_levels_test",
        "tools/reduce_levels_test.cc",
        "serial",
    ],
    [
        "repair_test",
        "db/repair_test.cc",
        "serial",
    ],
    [
        "sim_cache_test",
        "utilities/simulator_cache/sim_cache_test.cc",
        "serial",
    ],
    [
        "skiplist_test",
        "memtable/skiplist_test.cc",
        "serial",
    ],
    [
        "slice_transform_test",
        "util/slice_transform_test.cc",
        "serial",
    ],
    [
        "spatial_db_test",
        "utilities/spatialdb/spatial_db_test.cc",
        "serial",
    ],
    [
        "sst_dump_test",
        "tools/sst_dump_test.cc",
        "serial",
    ],
    [
        "statistics_test",
        "monitoring/statistics_test.cc",
        "serial",
    ],
    [
        "stringappend_test",
        "utilities/merge_operators/string_append/stringappend_test.cc",
        "serial",
    ],
    [
        "table_properties_collector_test",
        "db/table_properties_collector_test.cc",
        "serial",
    ],
    [
        "table_test",
        "table/table_test.cc",
        "parallel",
    ],
    [
        "thread_list_test",
        "util/thread_list_test.cc",
        "serial",
    ],
    [
        "thread_local_test",
        "util/thread_local_test.cc",
        "serial",
    ],
    [
        "timer_queue_test",
        "util/timer_queue_test.cc",
        "serial",
    ],
    [
        "transaction_test",
        "utilities/transactions/transaction_test.cc",
        "parallel",
    ],
    [
        "ttl_test",
        "utilities/ttl/ttl_test.cc",
        "serial",
    ],
    [
        "util_merge_operators_test",
        "utilities/util_merge_operators_test.cc",
        "serial",
    ],
    [
        "version_builder_test",
        "db/version_builder_test.cc",
        "serial",
    ],
    [
        "version_edit_test",
        "db/version_edit_test.cc",
        "serial",
    ],
    [
        "version_set_test",
        "db/version_set_test.cc",
        "serial",
    ],
    [
        "wal_manager_test",
        "db/wal_manager_test.cc",
        "serial",
    ],
    [
        "write_batch_test",
        "db/write_batch_test.cc",
        "serial",
    ],
    [
        "write_batch_with_index_test",
        "utilities/write_batch_with_index/write_batch_with_index_test.cc",
        "serial",
    ],
    [
        "write_buffer_manager_test",
        "memtable/write_buffer_manager_test.cc",
        "serial",
    ],
    [
        "write_callback_test",
        "db/write_callback_test.cc",
        "serial",
    ],
    [
        "write_controller_test",
        "db/write_controller_test.cc",
        "serial",
    ],
    [
        "write_prepared_transaction_test",
        "utilities/transactions/write_prepared_transaction_test.cc",
        "parallel",
    ],
    [
        "write_unprepared_transaction_test",
        "utilities/transactions/write_unprepared_transaction_test.cc",
        "parallel",
    ],
]

# Generate a test rule for each entry in ROCKS_TESTS
# Do not build the tests in opt mode, since SyncPoint and other test code
# will not be included.
if not is_opt_mode:
    for test_cfg in ROCKS_TESTS:
        test_name = test_cfg[0]
        test_cc = test_cfg[1]
        ttype = "gtest" if test_cfg[2] == "parallel" else "simple"
        test_bin = test_name + "_bin"

        cpp_binary (
          name = test_bin,
          srcs = [test_cc],
          deps = [":rocksdb_test_lib"],
          preprocessor_flags = rocksdb_preprocessor_flags,
          arch_preprocessor_flags = rocksdb_arch_preprocessor_flags,
          compiler_flags = rocksdb_compiler_flags,
          external_deps = rocksdb_external_deps,
        )

        custom_unittest(
          name = test_name,
          type = ttype,
          deps = [":" + test_bin],
          command = [TEST_RUNNER, BUCK_BINS + test_bin]
        )

custom_unittest(
    name = "make_rocksdbjavastatic",
    command = ["internal_repo_rocksdb/make_rocksdbjavastatic.sh"],
    type = "simple",
)

custom_unittest(
    name = "make_rocksdb_lite_release",
    command = ["internal_repo_rocksdb/make_rocksdb_lite_release.sh"],
    type = "simple",
)
