1#!/usr/bin/env python3 2 3import os 4import sys 5import tempfile 6 7import_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) 8import_path = os.path.abspath(os.path.join(import_path, 'utils')) 9sys.path.insert(1, import_path) 10 11from utils import run_header_abi_dumper 12from utils import run_header_abi_linker 13from utils import SOURCE_ABI_DUMP_EXT 14 15 16SCRIPT_DIR = os.path.abspath(os.path.dirname(__file__)) 17ARCH_TARGET_CFLAGS = { 18 'arm': ('-target', 'arm-linux-androideabi'), 19 'arm64': ('-target', 'aarch64-linux-android'), 20 'x86': ('-target', 'i386-linux-androideabi'), 21 'x86_64': ('-target', 'x86_64-linux-android'), 22} 23TARGET_ARCHES = ['arm', 'arm64', 'x86', 'x86_64'] 24 25 26def relative_to_abs_path(relative_path): 27 return os.path.join(SCRIPT_DIR, relative_path) 28 29 30def relative_to_abs_path_list(relative_path_list): 31 abs_paths = [] 32 for relative_path in relative_path_list: 33 abs_paths.append(relative_to_abs_path(relative_path)) 34 return abs_paths 35 36 37class Module(object): 38 def __init__(self, name, arch, cflags, export_include_dirs, 39 has_reference_dump): 40 self.name = name 41 self.arch = arch 42 self.cflags = tuple(cflags) 43 self.arch_cflags = ARCH_TARGET_CFLAGS.get(self.arch, tuple()) 44 self.export_include_dirs = relative_to_abs_path_list( 45 export_include_dirs) 46 self.has_reference_dump = has_reference_dump 47 48 def get_dump_name(self): 49 """Returns the module name followed by file extension.""" 50 raise NotImplementedError() 51 52 def make_dump(self, output_path): 53 """Create a dump file.""" 54 raise NotImplementedError() 55 56 def mutate_for_arch(self, target_arch): 57 """Returns a clone of this instance with arch=target_arch.""" 58 raise NotImplementedError() 59 60 def mutate_for_all_arches(self): 61 if self.arch: 62 return [self] 63 modules = [] 64 for target_arch in TARGET_ARCHES: 65 modules.append(self.mutate_for_arch(target_arch)) 66 return modules 67 68 @staticmethod 69 def get_test_modules(): 70 modules = [] 71 for module in TEST_MODULES.values(): 72 modules += module.mutate_for_all_arches() 73 return modules 74 75 @staticmethod 76 def get_test_modules_by_name(name): 77 return TEST_MODULES.get(name).mutate_for_all_arches() 78 79 80class SdumpModule(Module): 81 def __init__(self, name, src, export_include_dirs=tuple(), 82 has_reference_dump=False, cflags=tuple(), arch='', 83 dumper_flags=tuple()): 84 super().__init__(name, arch, cflags, export_include_dirs, 85 has_reference_dump) 86 self.src = relative_to_abs_path(src) 87 self.dumper_flags = dumper_flags 88 89 def get_dump_name(self): 90 return self.name + '.sdump' 91 92 def make_dump(self, output_path): 93 return run_header_abi_dumper( 94 self.src, output_path, cflags=self.cflags, 95 export_include_dirs=self.export_include_dirs, 96 flags=self.dumper_flags) 97 98 def mutate_for_arch(self, target_arch): 99 return SdumpModule(self.name, self.src, self.export_include_dirs, 100 self.has_reference_dump, self.cflags, target_arch, 101 self.dumper_flags) 102 103 104class LsdumpModule(Module): 105 def __init__(self, name, srcs, version_script, export_include_dirs, 106 has_reference_dump=False, cflags=tuple(), arch='', 107 api='current', dumper_flags=tuple(), linker_flags=tuple()): 108 super().__init__(name, arch, cflags, export_include_dirs, 109 has_reference_dump) 110 self.srcs = relative_to_abs_path_list(srcs) 111 self.version_script = relative_to_abs_path(version_script) 112 self.api = api 113 self.dumper_flags = dumper_flags 114 self.linker_flags = linker_flags 115 116 def get_dump_name(self): 117 return self.name + SOURCE_ABI_DUMP_EXT 118 119 def make_dump(self, output_path): 120 """For each source file, produce a .sdump file, and link them to form 121 an lsump file.""" 122 dumps_to_link = [] 123 with tempfile.TemporaryDirectory() as tmp: 124 for src in self.srcs: 125 sdump_path = os.path.join(tmp, 126 os.path.basename(src) + '.sdump') 127 dumps_to_link.append(sdump_path) 128 run_header_abi_dumper( 129 src, sdump_path, self.cflags + self.arch_cflags, 130 self.export_include_dirs, self.dumper_flags) 131 132 lsdump_path = os.path.join(tmp, self.get_dump_name()) 133 run_header_abi_linker(dumps_to_link, lsdump_path, 134 self.version_script, self.api, self.arch, 135 self.linker_flags) 136 # Replace the absolute tmp paths in the type ID. 137 with open(lsdump_path, 'r') as lsdump_file: 138 content = lsdump_file.read().replace(tmp, '') 139 140 with open(output_path, 'w') as output_file: 141 output_file.write(content) 142 143 def mutate_for_arch(self, target_arch): 144 return LsdumpModule(self.name, self.srcs, self.version_script, 145 self.export_include_dirs, self.has_reference_dump, 146 self.cflags, target_arch, self.api, 147 self.dumper_flags, self.linker_flags) 148 149 150TEST_MODULES = [ 151 LsdumpModule( 152 name='libc_and_cpp', 153 srcs=[ 154 'integration/c_and_cpp/source1.cpp', 155 'integration/c_and_cpp/source2.c', 156 ], 157 version_script='integration/c_and_cpp/map.txt', 158 export_include_dirs=['integration/c_and_cpp/include'], 159 has_reference_dump=True, 160 ), 161 LsdumpModule( 162 name='libc_and_cpp_with_opaque_ptr_a', 163 srcs=[ 164 'integration/c_and_cpp/source1.cpp', 165 'integration/c_and_cpp/source2.c', 166 ], 167 version_script='integration/c_and_cpp/map.txt', 168 export_include_dirs=['integration/c_and_cpp/include'], 169 cflags=['-DOPAQUE_STRUCT_A=1'], 170 ), 171 LsdumpModule( 172 name='libc_and_cpp_with_opaque_ptr_b', 173 srcs=[ 174 'integration/c_and_cpp/source1.cpp', 175 'integration/c_and_cpp/source2.c', 176 ], 177 version_script='integration/c_and_cpp/map.txt', 178 export_include_dirs=['integration/c_and_cpp/include'], 179 cflags=['-DOPAQUE_STRUCT_B=1'], 180 ), 181 LsdumpModule( 182 name='libc_and_cpp_with_unused_struct', 183 srcs=[ 184 'integration/c_and_cpp/source1.cpp', 185 'integration/c_and_cpp/source2.c', 186 ], 187 version_script='integration/c_and_cpp/map.txt', 188 export_include_dirs=['integration/c_and_cpp/include'], 189 cflags=['-DINCLUDE_UNUSED_STRUCTS=1'], 190 has_reference_dump=True, 191 ), 192 LsdumpModule( 193 name='libc_and_cpp_with_unused_cstruct', 194 srcs=[ 195 'integration/c_and_cpp/source1.cpp', 196 'integration/c_and_cpp/source2.c', 197 ], 198 version_script='integration/c_and_cpp/map.txt', 199 export_include_dirs=['integration/c_and_cpp/include'], 200 cflags=['-DINCLUDE_UNUSED_STRUCTS=1', '-DMAKE_UNUSED_STRUCT_C=1'], 201 ), 202 LsdumpModule( 203 name='libgolden_cpp', 204 srcs=[ 205 'integration/cpp/gold/golden_1.cpp', 206 'integration/cpp/gold/high_volume_speaker.cpp', 207 'integration/cpp/gold/low_volume_speaker.cpp', 208 ], 209 version_script='integration/cpp/gold/map.txt', 210 export_include_dirs=['integration/cpp/gold/include'], 211 has_reference_dump=True, 212 ), 213 LsdumpModule( 214 name='libgolden_cpp_odr', 215 srcs=[ 216 'integration/cpp/gold/golden_1.cpp', 217 'integration/cpp/gold/high_volume_speaker.cpp', 218 'integration/cpp/gold/low_volume_speaker.cpp', 219 ], 220 version_script='integration/cpp/gold/map.txt', 221 export_include_dirs=['integration/cpp/gold/include'], 222 cflags=['-DTEST_ODR'], 223 ), 224 LsdumpModule( 225 name='libgolden_cpp_add_function', 226 srcs=[ 227 'integration/cpp/gold/golden_1.cpp', 228 'integration/cpp/gold/high_volume_speaker.cpp', 229 'integration/cpp/gold/low_volume_speaker.cpp', 230 ], 231 version_script='integration/cpp/gold/map_add_function.txt', 232 export_include_dirs=['integration/cpp/gold/include'], 233 cflags=['-DGOLDEN_ADD_FUNCTION=1'], 234 has_reference_dump=True, 235 ), 236 LsdumpModule( 237 name='libgolden_cpp_add_function_and_unexported_elf', 238 srcs=[ 239 'integration/cpp/gold/golden_1.cpp', 240 'integration/cpp/gold/high_volume_speaker.cpp', 241 'integration/cpp/gold/low_volume_speaker.cpp', 242 ], 243 version_script='integration/cpp/gold/map_add_function_elf_symbol.txt', 244 export_include_dirs=['integration/cpp/gold/include'], 245 cflags=['-DGOLDEN_ADD_FUNCTION=1', '-DADD_UNEXPORTED_ELF_SYMBOL'], 246 arch='', 247 api='current', 248 ), 249 LsdumpModule( 250 name='libgolden_cpp_add_function_sybmol_only', 251 srcs=[ 252 'integration/cpp/gold/golden_1.cpp', 253 'integration/cpp/gold/high_volume_speaker.cpp', 254 'integration/cpp/gold/low_volume_speaker.cpp', 255 ], 256 version_script='integration/cpp/gold/map_add_function.txt', 257 export_include_dirs=['integration/cpp/gold/include'], 258 has_reference_dump=True, 259 ), 260 LsdumpModule( 261 name='libgolden_cpp_change_function_access', 262 srcs=[ 263 'integration/cpp/gold/golden_1.cpp', 264 'integration/cpp/gold/high_volume_speaker.cpp', 265 'integration/cpp/gold/low_volume_speaker.cpp', 266 ], 267 version_script='integration/cpp/gold/map.txt', 268 export_include_dirs=['integration/cpp/gold/include'], 269 cflags=['-DGOLDEN_CHANGE_FUNCTION_ACCESS=1'], 270 ), 271 LsdumpModule( 272 name='libgolden_cpp_add_global_variable', 273 srcs=[ 274 'integration/cpp/gold/golden_1.cpp', 275 'integration/cpp/gold/high_volume_speaker.cpp', 276 'integration/cpp/gold/low_volume_speaker.cpp', 277 ], 278 version_script='integration/cpp/gold/map_added_globvar.txt', 279 export_include_dirs=['integration/cpp/gold/include'], 280 cflags=['-DGOLDEN_ADD_GLOBVAR=1'], 281 has_reference_dump=True, 282 ), 283 LsdumpModule( 284 name='libgolden_cpp_add_global_variable_private', 285 srcs=[ 286 'integration/cpp/gold/golden_1.cpp', 287 'integration/cpp/gold/high_volume_speaker.cpp', 288 'integration/cpp/gold/low_volume_speaker.cpp', 289 ], 290 version_script='integration/cpp/gold/map_added_globvar.txt', 291 export_include_dirs=['integration/cpp/gold/include'], 292 cflags=['-DGOLDEN_ADD_GLOBVAR=1', '-DGOLDEN_ADD_GLOBVAR_PRIVATE'], 293 ), 294 LsdumpModule( 295 name='libgolden_cpp_return_type_diff', 296 srcs=[ 297 'integration/cpp/gold/golden_1.cpp', 298 'integration/cpp/gold/high_volume_speaker.cpp', 299 'integration/cpp/gold/low_volume_speaker.cpp', 300 ], 301 version_script='integration/cpp/gold/map.txt', 302 export_include_dirs=['integration/cpp/gold/include'], 303 cflags=['-DGOLDEN_RETURN_TYPE_DIFF=1'], 304 ), 305 LsdumpModule( 306 name='libgolden_cpp_parameter_type_diff', 307 srcs=[ 308 'integration/cpp/gold/golden_1.cpp', 309 'integration/cpp/gold/high_volume_speaker.cpp', 310 'integration/cpp/gold/low_volume_speaker.cpp', 311 ], 312 version_script='integration/cpp/gold/map_parameter_type_diff.txt', 313 export_include_dirs=['integration/cpp/gold/include'], 314 cflags=['-DGOLDEN_PARAMETER_TYPE_DIFF=1'], 315 ), 316 LsdumpModule( 317 name='libgolden_cpp_vtable_diff', 318 srcs=[ 319 'integration/cpp/gold/golden_1.cpp', 320 'integration/cpp/gold/high_volume_speaker.cpp', 321 'integration/cpp/gold/low_volume_speaker.cpp', 322 ], 323 version_script='integration/cpp/gold/map.txt', 324 export_include_dirs=['integration/cpp/gold/include'], 325 cflags=['-DGOLDEN_VTABLE_DIFF=1'], 326 ), 327 LsdumpModule( 328 name='libgolden_cpp_member_diff', 329 srcs=[ 330 'integration/cpp/gold/golden_1.cpp', 331 'integration/cpp/gold/high_volume_speaker.cpp', 332 'integration/cpp/gold/low_volume_speaker.cpp', 333 ], 334 version_script='integration/cpp/gold/map.txt', 335 export_include_dirs=['integration/cpp/gold/include'], 336 cflags=['-DGOLDEN_MEMBER_DIFF=1'], 337 ), 338 LsdumpModule( 339 name='libgolden_cpp_member_fake_diff', 340 srcs=[ 341 'integration/cpp/gold/golden_1.cpp', 342 'integration/cpp/gold/high_volume_speaker.cpp', 343 'integration/cpp/gold/low_volume_speaker.cpp', 344 ], 345 version_script='integration/cpp/gold/map.txt', 346 export_include_dirs=['integration/cpp/gold/include'], 347 cflags=['-DGOLDEN_MEMBER_FAKE_DIFF=1'], 348 ), 349 LsdumpModule( 350 name='libgolden_cpp_member_cv_diff', 351 srcs=[ 352 'integration/cpp/gold/golden_1.cpp', 353 'integration/cpp/gold/high_volume_speaker.cpp', 354 'integration/cpp/gold/low_volume_speaker.cpp', 355 ], 356 version_script='integration/cpp/gold/map.txt', 357 export_include_dirs=['integration/cpp/gold/include'], 358 cflags=['-DGOLDEN_MEMBER_CV_DIFF=1'], 359 ), 360 LsdumpModule( 361 name='libgolden_cpp_change_member_access', 362 srcs=[ 363 'integration/cpp/gold/golden_1.cpp', 364 'integration/cpp/gold/high_volume_speaker.cpp', 365 'integration/cpp/gold/low_volume_speaker.cpp', 366 ], 367 version_script='integration/cpp/gold/map.txt', 368 export_include_dirs=['integration/cpp/gold/include'], 369 cflags=['-DGOLDEN_CHANGE_MEMBER_ACCESS=1'], 370 ), 371 LsdumpModule( 372 name='libgolden_cpp_member_integral_type_diff', 373 srcs=[ 374 'integration/cpp/gold/golden_1.cpp', 375 'integration/cpp/gold/high_volume_speaker.cpp', 376 'integration/cpp/gold/low_volume_speaker.cpp', 377 ], 378 version_script='integration/cpp/gold/map.txt', 379 export_include_dirs=['integration/cpp/gold/include'], 380 cflags=['-DGOLDEN_MEMBER_INTEGRAL_TYPE_DIFF=1'], 381 ), 382 LsdumpModule( 383 name='libgolden_cpp_enum_diff', 384 srcs=[ 385 'integration/cpp/gold/golden_1.cpp', 386 'integration/cpp/gold/high_volume_speaker.cpp', 387 'integration/cpp/gold/low_volume_speaker.cpp', 388 ], 389 version_script='integration/cpp/gold/map.txt', 390 export_include_dirs=['integration/cpp/gold/include'], 391 cflags=['-DGOLDEN_ENUM_DIFF=1'], 392 ), 393 LsdumpModule( 394 name='libgolden_cpp_enum_extended', 395 srcs=[ 396 'integration/cpp/gold/golden_1.cpp', 397 'integration/cpp/gold/high_volume_speaker.cpp', 398 'integration/cpp/gold/low_volume_speaker.cpp', 399 ], 400 version_script='integration/cpp/gold/map.txt', 401 export_include_dirs=['integration/cpp/gold/include'], 402 cflags=['-DGOLDEN_ENUM_EXTENSION=1'], 403 ), 404 LsdumpModule( 405 name='libgolden_cpp_unreferenced_elf_symbol_removed', 406 srcs=[ 407 'integration/cpp/gold/golden_1.cpp', 408 'integration/cpp/gold/high_volume_speaker.cpp', 409 'integration/cpp/gold/low_volume_speaker.cpp', 410 ], 411 version_script='integration/cpp/gold/map_elf_symbol_removed.txt', 412 export_include_dirs=['integration/cpp/gold/include'], 413 ), 414 LsdumpModule( 415 name='libreproducability', 416 srcs=['integration/c_and_cpp/reproducability.c'], 417 version_script='integration/c_and_cpp/repro_map.txt', 418 export_include_dirs=['integration/c_and_cpp/include'], 419 has_reference_dump=True, 420 ), 421 LsdumpModule( 422 name='libifunc', 423 srcs=['integration/ifunc/ifunc.c'], 424 version_script='integration/ifunc/map.txt', 425 export_include_dirs=[], 426 linker_flags=[ 427 '-so', relative_to_abs_path( 428 'integration/ifunc/prebuilts/libifunc.so' 429 ), 430 ], 431 has_reference_dump=True, 432 ), 433 LsdumpModule( 434 name='libgolden_cpp_member_name_changed', 435 srcs=[ 436 'integration/cpp/gold/golden_1.cpp', 437 'integration/cpp/gold/high_volume_speaker.cpp', 438 'integration/cpp/gold/low_volume_speaker.cpp', 439 ], 440 version_script='integration/cpp/gold/map.txt', 441 export_include_dirs=['integration/cpp/gold/include'], 442 cflags=['-DGOLDEN_CHANGE_MEMBER_NAME_SAME_OFFSET=1'], 443 ), 444 LsdumpModule( 445 name='libgolden_cpp_function_pointer', 446 srcs=[ 447 'integration/cpp/gold/golden_1.cpp', 448 'integration/cpp/gold/high_volume_speaker.cpp', 449 'integration/cpp/gold/low_volume_speaker.cpp', 450 ], 451 version_script='integration/cpp/gold/map.txt', 452 export_include_dirs=['integration/cpp/gold/include'], 453 cflags=['-DGOLDEN_FUNCTION_POINTER=1'], 454 ), 455 LsdumpModule( 456 name='libgolden_cpp_function_pointer_parameter_added', 457 srcs=[ 458 'integration/cpp/gold/golden_1.cpp', 459 'integration/cpp/gold/high_volume_speaker.cpp', 460 'integration/cpp/gold/low_volume_speaker.cpp', 461 ], 462 version_script='integration/cpp/gold/map.txt', 463 export_include_dirs=['integration/cpp/gold/include'], 464 cflags=['-DGOLDEN_FUNCTION_POINTER_ADD_PARAM=1', 465 '-DGOLDEN_FUNCTION_POINTER=1'], 466 ), 467 LsdumpModule( 468 name='libgolden_cpp_internal_public_struct', 469 srcs=[ 470 'integration/cpp/gold/golden_1.cpp', 471 'integration/cpp/gold/high_volume_speaker.cpp', 472 'integration/cpp/gold/low_volume_speaker.cpp', 473 ], 474 version_script='integration/cpp/gold/map.txt', 475 export_include_dirs=['integration/cpp/gold/include'], 476 cflags=['-DGOLDEN_WITH_INTERNAL_STRUCT', 477 '-DGOLDEN_WITH_PUBLIC_INTERNAL_STRUCT'], 478 ), 479 LsdumpModule( 480 name='libgolden_cpp_internal_private_struct', 481 srcs=[ 482 'integration/cpp/gold/golden_1.cpp', 483 'integration/cpp/gold/high_volume_speaker.cpp', 484 'integration/cpp/gold/low_volume_speaker.cpp', 485 ], 486 version_script='integration/cpp/gold/map.txt', 487 export_include_dirs=['integration/cpp/gold/include'], 488 cflags=['-DGOLDEN_WITH_INTERNAL_STRUCT'], 489 ), 490 LsdumpModule( 491 name='libgolden_cpp_inheritance_type_changed', 492 srcs=[ 493 'integration/cpp/gold/golden_1.cpp', 494 'integration/cpp/gold/high_volume_speaker.cpp', 495 'integration/cpp/gold/low_volume_speaker.cpp', 496 ], 497 version_script='integration/cpp/gold/map.txt', 498 export_include_dirs=['integration/cpp/gold/include'], 499 cflags=['-DGOLDEN_CHANGE_INHERITANCE_TYPE'], 500 ), 501 LsdumpModule( 502 name='libpure_virtual_function', 503 srcs=['integration/cpp/pure_virtual/pure_virtual_function.cpp'], 504 export_include_dirs=['integration/cpp/pure_virtual/include'], 505 version_script='', 506 has_reference_dump=True, 507 ), 508 LsdumpModule( 509 name='libgolden_cpp_json', 510 srcs=[ 511 'integration/cpp/gold/golden_1.cpp', 512 'integration/cpp/gold/high_volume_speaker.cpp', 513 'integration/cpp/gold/low_volume_speaker.cpp', 514 ], 515 version_script='integration/cpp/gold/map.txt', 516 export_include_dirs=['integration/cpp/gold/include'], 517 dumper_flags=['-output-format', 'Json'], 518 linker_flags=['-input-format', 'Json', '-output-format', 'Json'], 519 has_reference_dump=True, 520 ), 521 LsdumpModule( 522 name='libopaque_type', 523 arch='arm64', 524 srcs=['integration/opaque_type/include/opaque_type.h'], 525 version_script='integration/opaque_type/map.txt', 526 export_include_dirs=['integration/opaque_type/include'], 527 linker_flags=['-output-format', 'Json'], 528 has_reference_dump=True, 529 ), 530 LsdumpModule( 531 name='libversion_script_example', 532 arch='arm64', 533 srcs=[ 534 'integration/version_script_example/example.cpp', 535 ], 536 version_script='integration/version_script_example/map.txt', 537 export_include_dirs=['integration/version_script_example'], 538 dumper_flags=['-output-format', 'Json'], 539 linker_flags=[ 540 '-input-format', 'Json', 541 '-output-format', 'Json', 542 '-so', relative_to_abs_path( 543 'integration/version_script_example/prebuilts/' + 544 'libversion_script_example.so' 545 ), 546 ], 547 has_reference_dump=True, 548 ), 549 LsdumpModule( 550 name='libversion_script_example_no_private', 551 arch='arm64', 552 srcs=[ 553 'integration/version_script_example/example.cpp', 554 ], 555 version_script='integration/version_script_example/map.txt', 556 export_include_dirs=['integration/version_script_example'], 557 dumper_flags=['-output-format', 'Json'], 558 linker_flags=[ 559 '-input-format', 'Json', 560 '-output-format', 'Json', 561 '-so', relative_to_abs_path( 562 'integration/version_script_example/prebuilts/' + 563 'libversion_script_example.so' 564 ), 565 '--exclude-symbol-version', '*_PRIVATE', 566 ], 567 has_reference_dump=True, 568 ), 569 LsdumpModule( 570 name='libversion_script_example_no_mytag', 571 arch='arm64', 572 srcs=[ 573 'integration/version_script_example/example.cpp', 574 ], 575 version_script='integration/version_script_example/map.txt', 576 export_include_dirs=['integration/version_script_example'], 577 dumper_flags=['-output-format', 'Json'], 578 linker_flags=[ 579 '-input-format', 'Json', 580 '-output-format', 'Json', 581 '-so', relative_to_abs_path( 582 'integration/version_script_example/prebuilts/' + 583 'libversion_script_example.so' 584 ), 585 '--exclude-symbol-tag', 'mytag', 586 ], 587 has_reference_dump=True, 588 ), 589 LsdumpModule( 590 name='libversion_script_example_api_level', 591 arch='arm64', 592 srcs=[ 593 'integration/version_script_example/example.cpp', 594 ], 595 version_script='integration/version_script_example/map.txt', 596 export_include_dirs=['integration/version_script_example'], 597 dumper_flags=['-output-format', 'Json'], 598 linker_flags=[ 599 '-input-format', 'Json', 600 '-output-format', 'Json', 601 '-so', relative_to_abs_path( 602 'integration/version_script_example/prebuilts/' + 603 'libversion_script_example.so' 604 ), 605 '-api', '32', 606 '-api-map', relative_to_abs_path( 607 'integration/version_script_example/api_levels.json' 608 ), 609 ], 610 has_reference_dump=True, 611 ), 612 # Test data for test_allow_adding_removing_weak_symbols 613 LsdumpModule( 614 name='libweak_symbols_old', 615 arch='arm64', 616 srcs=[ 617 'integration/weak_symbols/example.c', 618 ], 619 version_script='integration/weak_symbols/old_map.txt', 620 export_include_dirs=[], 621 dumper_flags=['-output-format', 'Json'], 622 linker_flags=[ 623 '-input-format', 'Json', 624 '-output-format', 'Json', 625 ], 626 has_reference_dump=True, 627 ), 628 LsdumpModule( 629 name='libweak_symbols_new', 630 arch='arm64', 631 srcs=[ 632 'integration/weak_symbols/example.c', 633 ], 634 version_script='integration/weak_symbols/new_map.txt', 635 export_include_dirs=[], 636 dumper_flags=['-output-format', 'Json'], 637 linker_flags=[ 638 '-input-format', 'Json', 639 '-output-format', 'Json', 640 ], 641 cflags=['-DNEW=1'], 642 has_reference_dump=True, 643 ), 644 LsdumpModule( 645 name='libempty', 646 arch='arm64', 647 srcs=[], 648 version_script='integration/c_and_cpp/map.txt', 649 export_include_dirs=['integration/c_and_cpp/include'], 650 linker_flags=[ 651 '-output-format', 'Json', 652 ], 653 has_reference_dump=True, 654 ), 655 LsdumpModule( 656 name='libgolden_anonymous_enum', 657 arch='arm64', 658 srcs=['integration/cpp/anonymous_enum/include/golden.h'], 659 version_script='', 660 export_include_dirs=['integration/cpp/anonymous_enum/include'], 661 linker_flags=['-output-format', 'Json'], 662 has_reference_dump=True, 663 ), 664 LsdumpModule( 665 name='libswap_anonymous_enum', 666 arch='arm64', 667 srcs=['integration/cpp/anonymous_enum/include/swap_enum.h'], 668 version_script='', 669 export_include_dirs=['integration/cpp/anonymous_enum/include'], 670 linker_flags=['-output-format', 'Json'], 671 ), 672 LsdumpModule( 673 name='libswap_anonymous_enum_field', 674 arch='arm64', 675 srcs=['integration/cpp/anonymous_enum/include/swap_enum_field.h'], 676 version_script='', 677 export_include_dirs=['integration/cpp/anonymous_enum/include'], 678 linker_flags=['-output-format', 'Json'], 679 ), 680 LsdumpModule( 681 name='libanonymous_enum_odr', 682 arch='arm64', 683 srcs=[ 684 'integration/cpp/anonymous_enum/include/golden.h', 685 'integration/cpp/anonymous_enum/include/include_golden.h', 686 ], 687 version_script='', 688 export_include_dirs=['integration/cpp/anonymous_enum/include'], 689 linker_flags=['-output-format', 'Json'], 690 has_reference_dump=True, 691 ), 692 LsdumpModule( 693 name='libmerge_multi_definitions', 694 arch='arm64', 695 srcs=[ 696 'integration/merge_multi_definitions/include/def1.h', 697 'integration/merge_multi_definitions/include/def2.h', 698 ], 699 version_script='integration/merge_multi_definitions/map.txt', 700 export_include_dirs=['integration/merge_multi_definitions/include'], 701 linker_flags=['-output-format', 'Json', '-sources-per-thread', '1'], 702 has_reference_dump=True, 703 ), 704 LsdumpModule( 705 name='libdiff_multi_definitions', 706 arch='arm64', 707 srcs=[ 708 'integration/merge_multi_definitions/include/def1.h', 709 'integration/merge_multi_definitions/include/link_to_def2.h', 710 ], 711 version_script='integration/merge_multi_definitions/map.txt', 712 export_include_dirs=['integration/merge_multi_definitions/include'], 713 linker_flags=['-output-format', 'Json', '-sources-per-thread', '1'], 714 has_reference_dump=True, 715 ), 716 LsdumpModule( 717 name='libstruct_extensions', 718 arch='arm64', 719 srcs=['integration/struct_extensions/include/base.h'], 720 version_script='integration/struct_extensions/map.txt', 721 export_include_dirs=['integration/struct_extensions/include'], 722 linker_flags=['-output-format', 'Json'], 723 has_reference_dump=True, 724 ), 725 LsdumpModule( 726 name='liballowed_struct_extensions', 727 arch='arm64', 728 srcs=['integration/struct_extensions/include/extensions.h'], 729 version_script='integration/struct_extensions/map.txt', 730 export_include_dirs=['integration/struct_extensions/include'], 731 linker_flags=['-output-format', 'Json'], 732 has_reference_dump=True, 733 ), 734 LsdumpModule( 735 name='libpass_by_value', 736 arch='arm64', 737 srcs=['integration/pass_by_value/include/base.h'], 738 version_script='integration/pass_by_value/map.txt', 739 export_include_dirs=['integration/pass_by_value/include'], 740 linker_flags=['-output-format', 'Json'], 741 has_reference_dump=True, 742 ), 743 LsdumpModule( 744 name='libparam_size_diff', 745 arch='arm64', 746 srcs=['integration/pass_by_value/include/param_size_diff.h'], 747 version_script='integration/pass_by_value/map.txt', 748 export_include_dirs=['integration/pass_by_value/include'], 749 linker_flags=['-output-format', 'Json'], 750 has_reference_dump=True, 751 ), 752 LsdumpModule( 753 name='libreturn_size_diff', 754 arch='arm64', 755 srcs=['integration/pass_by_value/include/return_size_diff.h'], 756 version_script='integration/pass_by_value/map.txt', 757 export_include_dirs=['integration/pass_by_value/include'], 758 linker_flags=['-output-format', 'Json'], 759 has_reference_dump=True, 760 ), 761 LsdumpModule( 762 name='libfunction_extensions', 763 arch='arm64', 764 srcs=['integration/function_extensions/include/base.h'], 765 version_script='integration/function_extensions/map.txt', 766 export_include_dirs=['integration/function_extensions/include'], 767 linker_flags=['-output-format', 'Json'], 768 has_reference_dump=True, 769 ), 770 LsdumpModule( 771 name='liballowed_function_extensions', 772 arch='arm64', 773 srcs=['integration/function_extensions/include/extensions.h'], 774 version_script='integration/function_extensions/map.txt', 775 export_include_dirs=['integration/function_extensions/include'], 776 linker_flags=['-output-format', 'Json'], 777 has_reference_dump=True, 778 ), 779 LsdumpModule( 780 name='libarray', 781 arch='arm64', 782 srcs=['integration/array/include/base.h'], 783 version_script='integration/array/map.txt', 784 export_include_dirs=['integration/array/include'], 785 linker_flags=['-output-format', 'Json'], 786 has_reference_dump=True, 787 ), 788 LsdumpModule( 789 name='libarray_diff', 790 arch='arm64', 791 srcs=['integration/array/include/diff.h'], 792 version_script='integration/array/map.txt', 793 export_include_dirs=['integration/array/include'], 794 linker_flags=['-output-format', 'Json'], 795 has_reference_dump=True, 796 ), 797 LsdumpModule( 798 name='libunion', 799 arch='arm64', 800 srcs=['integration/union/include/base.h'], 801 version_script='integration/union/map.txt', 802 export_include_dirs=['integration/union/include'], 803 linker_flags=['-output-format', 'Json'], 804 has_reference_dump=True, 805 ), 806 LsdumpModule( 807 name='libunion_diff', 808 arch='arm64', 809 srcs=['integration/union/include/diff.h'], 810 version_script='integration/union/map.txt', 811 export_include_dirs=['integration/union/include'], 812 linker_flags=['-output-format', 'Json'], 813 ), 814 LsdumpModule( 815 name='libenum', 816 arch='arm64', 817 srcs=['integration/enum/include/base.h'], 818 version_script='integration/enum/map.txt', 819 export_include_dirs=['integration/enum/include'], 820 dumper_flags=['-output-format', 'Json'], 821 linker_flags=['-input-format', 'Json', '-output-format', 'Json'], 822 has_reference_dump=True, 823 ), 824 LsdumpModule( 825 name='libbit_field', 826 arch='arm64', 827 srcs=['integration/bit_field/include/base.h'], 828 version_script='integration/bit_field/map.txt', 829 export_include_dirs=['integration/bit_field/include'], 830 dumper_flags=['-output-format', 'Json'], 831 linker_flags=['-input-format', 'Json', '-output-format', 'Json'], 832 has_reference_dump=True, 833 ), 834 LsdumpModule( 835 name='libbit_field_diff', 836 arch='arm64', 837 srcs=['integration/bit_field/include/diff.h'], 838 version_script='integration/bit_field/map.txt', 839 export_include_dirs=['integration/bit_field/include'], 840 dumper_flags=['-output-format', 'Json'], 841 linker_flags=['-input-format', 'Json', '-output-format', 'Json'], 842 ), 843 LsdumpModule( 844 name='libavailability', 845 arch='arm64', 846 srcs=['integration/availability/include/base.h'], 847 version_script='integration/availability/map.txt', 848 export_include_dirs=['integration/availability/include'], 849 dumper_flags=['-output-format', 'Json'], 850 linker_flags=['-input-format', 'Json', '-output-format', 'Json'], 851 has_reference_dump=True, 852 ), 853 LsdumpModule( 854 name='libavailability_35', 855 arch='arm64', 856 srcs=['integration/availability/include/base.h'], 857 version_script='integration/availability/map.txt', 858 export_include_dirs=['integration/availability/include'], 859 dumper_flags=['-output-format', 'Json'], 860 linker_flags=['-input-format', 'Json', '-output-format', 'Json', 861 '-availability', '35'], 862 has_reference_dump=True, 863 ), 864] 865 866TEST_MODULES = {m.name: m for m in TEST_MODULES} 867