1# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. 2from __future__ import absolute_import 3from __future__ import division 4from __future__ import print_function 5from __future__ import unicode_literals 6try: 7 from builtins import object 8 from builtins import str 9except ImportError: 10 from __builtin__ import object 11 from __builtin__ import str 12import targets_cfg 13 14def 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 27class TARGETSBuilder(object): 28 def __init__(self, path): 29 self.path = path 30 self.targets_file = open(path, 'w') 31 self.targets_file.write(targets_cfg.rocksdb_target_header) 32 self.total_lib = 0 33 self.total_bin = 0 34 self.total_test = 0 35 self.tests_cfg = "" 36 37 def __del__(self): 38 self.targets_file.close() 39 40 def add_library(self, name, srcs, deps=None, headers=None): 41 headers_attr_prefix = "" 42 if headers is None: 43 headers_attr_prefix = "auto_" 44 headers = "AutoHeaders.RECURSIVE_GLOB" 45 self.targets_file.write(targets_cfg.library_template.format( 46 name=name, 47 srcs=pretty_list(srcs), 48 headers_attr_prefix=headers_attr_prefix, 49 headers=headers, 50 deps=pretty_list(deps))) 51 self.total_lib = self.total_lib + 1 52 53 def add_binary(self, name, srcs, deps=None): 54 self.targets_file.write(targets_cfg.binary_template % ( 55 name, 56 pretty_list(srcs), 57 pretty_list(deps))) 58 self.total_bin = self.total_bin + 1 59 60 def register_test(self, 61 test_name, 62 src, 63 is_parallel, 64 extra_deps, 65 extra_compiler_flags): 66 exec_mode = "serial" 67 if is_parallel: 68 exec_mode = "parallel" 69 self.tests_cfg += targets_cfg.test_cfg_template % ( 70 test_name, 71 str(src), 72 str(exec_mode), 73 extra_deps, 74 extra_compiler_flags) 75 76 self.total_test = self.total_test + 1 77 78 def flush_tests(self): 79 self.targets_file.write(targets_cfg.unittests_template % self.tests_cfg) 80 self.tests_cfg = "" 81