diff options
| author | Alexander Kanavin <alex.kanavin@gmail.com> | 2022-02-06 22:53:11 +0100 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-02-08 14:20:18 +0000 |
| commit | 18f165c9e8e21a1e1acc148464f885adcdfeeb12 (patch) | |
| tree | 093317cabc8a6e29714f4dd2bc8562937c291588 /meta/classes | |
| parent | 1dfdf2bb92270982682312e893f939e78ef7eb53 (diff) | |
| download | poky-18f165c9e8e21a1e1acc148464f885adcdfeeb12.tar.gz | |
insane.bbclass: use multiprocessing for collecting 'objdump -p' output
This was prompted by ltp's unreasonably long package_qa times; it has
a massive amount of executables and insane runs objdump for all of
them, serially.
This reduces the time from 4 minutes to 1m20s on my machine.
(From OE-Core rev: fac984b99fdb46949879516cb87153860f402c75)
Signed-off-by: Alexander Kanavin <alex@linutronix.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes')
| -rw-r--r-- | meta/classes/insane.bbclass | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass index 11532ecd08..a13a947bcf 100644 --- a/meta/classes/insane.bbclass +++ b/meta/classes/insane.bbclass | |||
| @@ -684,6 +684,10 @@ def package_qa_recipe(warnfuncs, errorfuncs, pn, d): | |||
| 684 | 684 | ||
| 685 | return len(errors) == 0 | 685 | return len(errors) == 0 |
| 686 | 686 | ||
| 687 | def prepopulate_objdump_p(elf, d): | ||
| 688 | output = elf.run_objdump("-p", d) | ||
| 689 | return (elf.name, output) | ||
| 690 | |||
| 687 | # Walk over all files in a directory and call func | 691 | # Walk over all files in a directory and call func |
| 688 | def package_qa_walk(warnfuncs, errorfuncs, package, d): | 692 | def package_qa_walk(warnfuncs, errorfuncs, package, d): |
| 689 | #if this will throw an exception, then fix the dict above | 693 | #if this will throw an exception, then fix the dict above |
| @@ -692,18 +696,32 @@ def package_qa_walk(warnfuncs, errorfuncs, package, d): | |||
| 692 | 696 | ||
| 693 | warnings = {} | 697 | warnings = {} |
| 694 | errors = {} | 698 | errors = {} |
| 699 | elves = {} | ||
| 695 | for path in pkgfiles[package]: | 700 | for path in pkgfiles[package]: |
| 696 | elf = None | 701 | elf = None |
| 697 | if os.path.isfile(path): | 702 | if os.path.isfile(path): |
| 698 | elf = oe.qa.ELFFile(path) | 703 | elf = oe.qa.ELFFile(path) |
| 699 | try: | 704 | try: |
| 700 | elf.open() | 705 | elf.open() |
| 706 | elf.close() | ||
| 701 | except oe.qa.NotELFFileError: | 707 | except oe.qa.NotELFFileError: |
| 702 | elf = None | 708 | elf = None |
| 709 | if elf: | ||
| 710 | elves[path] = elf | ||
| 711 | |||
| 712 | results = oe.utils.multiprocess_launch(prepopulate_objdump_p, elves.values(), d, extraargs=(d,)) | ||
| 713 | for item in results: | ||
| 714 | elves[item[0]].set_objdump("-p", item[1]) | ||
| 715 | |||
| 716 | for path in pkgfiles[package]: | ||
| 717 | if path in elves: | ||
| 718 | elves[path].open() | ||
| 703 | for func in warnfuncs: | 719 | for func in warnfuncs: |
| 704 | func(path, package, d, elf, warnings) | 720 | func(path, package, d, elves.get(path), warnings) |
| 705 | for func in errorfuncs: | 721 | for func in errorfuncs: |
| 706 | func(path, package, d, elf, errors) | 722 | func(path, package, d, elves.get(path), errors) |
| 723 | if path in elves: | ||
| 724 | elves[path].close() | ||
| 707 | 725 | ||
| 708 | for w in warnings: | 726 | for w in warnings: |
| 709 | oe.qa.handle_error(w, warnings[w], d) | 727 | oe.qa.handle_error(w, warnings[w], d) |
