This is klibc, what is intended to be a minimalistic libc subset for
use with initramfs.  It is deliberately written for small size,
minimal entanglement, 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) In the source root directory (the directory above the one in which
   this file is found) create a symlink called "linux" pointing to a
   reasonably recent Linux kernel tree (2.4 or 2.6 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" (2.4) or "make prepare" (2.6).

b) If you're cross-compiling, you need to set KLIBCARCH to the
   appropriate architecture, and set CROSS_COMPILE to your toolchain
   prefix.

   IMPORTANT: if you're on a 64-bit machine with a 32-bit userland
   (ia64, mips64, ppc64 sparc64, s390x or x86_64), and you want to
   build the 32-bit version: you need to set KLIBCARCH to the 32-bit
   architecture as well as set up the linux/include/asm symlink to
   point to the 32-bit architecture.  Building the 32-bit architecture
   usually (but not always) produces smaller binaries, and is likely
   to be better tested.

   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 last known status of various architectures:

   alpha:	 Working
   arm-thumb:	 Untested
   arm:		 Working
   arm26:	 Not yet ported
   avr32:	 Not yet ported
   cris:	 Working
   h8300:	 Not yet ported
   i386:	 Working
   ia64:	 Working static, shared untested
   m32r:	 Untested
   m68k:	 Untested
   m68knommu:	 Not yet ported
   mips:	 Working
   mips64:	 Not yet ported
   parisc:	 Working
   parisc64:	 Not yet ported
   ppc:		 Working
   ppc64:	 Working
   s390:	 Working
   s390x:	 Working
   sh:		 Untested
   sh64:	 Not yet ported
   sparc:	 Working
   sparc64:	 Untested
   v850:	 Not yet ported
   x86-64:	 Working
   xtensa:	 Not yet ported

   Shared library support requires recent binutils on many
   architectures.

   Note that even the "working" 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 the klibc mailing list:

	http://www.zytor.com/mailman/listinfo/klibc

... for more info.

	-hpa
