From 33fc8a1cc2854a225d5da0174efc8eb6325c2f3a Mon Sep 17 00:00:00 2001 From: woglinde Date: Tue, 3 Feb 2009 13:50:02 +0100 Subject: dietlibc: introduce dietlibc to openembedded --- classes/dietlibc.bbclass | 30 +++++++++ conf/checksums.ini | 4 ++ packages/dietlibc/dietlibc_0.31.bb | 47 ++++++++++++++ packages/dietlibc/files/ai_addrconfig.patch | 13 ++++ packages/dietlibc/files/ccache.patch | 74 ++++++++++++++++++++++ packages/dietlibc/files/ceil.patch | 97 +++++++++++++++++++++++++++++ 6 files changed, 265 insertions(+) create mode 100644 classes/dietlibc.bbclass create mode 100644 packages/dietlibc/dietlibc_0.31.bb create mode 100644 packages/dietlibc/files/ai_addrconfig.patch create mode 100644 packages/dietlibc/files/ccache.patch create mode 100644 packages/dietlibc/files/ceil.patch diff --git a/classes/dietlibc.bbclass b/classes/dietlibc.bbclass new file mode 100644 index 0000000000..7c7b5fec81 --- /dev/null +++ b/classes/dietlibc.bbclass @@ -0,0 +1,30 @@ +DEPENDS =+ "dietlibc" + +def dietlibc_after_parse(d): + import bb + # Remove the NLS + cfg = oe_filter_out('--(dis|en)able-nls', bb.data.getVar('EXTRA_OECONF', d, 1) or "", d) + # Remove shared and static and set it right + cfg += " --disable-nls --disbale-shared --enable-static" + bb.data.setVar('EXTRA_OECONF', cfg, d) + cfg = bb.data.getVar('EXTRA_OEMAKE', d, 1) or "" + cfg = oe_filter_out("\'CC=", bb.data.getVar('EXTRA_OEMAKE', d, 1) or "", d) + cfgtmp = "\'CC=diet ${CCACHE}" + cfgtmp += cfg + bb.data.setVar('EXTRA_OEMAKE', cfgtmp, d) + +python () { + dietlibc_after_parse(d) +} + +set_dietlibc_env () { + export CC="diet ${CC}" +} + +do_compile_prepend() { + set_dietlibc_env +} + +do_configure_prepend() { + set_dietlibc_env +} diff --git a/conf/checksums.ini b/conf/checksums.ini index c9d42b0dae..a486727fa8 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -4098,6 +4098,10 @@ sha256=31e8e536f5efd7d7d1d5f4e4458b42aa9cd7910acf3da933cb7fa3507cf7f752 md5=1fd89c902006271f00a774cc3183c15d sha256=dcc1809e8477b95317a7ff503cdd8b6d3f85b8d83a3245252ff47cf631523620 +[http://kernel.org/pub/linux/libs/dietlibc/dietlibc-0.31.tar.bz2] +md5=acb98d469ee932d902fdf6de07802b7c +sha256=99613d6a67f747f52e4184c613f7cba5cbb76af237c9acd04742e3ca24cf56cd + [ftp://source.mvista.com/pub/xscale/pxa/diff-2.4.18-rmk7-pxa3.gz] md5=249c7a63a506d302c96be26517a70298 sha256=ca569dfa1e5cfd2f4134f3f61f667bcfab5e15c7d43c8a6e835d384ac5b31a07 diff --git a/packages/dietlibc/dietlibc_0.31.bb b/packages/dietlibc/dietlibc_0.31.bb new file mode 100644 index 0000000000..7720588b60 --- /dev/null +++ b/packages/dietlibc/dietlibc_0.31.bb @@ -0,0 +1,47 @@ +SECTION = "libs" +DESCRIPTION = "The diet libc is a libc that is optimized for small size. \ +It can be used to create small statically linked binaries" +LICENSE = "GPLv2" + +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/dietlibc/dietlibc-${PV}.tar.bz2 \ + file://ccache.patch;patch=1 \ + file://ceil.patch;patch=1 \ + file://ai_addrconfig.patch;patch=1 \ + " + +#otherwise the whole run scripts got broken +do_configure () { + echo "moo" > /dev/null 2>&1 +} + +do_compile () { + oe_runmake all CC="${BUILD_CC}" CFLAGS="${BUILD_CFLAGS}" prefix=${STAGING_DIR_TARGET}/lib/dietlibc + oe_runmake all ARCH="${TARGET_ARCH}" CROSS=" " prefix=${STAGING_DIR_TARGET}/lib/dietlibc +} + +#no packages needed, all binaries will be compiled with -static +PACKAGES = " " + +#otherwise the whole run scripts got broken +do_install () { + echo "moo" > /dev/null 2>&1 +} + +do_stage () { + DIETLIBC_BUILD_ARCH=`echo ${BUILD_ARCH} | sed -e s'/.86/386/'` + DIETLIBC_TARGET_ARCH=`echo ${TARGET_ARCH} | sed -e s'/.86/386/'` + rm -rf ${STAGING_DIR_TARGET}/lib/dietlibc || true + rm ${CROSS_DIR}/bin/diet || true + install -d ${STAGING_DIR_TARGET}/lib/dietlibc/lib-${DIETLIBC_TARGET_ARCH} + install -d ${STAGING_DIR_TARGET}/lib/dietlibc/include + for i in `find include -name \*.h`; do install -m 644 -D $i ${STAGING_DIR_TARGET}/lib/dietlibc/$i; done + + install -m755 bin-${DIETLIBC_BUILD_ARCH}/diet-i ${CROSS_DIR}/bin/diet + + cd bin-${DIETLIBC_TARGET_ARCH} + install -m 644 start.o libm.a libpthread.a librpc.a \ + liblatin1.a libcompat.a libcrypt.a \ + ${STAGING_DIR_TARGET}/lib/dietlibc/lib-${DIETLIBC_TARGET_ARCH} + install -m 644 dietlibc.a ${STAGING_DIR_TARGET}/lib/dietlibc/lib-${DIETLIBC_TARGET_ARCH}/libc.a +} + diff --git a/packages/dietlibc/files/ai_addrconfig.patch b/packages/dietlibc/files/ai_addrconfig.patch new file mode 100644 index 0000000000..5687e9f0f4 --- /dev/null +++ b/packages/dietlibc/files/ai_addrconfig.patch @@ -0,0 +1,13 @@ +Index: dietlibc-0.31/include/sys/socket.h +=================================================================== +--- dietlibc-0.31.orig/include/sys/socket.h 2009-02-03 13:39:38.475445568 +0100 ++++ dietlibc-0.31/include/sys/socket.h 2009-02-03 13:39:55.742105983 +0100 +@@ -439,6 +439,8 @@ + #define EAI_AGAIN -10 + #define EAI_SYSTEM -11 + ++#define AI_ADDRCONFIG 0 ++ + #define AI_NUMERICHOST 1 + #define AI_CANONNAME 2 + #define AI_PASSIVE 4 diff --git a/packages/dietlibc/files/ccache.patch b/packages/dietlibc/files/ccache.patch new file mode 100644 index 0000000000..f6d72f5370 --- /dev/null +++ b/packages/dietlibc/files/ccache.patch @@ -0,0 +1,74 @@ +Index: dietlibc-0.31/diet.c +=================================================================== +--- dietlibc-0.31.orig/diet.c 2006-08-27 15:49:00.000000000 +0200 ++++ dietlibc-0.31/diet.c 2009-01-31 22:56:06.828080683 +0100 +@@ -127,7 +127,12 @@ + } + } + { +- char *cc=argv[1]; ++ char *cc; ++ if (!strcmp(argv[1],"ccache")) { ++ cc=argv[2]; ++ } else { ++ cc=argv[1]; ++ } + char *tmp=strchr(cc,0)-2; + char *tmp2,*tmp3; + if (tmp90) error("platform name too long!\n"); + shortplatform=platform+len; +- memmove(shortplatform,argv[1],(size_t)(tmp2-cc)); ++ memmove(shortplatform,cc,(size_t)(tmp2-cc)); + platform[tmp2-cc+len]=0; + if (shortplatform[0]=='i' && shortplatform[2]=='8' && shortplatform[3]=='6') shortplatform[1]='3'; + } else { +@@ -285,6 +290,9 @@ + + dest=newargv; + *dest++=argv[1]; ++ if (strcmp(argv[1],"ccache") == 0) { ++ *dest++=argv[2]; ++ } + if (argv[2]) { + if (!strcmp(argv[2],"-V")) { + *dest++=argv[2]; +@@ -294,9 +302,9 @@ + } else if (!memcmp(argv[2],"-V",2)) { + *dest++=argv[2]; + ++argv; +- --argc; + } + } ++ + #ifndef __DYN_LIB + if (_link) { *dest++=(char*)nostdlib; *dest++=dashstatic; *dest++=dashL; } + #else +@@ -314,7 +322,15 @@ + #ifdef WANT_DYNAMIC + if (_link) { *dest++=d; } + #endif +- for (i=2; i ++ ++typedef union { ++ double value; ++ struct { ++ unsigned int lsw; ++ unsigned int msw; ++ } parts; ++} ieee_double_shape_type; ++ ++/* Get two 32 bit ints from a double. */ ++ ++#define EXTRACT_WORDS(ix0,ix1,d) \ ++do { \ ++ ieee_double_shape_type ew_u; \ ++ ew_u.value = (d); \ ++ (ix0) = ew_u.parts.msw; \ ++ (ix1) = ew_u.parts.lsw; \ ++} while (0) ++ ++#define INSERT_WORDS(d,ix0,ix1) \ ++do { \ ++ ieee_double_shape_type iw_u; \ ++ iw_u.parts.msw = (ix0); \ ++ iw_u.parts.lsw = (ix1); \ ++ (d) = iw_u.value; \ ++} while (0) ++ ++static const double huge = 1.0e300; ++ ++double ceil(double x) ++{ ++ int i0,i1,j0; ++ unsigned int i,j; ++ EXTRACT_WORDS(i0,i1,x); ++ j0 = ((i0>>20)&0x7ff)-0x3ff; ++ if(j0<20) { ++ if(j0<0) { /* raise inexact if x != 0 */ ++ if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */ ++ if(i0<0) {i0=0x80000000;i1=0;} ++ else if((i0|i1)!=0) { i0=0x3ff00000;i1=0;} ++ } ++ } else { ++ i = (0x000fffff)>>j0; ++ if(((i0&i)|i1)==0) return x; /* x is integral */ ++ if(huge+x>0.0) { /* raise inexact flag */ ++ if(i0>0) i0 += (0x00100000)>>j0; ++ i0 &= (~i); i1=0; ++ } ++ } ++ } else if (j0>51) { ++ if(j0==0x400) return x+x; /* inf or NaN */ ++ else return x; /* x is integral */ ++ } else { ++ i = ((unsigned int)(0xffffffff))>>(j0-20); ++ if((i1&i)==0) return x; /* x is integral */ ++ if(huge+x>0.0) { /* raise inexact flag */ ++ if(i0>0) { ++ if(j0==20) i0+=1; ++ else { ++ j = i1 + (1<<(52-j0)); ++ if(j