This is klibc, what is intended to be a minimalistic libc subset for
use with initramfs.  It is deliberately written for small size,
minimal entaglement and portability, not speed.  It is definitely a
work in progress, and a lot of things are still missing.


The build procedure is not very polished yet, but it should work like
this:

a) Create a symlink called "linux" pointing to a reasonably recent
   Linux kernel tree (2.4 or 2.5 should be OK.)  This tree must have
   the include/asm symlink set up for the architecture you're
   compiling for, and include/linux/autoconf.h must exist.  The
   easiest way to make sure of all of these is to do a "make config"
   or any of its variants on the kernel tree is question, followed by
   a "make dep".

b) If you're cross-compiling, change ARCH in the main MCONFIG file to
   the appropriate architecture, and set CROSS to your toolchain
   prefix.

   IMPORTANT: if you're on a 64-bit machine with a 32-bit userland
   (such as most sparc or mips machines), and you want to build the
   32-bit version (usually, but not always smaller); you need to set
   ARCH to the 32-bit architecture as well as set up the
   linux/include/asm symlink to point to the 32-bit architecture.

   If you are on ARM, and want to build a thumb version of the library
   (this is supported), change OPTFLAGS in arch/arm/MCONFIG to build
   thumb code.

   The following is the status of various architectures:

   Known to work:	arm alpha i386 ppc sparc sparc64
   Missing setjmp:	s390 s390x ppc64
   May or may not work:	x86_64
   Need porting work:	cris ia64 m68k mips64 parisc sh

   Note that even the "known to work" ones likely have bugs.  Please
   report them if you run into them.

c) Type "make" and pray...

d) Try the test programs in the tests/ directory.  They should run...

Contact me at <hpa@zytor.com> for more info.

	-hpa
