From 4b9b242efe3daaa63a927e32ad1ff9e149aa32fd Mon Sep 17 00:00:00 2001 From: Hsin-Yi Chen Date: Fri, 7 Sep 2018 19:24:32 +0800 Subject: [PATCH] Add test for loading JSON dump - Add a test that compares protobuf and JSON dumps. - Add input-format=Json to header-abi-linker and diff. Bug: 112877706 Test: ./test.py Change-Id: Ic9be304b565a2ac58ed76e1a0fcc96530395b750 --- .../header-abi-diff/src/header_abi_diff.cpp | 9 ++++--- .../src/header_abi_linker.cpp | 1 + .../header-abi-util/src/ir_representation.cpp | 3 ++- vndk/tools/header-checker/tests/module.py | 25 ++++++++++++------- vndk/tools/header-checker/tests/test.py | 6 +++++ vndk/tools/header-checker/utils/utils.py | 8 +++--- 6 files changed, 34 insertions(+), 18 deletions(-) diff --git a/vndk/tools/header-checker/header-abi-diff/src/header_abi_diff.cpp b/vndk/tools/header-checker/header-abi-diff/src/header_abi_diff.cpp index 9cb95c809..8662fa592 100644 --- a/vndk/tools/header-checker/header-abi-diff/src/header_abi_diff.cpp +++ b/vndk/tools/header-checker/header-abi-diff/src/header_abi_diff.cpp @@ -92,19 +92,20 @@ static llvm::cl::opt consider_opaque_types_different( " ABIs"), llvm::cl::Optional, llvm::cl::cat(header_checker_category)); - static llvm::cl::opt text_format_old( - "text-format-old", llvm::cl::desc("Specify text format of old abi dump"), + "input-format-old", llvm::cl::desc("Specify input format of old abi dump"), llvm::cl::values(clEnumValN(abi_util::TextFormatIR::ProtobufTextFormat, - "ProtobufTextFormat","ProtobufTextFormat"), + "ProtobufTextFormat", "ProtobufTextFormat"), + clEnumValN(abi_util::TextFormatIR::Json, "Json", "JSON"), clEnumValEnd), llvm::cl::init(abi_util::TextFormatIR::ProtobufTextFormat), llvm::cl::cat(header_checker_category)); static llvm::cl::opt text_format_new( - "text-format-new", llvm::cl::desc("Specify text format of new abi dump"), + "input-format-new", llvm::cl::desc("Specify input format of new abi dump"), llvm::cl::values(clEnumValN(abi_util::TextFormatIR::ProtobufTextFormat, "ProtobufTextFormat", "ProtobugTextFormat"), + clEnumValN(abi_util::TextFormatIR::Json, "Json", "JSON"), clEnumValEnd), llvm::cl::init(abi_util::TextFormatIR::ProtobufTextFormat), llvm::cl::cat(header_checker_category)); diff --git a/vndk/tools/header-checker/header-abi-linker/src/header_abi_linker.cpp b/vndk/tools/header-checker/header-abi-linker/src/header_abi_linker.cpp index 35a93f73a..69e9d8599 100644 --- a/vndk/tools/header-checker/header-abi-linker/src/header_abi_linker.cpp +++ b/vndk/tools/header-checker/header-abi-linker/src/header_abi_linker.cpp @@ -70,6 +70,7 @@ static llvm::cl::opt input_format( "input-format", llvm::cl::desc("Specify format of input dump files"), llvm::cl::values(clEnumValN(abi_util::TextFormatIR::ProtobufTextFormat, "ProtobufTextFormat", "ProtobufTextFormat"), + clEnumValN(abi_util::TextFormatIR::Json, "Json", "JSON"), clEnumValEnd), llvm::cl::init(abi_util::TextFormatIR::ProtobufTextFormat), llvm::cl::cat(header_linker_category)); diff --git a/vndk/tools/header-checker/header-abi-util/src/ir_representation.cpp b/vndk/tools/header-checker/header-abi-util/src/ir_representation.cpp index d943a3b81..b14010460 100644 --- a/vndk/tools/header-checker/header-abi-util/src/ir_representation.cpp +++ b/vndk/tools/header-checker/header-abi-util/src/ir_representation.cpp @@ -67,8 +67,9 @@ TextFormatToIRReader::CreateTextFormatToIRReader( switch (text_format) { case TextFormatIR::ProtobufTextFormat: return std::make_unique(exported_headers); + case TextFormatIR::Json: + return std::make_unique(exported_headers); default: - // Nothing else is supported yet. llvm::errs() << "Text format not supported yet\n"; return nullptr; } diff --git a/vndk/tools/header-checker/tests/module.py b/vndk/tools/header-checker/tests/module.py index 63184d62f..e81330a40 100755 --- a/vndk/tools/header-checker/tests/module.py +++ b/vndk/tools/header-checker/tests/module.py @@ -35,7 +35,7 @@ def relative_to_abs_path_list(relative_path_list): class Module(object): def __init__(self, name, arch, srcs, version_script, cflags, - export_include_dirs, api, output_format=None): + export_include_dirs, api, dumper_flags=[], linker_flags=[]): self.name = name self.arch = arch self.srcs = relative_to_abs_path_list(srcs) @@ -46,7 +46,8 @@ class Module(object): self.arch_cflags = ARCH_TARGET_CFLAGS.get(self.arch) self.export_include_dirs = relative_to_abs_path_list(export_include_dirs) self.api = api - self.output_format = output_format + self.dumper_flags = dumper_flags + self.linker_flags = linker_flags def get_name(self): return self.name @@ -69,8 +70,11 @@ class Module(object): def get_api(self): return self.api - def get_output_format(self): - return self.output_format + def get_dumper_flags(self): + return self.dumper_flags + + def get_linker_flags(self): + return self.linker_flags def make_lsdump(self, default_cflags): """ For each source file, produce a .sdump file, and link them to form @@ -83,10 +87,11 @@ class Module(object): dumps_to_link.append(output_path) run_header_abi_dumper_on_file( src, output_path, self.export_include_dirs, - self.cflags + self.arch_cflags + default_cflags) + self.cflags + self.arch_cflags + default_cflags, + self.dumper_flags) return run_header_abi_linker(output_lsdump, dumps_to_link, self.version_script, self.api, - self.arch, self.output_format) + self.arch, self.linker_flags) @staticmethod def mutate_module_for_arch(module, target_arch): @@ -96,9 +101,10 @@ class Module(object): cflags = module.get_cflags() export_include_dirs = module.get_export_include_dirs() api = module.get_api() - output_format = module.get_output_format() + dumper_flags = module.get_dumper_flags() + linker_flags = module.get_linker_flags() return Module(name, target_arch, srcs, version_script, cflags, - export_include_dirs, api, output_format) + export_include_dirs, api, dumper_flags, linker_flags) @staticmethod def mutate_module_for_all_arches(module): @@ -496,7 +502,8 @@ TEST_MODULES = [ cflags = [], arch = '', api = 'current', - output_format = 'Json' + dumper_flags = ['-output-format', 'Json'], + linker_flags = ['-input-format', 'Json', '-output-format', 'Json'] ), ] diff --git a/vndk/tools/header-checker/tests/test.py b/vndk/tools/header-checker/tests/test.py index d9e0448e4..f96fe0aa6 100755 --- a/vndk/tools/header-checker/tests/test.py +++ b/vndk/tools/header-checker/tests/test.py @@ -282,6 +282,12 @@ class MyTest(unittest.TestCase): self.prepare_and_absolute_diff_all_archs( "libgolden_cpp_json", "libgolden_cpp_json") + def test_libc_and_cpp_in_protobuf_and_json(self): + self.prepare_and_run_abi_diff_all_archs( + "libgolden_cpp", "libgolden_cpp_json", 0, + ["-input-format-old", "ProtobufTextFormat", + "-input-format-new", "Json"]) + if __name__ == '__main__': unittest.main() diff --git a/vndk/tools/header-checker/utils/utils.py b/vndk/tools/header-checker/utils/utils.py index da563f03e..e9c720a52 100644 --- a/vndk/tools/header-checker/utils/utils.py +++ b/vndk/tools/header-checker/utils/utils.py @@ -93,11 +93,12 @@ def run_header_abi_dumper(input_path, remove_absolute_paths, cflags=[], return f.read() def run_header_abi_dumper_on_file(input_path, output_path, - export_include_dirs = [], cflags =[]): + export_include_dirs=[], cflags=[], flags=[]): input_name, input_ext = os.path.splitext(input_path) cmd = ['header-abi-dumper', '-o', output_path, input_path,] for dir in export_include_dirs: cmd += ['-I', dir] + cmd += flags cmd += ['--'] cmd += cflags if input_ext == '.cpp' or input_ext == '.cc' or input_ext == '.h': @@ -113,13 +114,12 @@ def run_header_abi_dumper_on_file(input_path, output_path, subprocess.check_call(cmd) def run_header_abi_linker(output_path, inputs, version_script, api, arch, - output_format=None): + flags=[]): """Link inputs, taking version_script into account""" with tempfile.TemporaryDirectory() as tmp: cmd = ['header-abi-linker', '-o', output_path, '-v', version_script, '-api', api, '-arch', arch] - if output_format: - cmd += ['-output-format', output_format] + cmd += flags cmd += inputs subprocess.check_call(cmd) with open(output_path, 'r') as f: