diff options
author | Nitin A Kamble <nitin.a.kamble@intel.com> | 2011-01-25 08:43:10 -0800 |
---|---|---|
committer | Richard Purdie <rpurdie@linux.intel.com> | 2011-02-09 22:45:47 +0000 |
commit | 068417289a4aeddc1cb18a7b102cd542ab283a92 (patch) | |
tree | 56728c9f3b93e73299c82de0def747f01880c1f8 /meta/classes/image-mklibs.bbclass | |
parent | cfc40419885c1049e1345f4fd03f183114192402 (diff) | |
download | poky-068417289a4aeddc1cb18a7b102cd542ab283a92.tar.gz |
image-mklibs.bbclass: add the library optimization functionality
If you want to enable the mklibs library size optimization for your image
then, edit the MKLIBS_OPTIMIZED_IMAGES line in the local.conf like this:
MKLIBS_OPTIMIZED_IMAGES ?= "poky-image-minimal your-own-image"
Also this will enable the mklibs library size optimization for all images.
MKLIBS_OPTIMIZED_IMAGES ?= "all"
on qemux86 machine this reduced the rootfs size of poky image-minimal
image from 7.9MB to 7.2MB. That is around 11% image foot print reduction.
That image had 38 elf executables. Generally the size optimization by
mklibs is reversely proportional to the number of elf executables in the
rootfs. So bigger images will see less optimization, and smaller images
will see large image size reductions.
Thanks to mark hatle for his help in implementation of this.
Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
Diffstat (limited to 'meta/classes/image-mklibs.bbclass')
-rw-r--r-- | meta/classes/image-mklibs.bbclass | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/meta/classes/image-mklibs.bbclass b/meta/classes/image-mklibs.bbclass new file mode 100644 index 0000000000..0e72b018c0 --- /dev/null +++ b/meta/classes/image-mklibs.bbclass | |||
@@ -0,0 +1,69 @@ | |||
1 | do_rootfs[depends] += "mklibs-native:do_populate_sysroot" | ||
2 | |||
3 | IMAGE_PREPROCESS_COMMAND += "mklibs_optimize_image; " | ||
4 | |||
5 | mklibs_optimize_image_doit() { | ||
6 | rm -rf ${WORKDIR}/mklibs | ||
7 | mkdir -p ${WORKDIR}/mklibs/dest | ||
8 | cd ${IMAGE_ROOTFS} | ||
9 | du -bs > ${WORKDIR}/mklibs/du.before.mklibs.txt | ||
10 | for i in `find .`; do file $i; done \ | ||
11 | | grep ELF \ | ||
12 | | grep "LSB executable" \ | ||
13 | | grep "dynamically linked" \ | ||
14 | | sed "s/:.*//" \ | ||
15 | | sed "s+^\./++" \ | ||
16 | > ${WORKDIR}/mklibs/executables.list | ||
17 | |||
18 | case ${TARGET_ARCH} in | ||
19 | powerpc | mips ) | ||
20 | dynamic_loader="/lib/ld.so.1" | ||
21 | ;; | ||
22 | x86_64) | ||
23 | dynamic_loader="/lib/ld-linux-x86-64.so.2" | ||
24 | ;; | ||
25 | i586 ) | ||
26 | dynamic_loader="/lib/ld-linux.so.2" | ||
27 | ;; | ||
28 | arm ) | ||
29 | dynamic_loader="/lib/ld-linux.so.3" | ||
30 | ;; | ||
31 | * ) | ||
32 | dynamic_loader="/unknown_dynamic_linker" | ||
33 | ;; | ||
34 | esac | ||
35 | |||
36 | mklibs -v \ | ||
37 | --ldlib ${dynamic_loader} \ | ||
38 | --sysroot ${PKG_CONFIG_SYSROOT_DIR} \ | ||
39 | --root ${IMAGE_ROOTFS} \ | ||
40 | --target `echo ${TARGET_PREFIX} | sed 's/-$//' ` \ | ||
41 | -d ${WORKDIR}/mklibs/dest \ | ||
42 | `cat ${WORKDIR}/mklibs/executables.list` | ||
43 | |||
44 | cd ${WORKDIR}/mklibs/dest | ||
45 | for i in * | ||
46 | do | ||
47 | cp $i `find ${IMAGE_ROOTFS} -name $i` | ||
48 | done | ||
49 | |||
50 | cd ${IMAGE_ROOTFS} | ||
51 | du -bs > ${WORKDIR}/mklibs/du.after.mklibs.txt | ||
52 | |||
53 | echo rootfs size before mklibs optimization: `cat ${WORKDIR}/mklibs/du.before.mklibs.txt` | ||
54 | echo rootfs size after mklibs optimization: `cat ${WORKDIR}/mklibs/du.after.mklibs.txt` | ||
55 | } | ||
56 | |||
57 | mklibs_optimize_image() { | ||
58 | for img in ${MKLIBS_OPTIMIZED_IMAGES} | ||
59 | do | ||
60 | if [ "${img}" == "${PN}" ] || [ "${img}" == "all" ] | ||
61 | then | ||
62 | mklibs_optimize_image_doit | ||
63 | break | ||
64 | fi | ||
65 | done | ||
66 | } | ||
67 | |||
68 | |||
69 | EXPORT_FUNCTIONS mklibs_optimize_image | ||