Use ccache to cache all compiles between builds.
Many python extensions are built from source each time an image is built. Repeating these is wasteful, so ccache is employed to eliminate that waste. A cache dir outside the chroot is used to speed up subsequent image builds. Change-Id: Ib73563ddbe5f3be7454bfc54ab91cedb559a1304
This commit is contained in:
parent
3464064a87
commit
f6cc6bb185
5 changed files with 15 additions and 0 deletions
5
elements/base/environment.d/10-ccache.bash
Normal file
5
elements/base/environment.d/10-ccache.bash
Normal file
|
@ -0,0 +1,5 @@
|
|||
# Put ccache in path for known compilers
|
||||
if ! [[ "$PATH" =~ "/usr/lib/ccache" ]] ; then
|
||||
export PATH=/usr/lib/ccache:$PATH
|
||||
fi
|
||||
export CCACHE_DIR=/tmp/ccache
|
2
elements/base/install.d/00-ccache
Executable file
2
elements/base/install.d/00-ccache
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/bin/bash
|
||||
install-packages ccache
|
|
@ -20,3 +20,4 @@ FS_TYPE=${FS_TYPE:-ext4}
|
|||
# Used to set the file extension only at this stage.
|
||||
IMAGE_TYPE=${IMAGE_TYPE:-qcow2}
|
||||
IMAGE_NAME=${IMAGE_NAME:-image}
|
||||
DIB_CCACHE_DIR=${DIB_CCACHE_DIR:-~/.cache/image-create/ccache}
|
||||
|
|
|
@ -20,6 +20,7 @@ function unmount_image () {
|
|||
sudo umount -f $TMP_BUILD_DIR/mnt/proc || true
|
||||
sudo umount -f $TMP_BUILD_DIR/mnt/dev || true
|
||||
sudo umount -f $TMP_BUILD_DIR/mnt/tmp/in_target.d || true
|
||||
sudo umount -f $TMP_BUILD_DIR/mnt/tmp/ccache || true
|
||||
# give it a second (ok really 5) to umount XXX - why? should instead track
|
||||
# the mount data / lsof etc.
|
||||
sleep 5
|
||||
|
@ -73,11 +74,16 @@ function run_d_in_target () {
|
|||
sudo mkdir $TMP_MOUNT_PATH/tmp/in_target.d
|
||||
sudo mount --bind ${TMP_HOOKS_PATH} $TMP_MOUNT_PATH/tmp/in_target.d
|
||||
sudo mount -o remount,ro,bind ${TMP_HOOKS_PATH} $TMP_MOUNT_PATH/tmp/in_target.d
|
||||
sudo mkdir -p $TMP_MOUNT_PATH/tmp/ccache
|
||||
mkdir -p $DIB_CCACHE_DIR
|
||||
sudo mount --bind $DIB_CCACHE_DIR $TMP_MOUNT_PATH/tmp/ccache
|
||||
check_break before-$1 run_in_target bash
|
||||
run_in_target dib-run-parts /tmp/in_target.d/$1.d
|
||||
check_break after-$1 run_in_target bash
|
||||
sudo umount -f $TMP_MOUNT_PATH/tmp/in_target.d
|
||||
sudo rmdir $TMP_MOUNT_PATH/tmp/in_target.d
|
||||
sudo umount -f $TMP_MOUNT_PATH/tmp/ccache || true
|
||||
sudo rmdir $TMP_MOUNT_PATH/tmp/ccache
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ ALL ALL=(root) NOPASSWD: /bin/mkdir -p /tmp/*/mnt/*
|
|||
ALL ALL=(root) NOPASSWD: /bin/mkdir /tmp/*/mnt/*
|
||||
ALL ALL=(root) NOPASSWD: /bin/mount --bind /dev /tmp/*/mnt/dev
|
||||
ALL ALL=(root) NOPASSWD: /bin/mount --bind /tmp/*/hooks /tmp/*/mnt/tmp/in_target.d
|
||||
ALL ALL=(root) NOPASSWD: /bin/mount --bind */.cache/image-create/ccache /tmp/*/mnt/tmp/ccache
|
||||
ALL ALL=(root) NOPASSWD: /bin/mount -o remount\,ro\,bind /tmp/*/hooks /tmp/*/mnt/tmp/in_target.d
|
||||
ALL ALL=(root) NOPASSWD: /bin/mount -t proc none /tmp/*/mnt/proc
|
||||
ALL ALL=(root) NOPASSWD: /bin/mount -t sysfs none /tmp/*/mnt/sys
|
||||
|
|
Loading…
Reference in a new issue