sstate.bbclass: make hard links for staging files
Make hard links for staging files instead of copy to save the disk space (3G will be saved for a core-image-sato build), and it doesn't affect much on the build time. The following directories are affected: 1) The sysroot 2) The DEPLOY_DIR 3) The pkgdata [YOCTO #4372] (From OE-Core rev: 5853e0f482b22258c909268fe71673a29e31989b) Signed-off-by: Robert Yang <liezhi.yang@windriver.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
3dfbedbdde
commit
c51e8b4532
|
@ -198,7 +198,7 @@ def sstate_install(ss, d):
|
|||
# Run the actual file install
|
||||
for state in ss['dirs']:
|
||||
if os.path.exists(state[1]):
|
||||
oe.path.copytree(state[1], state[2])
|
||||
oe.path.copyhardlinktree(state[1], state[2])
|
||||
|
||||
for postinst in (d.getVar('SSTATEPOSTINSTFUNCS', True) or '').split():
|
||||
bb.build.exec_func(postinst, d)
|
||||
|
|
|
@ -85,13 +85,18 @@ def copytree(src, dst):
|
|||
check_output(cmd, shell=True, stderr=subprocess.STDOUT)
|
||||
|
||||
def copyhardlinktree(src, dst):
|
||||
""" Make the hard link when possible, otherwise copy. """
|
||||
bb.utils.mkdirhier(dst)
|
||||
src_bak = src
|
||||
if os.path.isdir(src):
|
||||
if not len(os.listdir(src)):
|
||||
return
|
||||
src = src + "/*"
|
||||
cmd = 'cp -al %s %s' % (src, dst)
|
||||
check_output(cmd, shell=True, stderr=subprocess.STDOUT)
|
||||
if (os.stat(src_bak).st_dev == os.stat(dst).st_dev):
|
||||
cmd = 'cp -afl %s %s' % (src, dst)
|
||||
check_output(cmd, shell=True, stderr=subprocess.STDOUT)
|
||||
else:
|
||||
copytree(src_bak, dst)
|
||||
|
||||
def remove(path, recurse=True):
|
||||
"""Equivalent to rm -f or rm -rf"""
|
||||
|
|
Loading…
Reference in New Issue