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) 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
   cris:	 Working
   h8300:	 Not yet ported
   i386:	 Working
   ia64:	 Working
   m32r:	 Untested
   m68k:	 Not yet ported
   mips:	 Working
   mips64:	 Not yet ported
   parisc:	 Working
   parisc64:	 Not yet ported
   ppc:		 Working
   ppc64:	 Working
   s390:	 Working static, shared untested
   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
