]>
Commit | Line | Data |
---|---|---|
f67539c2 | 1 | # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
7c673cae FG |
2 | from __future__ import absolute_import |
3 | from __future__ import division | |
4 | from __future__ import print_function | |
5 | from __future__ import unicode_literals | |
f67539c2 TL |
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 | |
7c673cae | 12 | import targets_cfg |
7c673cae | 13 | |
11fdf7f2 | 14 | def 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 | 27 | class 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""" | |
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 | ||
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 = "" |