]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/buckifier/targets_builder.py
import quincy beta 17.1.0
[ceph.git] / ceph / src / rocksdb / buckifier / targets_builder.py
1 # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
2 from __future__ import absolute_import
3 from __future__ import division
4 from __future__ import print_function
5 from __future__ import unicode_literals
6 try:
7 from builtins import object
8 from builtins import str
9 except ImportError:
10 from __builtin__ import object
11 from __builtin__ import str
12 import targets_cfg
13
14 def pretty_list(lst, indent=8):
15 if lst is None or len(lst) == 0:
16 return ""
17
18 if len(lst) == 1:
19 return "\"%s\"" % lst[0]
20
21 separator = "\",\n%s\"" % (" " * indent)
22 res = separator.join(sorted(lst))
23 res = "\n" + (" " * indent) + "\"" + res + "\",\n" + (" " * (indent - 4))
24 return res
25
26
27 class TARGETSBuilder(object):
28 def __init__(self, path):
29 self.path = path
30 self.targets_file = open(path, 'wb')
31 header = targets_cfg.rocksdb_target_header_template
32 self.targets_file.write(header.encode("utf-8"))
33 self.total_lib = 0
34 self.total_bin = 0
35 self.total_test = 0
36 self.tests_cfg = ""
37
38 def __del__(self):
39 self.targets_file.close()
40
41 def add_library(self, name, srcs, deps=None, headers=None,
42 extra_external_deps="", link_whole=False):
43 headers_attr_prefix = ""
44 if headers is None:
45 headers_attr_prefix = "auto_"
46 headers = "AutoHeaders.RECURSIVE_GLOB"
47 else:
48 headers = "[" + pretty_list(headers) + "]"
49 self.targets_file.write(targets_cfg.library_template.format(
50 name=name,
51 srcs=pretty_list(srcs),
52 headers_attr_prefix=headers_attr_prefix,
53 headers=headers,
54 deps=pretty_list(deps),
55 extra_external_deps=extra_external_deps,
56 link_whole=link_whole).encode("utf-8"))
57 self.total_lib = self.total_lib + 1
58
59 def add_rocksdb_library(self, name, srcs, headers=None):
60 headers_attr_prefix = ""
61 if headers is None:
62 headers_attr_prefix = "auto_"
63 headers = "AutoHeaders.RECURSIVE_GLOB"
64 else:
65 headers = "[" + pretty_list(headers) + "]"
66 self.targets_file.write(targets_cfg.rocksdb_library_template.format(
67 name=name,
68 srcs=pretty_list(srcs),
69 headers_attr_prefix=headers_attr_prefix,
70 headers=headers).encode("utf-8"))
71 self.total_lib = self.total_lib + 1
72
73 def add_binary(self, name, srcs, deps=None):
74 self.targets_file.write(targets_cfg.binary_template.format(
75 name=name,
76 srcs=pretty_list(srcs),
77 deps=pretty_list(deps)).encode("utf-8"))
78 self.total_bin = self.total_bin + 1
79
80 def add_c_test(self):
81 self.targets_file.write(b"""
82 cpp_binary(
83 name = "c_test_bin",
84 srcs = ["db/c_test.c"],
85 arch_preprocessor_flags = ROCKSDB_ARCH_PREPROCESSOR_FLAGS,
86 os_preprocessor_flags = ROCKSDB_OS_PREPROCESSOR_FLAGS,
87 compiler_flags = ROCKSDB_COMPILER_FLAGS,
88 preprocessor_flags = ROCKSDB_PREPROCESSOR_FLAGS,
89 deps = [":rocksdb_test_lib"],
90 ) if not is_opt_mode else None
91
92 custom_unittest(
93 "c_test",
94 command = [
95 native.package_name() + "/buckifier/rocks_test_runner.sh",
96 "$(location :{})".format("c_test_bin"),
97 ],
98 type = "simple",
99 ) if not is_opt_mode else None
100 """)
101
102 def register_test(self,
103 test_name,
104 src,
105 is_parallel,
106 extra_deps,
107 extra_compiler_flags):
108 exec_mode = "serial"
109 if is_parallel:
110 exec_mode = "parallel"
111 self.tests_cfg += targets_cfg.test_cfg_template % (
112 test_name,
113 str(src),
114 str(exec_mode),
115 extra_deps,
116 extra_compiler_flags)
117
118 self.total_test = self.total_test + 1
119
120 def flush_tests(self):
121 self.targets_file.write(targets_cfg.unittests_template.format(tests=self.tests_cfg).encode("utf-8"))
122 self.tests_cfg = ""