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:
Robert Yang 2013-04-27 05:32:07 -04:00 committed by Richard Purdie
parent 3dfbedbdde
commit c51e8b4532
2 changed files with 8 additions and 3 deletions

View File

@ -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)

View File

@ -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"""