]> git.proxmox.com Git - ceph.git/blame - ceph/src/rocksdb/buckifier/targets_builder.py
import quincy beta 17.1.0
[ceph.git] / ceph / src / rocksdb / buckifier / targets_builder.py
CommitLineData
f67539c2 1# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
7c673cae
FG
2from __future__ import absolute_import
3from __future__ import division
4from __future__ import print_function
5from __future__ import unicode_literals
f67539c2
TL
6try:
7 from builtins import object
8 from builtins import str
9except ImportError:
10 from __builtin__ import object
11 from __builtin__ import str
7c673cae 12import targets_cfg
7c673cae 13
11fdf7f2 14def pretty_list(lst, indent=8):
7c673cae
FG
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)
11fdf7f2
TL
22 res = separator.join(sorted(lst))
23 res = "\n" + (" " * indent) + "\"" + res + "\",\n" + (" " * (indent - 4))
7c673cae
FG
24 return res
25
26
f67539c2 27class TARGETSBuilder(object):
7c673cae
FG
28 def __init__(self, path):
29 self.path = path
20effc67
TL
30 self.targets_file = open(path, 'wb')
31 header = targets_cfg.rocksdb_target_header_template
32 self.targets_file.write(header.encode("utf-8"))
7c673cae
FG
33 self.total_lib = 0
34 self.total_bin = 0
35 self.total_test = 0
11fdf7f2 36 self.tests_cfg = ""
7c673cae
FG
37
38 def __del__(self):
39 self.targets_file.close()
40
20effc67
TL
41 def add_library(self, name, srcs, deps=None, headers=None,
42 extra_external_deps="", link_whole=False):
11fdf7f2 43 headers_attr_prefix = ""
7c673cae 44 if headers is None:
11fdf7f2 45 headers_attr_prefix = "auto_"
7c673cae 46 headers = "AutoHeaders.RECURSIVE_GLOB"
20effc67
TL
47 else:
48 headers = "[" + pretty_list(headers) + "]"
11fdf7f2
TL
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,
20effc67
TL
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"))
7c673cae
FG
71 self.total_lib = self.total_lib + 1
72
73 def add_binary(self, name, srcs, deps=None):
20effc67
TL
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"))
7c673cae
FG
78 self.total_bin = self.total_bin + 1
79
20effc67
TL
80 def add_c_test(self):
81 self.targets_file.write(b"""
82cpp_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
92custom_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
f67539c2
TL
102 def register_test(self,
103 test_name,
104 src,
105 is_parallel,
106 extra_deps,
107 extra_compiler_flags):
7c673cae
FG
108 exec_mode = "serial"
109 if is_parallel:
110 exec_mode = "parallel"
11fdf7f2
TL
111 self.tests_cfg += targets_cfg.test_cfg_template % (
112 test_name,
113 str(src),
f67539c2
TL
114 str(exec_mode),
115 extra_deps,
116 extra_compiler_flags)
7c673cae
FG
117
118 self.total_test = self.total_test + 1
119
120 def flush_tests(self):
20effc67 121 self.targets_file.write(targets_cfg.unittests_template.format(tests=self.tests_cfg).encode("utf-8"))
11fdf7f2 122 self.tests_cfg = ""