package: Allow parallel processing of debug splitting

Adjust the code so that the splitting of debug symbols from files happens
in parallel. To to this we need to move some path handling code into the
main function and pass more parameters in.

(From OE-Core rev: 9f0c2ed5d44a16e8268ac521236c4752f930f26a)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2018-07-20 08:31:59 +00:00
parent 0e6a662ba2
commit bc6b668e60

View File

@@ -367,10 +367,12 @@ def append_source_info(file, sourcefile, d, fatal=True):
# of rpm's debugedit, which was writing them out that way, and the code elsewhere
# is still assuming that.
debuglistoutput = '\0'.join(debugsources) + '\0'
lf = bb.utils.lockfile(sourcefile + ".lock")
open(sourcefile, 'a').write(debuglistoutput)
bb.utils.unlockfile(lf)
def splitdebuginfo(file, debugfile, debugsrcdir, sourcefile, d):
def splitdebuginfo(file, dvar, debugdir, debuglibdir, debugappend, debugsrcdir, sourcefile, d):
# Function to split a single file into two components, one is the stripped
# target system binary, the other contains any debugging information. The
# two files are linked to reference each other.
@@ -379,6 +381,15 @@ def splitdebuginfo(file, debugfile, debugsrcdir, sourcefile, d):
import stat
src = file[len(dvar):]
dest = debuglibdir + os.path.dirname(src) + debugdir + "/" + os.path.basename(src) + debugappend
debugfile = dvar + dest
# Split the file...
bb.utils.mkdirhier(os.path.dirname(debugfile))
#bb.note("Split %s -> %s" % (file, debugfile))
# Only store off the hard link reference if we successfully split!
dvar = d.getVar('PKGD')
objcopy = d.getVar("OBJCOPY")
@@ -1046,16 +1057,7 @@ python split_and_strip_files () {
# First lets process debug splitting
#
if (d.getVar('INHIBIT_PACKAGE_DEBUG_SPLIT') != '1'):
for file in elffiles:
src = file[len(dvar):]
dest = debuglibdir + os.path.dirname(src) + debugdir + "/" + os.path.basename(src) + debugappend
fpath = dvar + dest
# Split the file...
bb.utils.mkdirhier(os.path.dirname(fpath))
#bb.note("Split %s -> %s" % (file, fpath))
# Only store off the hard link reference if we successfully split!
splitdebuginfo(file, fpath, debugsrcdir, sourcefile, d)
oe.utils.multiprocess_launch(splitdebuginfo, list(elffiles), d, extraargs=(dvar, debugdir, debuglibdir, debugappend, debugsrcdir, sourcefile, d))
if debugsrcdir and not targetos.startswith("mingw"):
for file in staticlibs: