Split CROSS and KCROSS; x86-64 needs asm-i386 in addition to asm-x86_64;
some architectures need to reference their own asm-$(ARCH) by name.

diff --git a/MCONFIG b/MCONFIG
index a7b2cb1..c833499 100644
--- a/MCONFIG
+++ b/MCONFIG
@@ -3,6 +3,14 @@
 # Makefile configuration, without explicit rules
 #
 
+# CROSS is the prefix used for system tools like gcc, ld etc.
+CROSS   = 
+
+# KCROSS is the prefix we use for klibc installations.  This is usually
+# the same as CROSS, but may be different, e.g. to install an i386
+# cross-compilation suite on an x86-64 system, using the same gcc/binutils.
+KCROSS ?= $(CROSS)
+
 # Location for installation
 prefix      = /usr
 bindir      = $(prefix)/bin
@@ -22,7 +30,6 @@
 KRNLOBJ = $(SRCROOT)/linux
 
 ARCH    = $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
-CROSS   = 
 CC	= $(CROSS)gcc
 LD      = $(CROSS)ld
 KLIBSRC = $(SRCROOT)/klibc
diff --git a/Makefile b/Makefile
index eb8f555..6c0c472 100644
--- a/Makefile
+++ b/Makefile
@@ -17,6 +17,7 @@
 	rm -f $@
 	echo 'ARCH=$(ARCH)' >> $@
 	echo 'CROSS=$(CROSS)' >> $@
+	echo 'KCROSS=$(KCROSS)' >> $@
 	echo "CC=$(shell bash -c 'type -p $(CC)')" >> $@
 	echo "LD=$(shell bash -c 'type -p $(LD)')" >> $@
 	echo 'REQFLAGS=$(filter-out -I%,$(REQFLAGS))' >> $@
@@ -49,19 +50,20 @@
 	mkdir -p $(INSTALLROOT)$(mandir)/man1
 	mkdir -p $(INSTALLROOT)$(SHLIBDIR)
 	mkdir -p $(INSTALLROOT)$(INSTALLDIR)
-	-rm -rf $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)include
-	mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)include
-	mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)lib
-	mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)bin
-	set -xe ; for d in linux asm asm-generic ; do \
+	-rm -rf $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include
+	mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include
+	mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)lib
+	mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)bin
+	set -xe ; for d in linux asm-$(ARCH) asm-generic $(ASMARCH); do \
 	  mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)include/$$d ; \
-	  cp -rfL $(KRNLSRC)/include/$$d/.  $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)include/$$d/. ; \
-	  cp -rfL $(KRNLOBJ)/include/$$d/.  $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)include/$$d/. ; \
+	  cp -rfL $(KRNLSRC)/include/$$d/.  $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/$$d/. ; \
+	  cp -rfL $(KRNLOBJ)/include/$$d/.  $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/$$d/. ; \
 	  [ ! -d $(KRNLOBJ)/include2/$$d ] || \
-	    cp -rfL $(KRNLOBJ)/include2/$$d/. $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)include/$$d/. ; \
+	    cp -rfL $(KRNLOBJ)/include2/$$d/. $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/$$d/. ; \
 	done
-	cp -rf include/. $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)include/.
-	$(INSTALL_DATA) klcc.1 $(INSTALLROOT)$(mandir)/man1/$(CROSS)klcc.1
-	$(INSTALL_EXEC) $(CROSS)klcc $(INSTALLROOT)$(bindir)
+	cd $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include && ln -sf asm-$(ARCH) asm
+	cp -rf include/. $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/.
+	$(INSTALL_DATA) klcc.1 $(INSTALLROOT)$(mandir)/man1/$(KCROSS)klcc.1
+	$(INSTALL_EXEC) $(KCROSS)klcc $(INSTALLROOT)$(bindir)
 
 -include MCONFIG
diff --git a/klcc.in b/klcc.in
index 713843c..bdd03e7 100644
--- a/klcc.in
+++ b/klcc.in
@@ -1,19 +1,19 @@
 # -*- perl -*-
 
 # Standard includes
-@includes = ("-I${INSTALLDIR}/${CROSS}include/arch/${ARCH}",
-	     "-I${INSTALLDIR}/${CROSS}include/bits${BITSIZE}",
-	     "-I${INSTALLDIR}/${CROSS}include");
+@includes = ("-I${INSTALLDIR}/${KCROSS}include/arch/${ARCH}",
+	     "-I${INSTALLDIR}/${KCROSS}include/bits${BITSIZE}",
+	     "-I${INSTALLDIR}/${KCROSS}include");
 
 # Default optimization options (for compiles without -g)
 @optopt =  @OPTFLAGS;
 @goptopt = ('-O');
 
 # Options and libraries to pass to ld; shared versus static
-@staticopt = ("$INSTALLDIR/${CROSS}lib/crt0.o");
-@staticlib = ("$INSTALLDIR/${CROSS}lib/libc.a");
-@sharedopt = (@EMAIN, "$INSTALLDIR/${CROSS}lib/interp.o");
-@sharedlib = ('-R', "$INSTALLDIR/lib/${CROSS}libc.so");
+@staticopt = ("$INSTALLDIR/${KCROSS}lib/crt0.o");
+@staticlib = ("$INSTALLDIR/${KCROSS}lib/libc.a");
+@sharedopt = (@EMAIN, "$INSTALLDIR/${KCROSS}lib/interp.o");
+@sharedlib = ('-R', "$INSTALLDIR/${KCROSS}lib/libc.so");
 
 # Returns the language (-x option string) for a specific extension.
 sub filename2lang($) {
diff --git a/klibc/arch/x86_64/MCONFIG b/klibc/arch/x86_64/MCONFIG
index a2a2367..13b6e39 100644
--- a/klibc/arch/x86_64/MCONFIG
+++ b/klibc/arch/x86_64/MCONFIG
@@ -26,3 +26,6 @@
 # 2 MB - normal binaries start at 4 MB
 SHAREDFLAGS     = -Ttext 0x00200200
 
+# Additional asm- directories needed during installation
+ASMARCH = asm-i386
+