| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- # 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)
- )
|