mirror of
https://github.com/facebook/rocksdb.git
synced 2024-12-04 20:02:50 +00:00
f7237e3395
Reviewed By: jermenkoo Differential Revision: D64318168 fbshipit-source-id: 62bddd81424f1c5d4f50ce3512a9a8fe57a19ec3
171 lines
5.2 KiB
Python
171 lines
5.2 KiB
Python
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
|
|
|
try:
|
|
from builtins import object, str
|
|
except ImportError:
|
|
from __builtin__ import object, str
|
|
import pprint
|
|
|
|
import targets_cfg
|
|
|
|
class LiteralValue:
|
|
def __init__(self, value):
|
|
self.value = value
|
|
|
|
def __str__(self):
|
|
return str(self.value)
|
|
|
|
def smart_quote_value(val):
|
|
if isinstance(val, LiteralValue):
|
|
return str(val)
|
|
return '"%s"' % val
|
|
|
|
def pretty_list(lst, indent=8):
|
|
if lst is None or len(lst) == 0:
|
|
return ""
|
|
|
|
if len(lst) == 1:
|
|
return smart_quote_value(lst[0])
|
|
|
|
separator = ',\n%s' % (" " * indent)
|
|
res = separator.join(sorted(map(smart_quote_value, lst)))
|
|
res = "\n" + (" " * indent) + res + ',\n' + (" " * (indent - 4))
|
|
return res
|
|
|
|
|
|
class TARGETSBuilder:
|
|
def __init__(self, path, extra_argv):
|
|
self.path = path
|
|
header = targets_cfg.rocksdb_target_header_template.format(
|
|
extra_argv=extra_argv
|
|
)
|
|
with open(path, "wb") as targets_file:
|
|
targets_file.write(header.encode("utf-8"))
|
|
self.total_lib = 0
|
|
self.total_bin = 0
|
|
self.total_test = 0
|
|
self.tests_cfg = ""
|
|
|
|
def add_library(
|
|
self,
|
|
name,
|
|
srcs,
|
|
deps=None,
|
|
headers=None,
|
|
extra_external_deps="",
|
|
link_whole=False,
|
|
external_dependencies=None,
|
|
extra_test_libs=False,
|
|
):
|
|
if headers is not None:
|
|
if isinstance(headers, LiteralValue):
|
|
headers = str(headers)
|
|
else:
|
|
headers = "[" + pretty_list(headers) + "]"
|
|
else:
|
|
headers = "[]"
|
|
with open(self.path, "ab") as targets_file:
|
|
targets_file.write(
|
|
targets_cfg.library_template.format(
|
|
name=name,
|
|
srcs=pretty_list(srcs),
|
|
headers=headers,
|
|
deps=pretty_list(deps),
|
|
extra_external_deps=extra_external_deps,
|
|
link_whole=link_whole,
|
|
external_dependencies=pretty_list(external_dependencies),
|
|
extra_test_libs=extra_test_libs,
|
|
).encode("utf-8")
|
|
)
|
|
self.total_lib = self.total_lib + 1
|
|
|
|
def add_rocksdb_library(self, name, srcs, headers=None, external_dependencies=None):
|
|
headers = "[" + pretty_list(headers) + "]"
|
|
with open(self.path, "ab") as targets_file:
|
|
targets_file.write(
|
|
targets_cfg.rocksdb_library_template.format(
|
|
name=name,
|
|
srcs=pretty_list(srcs),
|
|
headers=headers,
|
|
external_dependencies=pretty_list(external_dependencies),
|
|
).encode("utf-8")
|
|
)
|
|
self.total_lib = self.total_lib + 1
|
|
|
|
def add_binary(
|
|
self,
|
|
name,
|
|
srcs,
|
|
deps=None,
|
|
extra_preprocessor_flags=None,
|
|
extra_bench_libs=False,
|
|
):
|
|
with open(self.path, "ab") as targets_file:
|
|
targets_file.write(
|
|
targets_cfg.binary_template.format(
|
|
name=name,
|
|
srcs=pretty_list(srcs),
|
|
deps=pretty_list(deps),
|
|
extra_preprocessor_flags=pretty_list(extra_preprocessor_flags),
|
|
extra_bench_libs=extra_bench_libs,
|
|
).encode("utf-8")
|
|
)
|
|
self.total_bin = self.total_bin + 1
|
|
|
|
def add_c_test(self):
|
|
with open(self.path, "ab") as targets_file:
|
|
targets_file.write(
|
|
b"""
|
|
add_c_test_wrapper()
|
|
"""
|
|
)
|
|
|
|
def add_test_header(self):
|
|
with open(self.path, "ab") as targets_file:
|
|
targets_file.write(
|
|
b"""
|
|
# 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.
|
|
"""
|
|
)
|
|
|
|
def add_fancy_bench_config(
|
|
self,
|
|
name,
|
|
bench_config,
|
|
slow,
|
|
expected_runtime,
|
|
sl_iterations,
|
|
regression_threshold,
|
|
):
|
|
with open(self.path, "ab") as targets_file:
|
|
targets_file.write(
|
|
targets_cfg.fancy_bench_template.format(
|
|
name=name,
|
|
bench_config=pprint.pformat(bench_config),
|
|
slow=slow,
|
|
expected_runtime=expected_runtime,
|
|
sl_iterations=sl_iterations,
|
|
regression_threshold=regression_threshold,
|
|
).encode("utf-8")
|
|
)
|
|
|
|
def register_test(self, test_name, src, deps, extra_compiler_flags):
|
|
with open(self.path, "ab") as targets_file:
|
|
targets_file.write(
|
|
targets_cfg.unittests_template.format(
|
|
test_name=test_name,
|
|
test_cc=str(src),
|
|
deps=deps,
|
|
extra_compiler_flags=extra_compiler_flags,
|
|
).encode("utf-8")
|
|
)
|
|
self.total_test = self.total_test + 1
|
|
|
|
def export_file(self, name):
|
|
with open(self.path, "a") as targets_file:
|
|
targets_file.write(
|
|
targets_cfg.export_file_template.format(name=name)
|
|
)
|