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
7 from builtins
import object
8 from builtins
import str
10 from __builtin__
import object
11 from __builtin__
import str
14 def pretty_list(lst
, indent
=8):
15 if lst
is None or len(lst
) == 0:
19 return "\"%s\"" % lst
[0]
21 separator
= "\",\n%s\"" % (" " * indent
)
22 res
= separator
.join(sorted(lst
))
23 res
= "\n" + (" " * indent
) + "\"" + res
+ "\",\n" + (" " * (indent
- 4))
27 class TARGETSBuilder(object):
28 def __init__(self
, 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"))
39 self
.targets_file
.close()
41 def add_library(self
, name
, srcs
, deps
=None, headers
=None,
42 extra_external_deps
="", link_whole
=False):
43 headers_attr_prefix
= ""
45 headers_attr_prefix
= "auto_"
46 headers
= "AutoHeaders.RECURSIVE_GLOB"
48 headers
= "[" + pretty_list(headers
) + "]"
49 self
.targets_file
.write(targets_cfg
.library_template
.format(
51 srcs
=pretty_list(srcs
),
52 headers_attr_prefix
=headers_attr_prefix
,
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
59 def add_rocksdb_library(self
, name
, srcs
, headers
=None):
60 headers_attr_prefix
= ""
62 headers_attr_prefix
= "auto_"
63 headers
= "AutoHeaders.RECURSIVE_GLOB"
65 headers
= "[" + pretty_list(headers
) + "]"
66 self
.targets_file
.write(targets_cfg
.rocksdb_library_template
.format(
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
73 def add_binary(self
, name
, srcs
, deps
=None):
74 self
.targets_file
.write(targets_cfg
.binary_template
.format(
76 srcs
=pretty_list(srcs
),
77 deps
=pretty_list(deps
)).encode("utf-8"))
78 self
.total_bin
= self
.total_bin
+ 1
81 self
.targets_file
.write(b
"""
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
95 native.package_name() + "/buckifier/rocks_test_runner.sh",
96 "$(location :{})".format("c_test_bin"),
99 ) if not is_opt_mode else None
102 def register_test(self
,
107 extra_compiler_flags
):
110 exec_mode
= "parallel"
111 self
.tests_cfg
+= targets_cfg
.test_cfg_template
% (
116 extra_compiler_flags
)
118 self
.total_test
= self
.total_test
+ 1
120 def flush_tests(self
):
121 self
.targets_file
.write(targets_cfg
.unittests_template
.format(tests
=self
.tests_cfg
).encode("utf-8"))