summaryrefslogtreecommitdiffstats
path: root/meta/classes/insane.bbclass
diff options
context:
space:
mode:
authorAlexander Kanavin <alex.kanavin@gmail.com>2022-02-06 22:53:11 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-02-08 14:20:18 +0000
commit18f165c9e8e21a1e1acc148464f885adcdfeeb12 (patch)
tree093317cabc8a6e29714f4dd2bc8562937c291588 /meta/classes/insane.bbclass
parent1dfdf2bb92270982682312e893f939e78ef7eb53 (diff)
downloadpoky-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/insane.bbclass')
-rw-r--r--meta/classes/insane.bbclass22
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
687def 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
688def package_qa_walk(warnfuncs, errorfuncs, package, d): 692def 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)