Perl changes to make kbuild integration easier.

diff --git a/klibc/Makefile b/klibc/Makefile
index c412a9f..181a226 100644
--- a/klibc/Makefile
+++ b/klibc/Makefile
@@ -141,7 +141,9 @@
 syscalls.dir: SYSCALLS.i syscalls.pl arch/$(ARCH)/sysstub.ph syscommon.h syscalls.nrs
 	rm -rf syscalls
 	mkdir syscalls
-	$(PERL) syscalls.pl SYSCALLS.i $(ARCH) $(BITSIZE) syscalls.nrs ../include/klibc/havesyscall.h
+	$(PERL) syscalls.pl SYSCALLS.i arch/$(ARCH)/sysstub.ph $(ARCH) \
+		$(BITSIZE) syscalls.nrs \
+		syscalls ../include/klibc/havesyscall.h
 	touch $@
 
 ../include/klibc/havesyscall.h: syscalls.dir
@@ -150,7 +152,7 @@
 socketcalls.dir: SOCKETCALLS.def socketcalls.pl socketcommon.h
 	rm -rf socketcalls
 	mkdir socketcalls
-	$(PERL) socketcalls.pl SOCKETCALLS.def $(ARCH)
+	$(PERL) socketcalls.pl SOCKETCALLS.def $(ARCH) socketcalls
 	touch $@
 
 %/static.obj: %.dir
diff --git a/klibc/arch/alpha/sysstub.ph b/klibc/arch/alpha/sysstub.ph
index a24b6c0..08b97e8 100644
--- a/klibc/arch/alpha/sysstub.ph
+++ b/klibc/arch/alpha/sysstub.ph
@@ -12,13 +12,13 @@
 # A few system calls are dual-return with the second return value in
 # r20 (a4).
 
-sub make_sysstub($$$$@) {
-    my($fname, $type, $sname, $stype, @args) = @_;
+sub make_sysstub($$$$$@) {
+    my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
 
     $stype = $stype || 'common';
     $stype = 'common' if ( $stype eq 'dual0' );
 
-    open(OUT, '>', "syscalls/${fname}.S");
+    open(OUT, '>', "${outputdir}/${fname}.S");
     print OUT "#include <asm/unistd.h>\n";
     print OUT "#include <machine/asm.h>\n";
     print OUT "\n";
diff --git a/klibc/arch/arm/sysstub.ph b/klibc/arch/arm/sysstub.ph
index bf953cc..256ea3d 100644
--- a/klibc/arch/arm/sysstub.ph
+++ b/klibc/arch/arm/sysstub.ph
@@ -6,10 +6,10 @@
 #
 
 
-sub make_sysstub($$$$@) {
-    my($fname, $type, $sname, $stype, @args) = @_;
+sub make_sysstub($$$$$@) {
+    my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
 
-    open(OUT, '>', "syscalls/${fname}.S");
+    open(OUT, '>', "${outputdir}/${fname}.S");
     print  OUT "#include <asm/unistd.h>\n";
 	
     print  OUT "\t.text\n";
diff --git a/klibc/arch/cris/sysstub.ph b/klibc/arch/cris/sysstub.ph
index 6c894f6..182ad73 100644
--- a/klibc/arch/cris/sysstub.ph
+++ b/klibc/arch/cris/sysstub.ph
@@ -5,10 +5,10 @@
 # Script to generate system call stubs
 #
 
-sub make_sysstub($$$$@) {
-    my($fname, $type, $sname, $stype, @args) = @_;
+sub make_sysstub($$$$$@) {
+    my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
 
-    open(OUT, '>', "syscalls/${fname}.S");
+    open(OUT, '>', "${outputdir}/${fname}.S");
     print OUT "#include <asm/unistd.h>\n";
     print OUT "\n";
     print OUT "\t.text\n";
diff --git a/klibc/arch/i386/sysstub.ph b/klibc/arch/i386/sysstub.ph
index 1ba7f36..e2649e2 100644
--- a/klibc/arch/i386/sysstub.ph
+++ b/klibc/arch/i386/sysstub.ph
@@ -5,10 +5,10 @@
 # Script to generate system call stubs
 #
 
-sub make_sysstub($$$$@) {
-    my($fname, $type, $sname, $stype, @args) = @_;
+sub make_sysstub($$$$$@) {
+    my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
 
-    open(OUT, '>', "syscalls/${fname}.S");
+    open(OUT, '>', "${outputdir}/${fname}.S");
     print OUT "#include <asm/unistd.h>\n";
     print OUT "\n";
     print OUT "\t.type ${fname},\@function\n";
diff --git a/klibc/arch/ia64/sysstub.ph b/klibc/arch/ia64/sysstub.ph
index 34031a2..8e686c6 100644
--- a/klibc/arch/ia64/sysstub.ph
+++ b/klibc/arch/ia64/sysstub.ph
@@ -5,10 +5,10 @@
 # Script to generate system call stubs
 #
 
-sub make_sysstub($$$$@) {
-    my($fname, $type, $sname, $stype, @args) = @_;
+sub make_sysstub($$$$$@) {
+    my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
 
-    open(OUT, '>', "syscalls/${fname}.S");
+    open(OUT, '>', "${outputdir}/${fname}.S");
     print OUT "#include <asm/unistd.h>\n";
     print OUT "\n";
     print OUT "\t.text\n";
diff --git a/klibc/arch/m32r/sysstub.ph b/klibc/arch/m32r/sysstub.ph
index 3813ea4..98dfb9d 100644
--- a/klibc/arch/m32r/sysstub.ph
+++ b/klibc/arch/m32r/sysstub.ph
@@ -5,10 +5,10 @@
 # Script to generate system call stubs
 #
 
-sub make_sysstub($$$$@) {
-    my($fname, $type, $sname, $stype, @args) = @_;
+sub make_sysstub($$$$$@) {
+    my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
 
-    open(OUT, '>', "syscalls/${fname}.S");
+    open(OUT, '>', "${outputdir}/${fname}.S");
     print OUT "#include <asm/unistd.h>\n";
     print OUT "\n";
     print OUT "\t.text\n";
diff --git a/klibc/arch/mips/sysstub.ph b/klibc/arch/mips/sysstub.ph
index abe599c..a71d5d0 100644
--- a/klibc/arch/mips/sysstub.ph
+++ b/klibc/arch/mips/sysstub.ph
@@ -9,11 +9,11 @@
 # system call number in r0 (v0), return an error value in r19 (a3) as
 # well as the return value in r0 (v0).
 
-sub make_sysstub($$$$@) {
-    my($fname, $type, $sname, $stype, @args) = @_;
+sub make_sysstub($$$$$@) {
+    my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
 
     $stype = $stype || 'common';
-    open(OUT, '>', "syscalls/${fname}.S");
+    open(OUT, '>', "${outputdir}/${fname}.S");
     print OUT "#include <asm/asm.h>\n";
     print OUT "#include <asm/regdef.h>\n";
     print OUT "#include <asm/unistd.h>\n";
diff --git a/klibc/arch/parisc/sysstub.ph b/klibc/arch/parisc/sysstub.ph
index 63b5e17..e2196ac 100644
--- a/klibc/arch/parisc/sysstub.ph
+++ b/klibc/arch/parisc/sysstub.ph
@@ -5,10 +5,10 @@
 # Script to generate system call stubs
 #
 
-sub make_sysstub($$$$@) {
-    my($fname, $type, $sname, $stype, @args) = @_;
+sub make_sysstub($$$$$@) {
+    my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
 
-    open(OUT, '>', "syscalls/${fname}.S");
+    open(OUT, '>', "${outputdir}/${fname}.S");
     print OUT "#include <asm/unistd.h>\n";
     print OUT "\n";
     print OUT "\t.text\n";
diff --git a/klibc/arch/ppc/sysstub.ph b/klibc/arch/ppc/sysstub.ph
index 542ab55..3b3916c 100644
--- a/klibc/arch/ppc/sysstub.ph
+++ b/klibc/arch/ppc/sysstub.ph
@@ -5,10 +5,10 @@
 # Script to generate system call stubs
 #
 
-sub make_sysstub($$$$@) {
-    my($fname, $type, $sname, $stype, @args) = @_;
+sub make_sysstub($$$$$@) {
+    my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
 
-    open(OUT, '>', "syscalls/${fname}.S");
+    open(OUT, '>', "${outputdir}/${fname}.S");
     print OUT "#include <asm/unistd.h>\n";
     print OUT "\n";
     print OUT "\t.type ${fname},\@function\n";
diff --git a/klibc/arch/ppc64/sysstub.ph b/klibc/arch/ppc64/sysstub.ph
index 0a37915..9ee9370 100644
--- a/klibc/arch/ppc64/sysstub.ph
+++ b/klibc/arch/ppc64/sysstub.ph
@@ -5,10 +5,10 @@
 # Script to generate system call stubs
 #
 
-sub make_sysstub($$$$@) {
-    my($fname, $type, $sname, $stype, @args) = @_;
+sub make_sysstub($$$$$@) {
+    my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
 
-    open(OUT, '>', "syscalls/${fname}.S");
+    open(OUT, '>', "${outputdir}/${fname}.S");
     print OUT "#include <asm/unistd.h>\n";
     print OUT "\n";
     print OUT "\t.globl ${fname}\n";
diff --git a/klibc/arch/s390/sysstub.ph b/klibc/arch/s390/sysstub.ph
index 3838a1f..35f40a0 100644
--- a/klibc/arch/s390/sysstub.ph
+++ b/klibc/arch/s390/sysstub.ph
@@ -5,10 +5,10 @@
 # Script to generate system call stubs
 #
 
-sub make_sysstub($$$$@) {
-    my($fname, $type, $sname, $stype, @args) = @_;
+sub make_sysstub($$$$$@) {
+    my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
 
-    open(OUT, '>', "syscalls/${fname}.S");
+    open(OUT, '>', "${outputdir}/${fname}.S");
     print OUT "#include <asm/unistd.h>\n";
     print OUT "\n";
     print OUT "\t.type ${fname},\@function\n";
diff --git a/klibc/arch/s390x/sysstub.ph b/klibc/arch/s390x/sysstub.ph
index 10a47f7..55c721b 100644
--- a/klibc/arch/s390x/sysstub.ph
+++ b/klibc/arch/s390x/sysstub.ph
@@ -5,10 +5,10 @@
 # Script to generate system call stubs
 #
 
-sub make_sysstub($$$$@) {
-    my($fname, $type, $sname, $stype, @args) = @_;
+sub make_sysstub($$$$$@) {
+    my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
 
-    open(OUT, '>', "syscalls/${fname}.S");
+    open(OUT, '>', "${outputdir}/${fname}.S");
     print OUT "#include <asm/unistd.h>\n";
     print OUT "\n";
     print OUT "\t.type ${fname},\@function\n";
diff --git a/klibc/arch/sh/sysstub.ph b/klibc/arch/sh/sysstub.ph
index add5d35..ce04b73 100644
--- a/klibc/arch/sh/sysstub.ph
+++ b/klibc/arch/sh/sysstub.ph
@@ -5,10 +5,10 @@
 # Script to generate system call stubs
 #
 
-sub make_sysstub($$$$@) {
-    my($fname, $type, $sname, $stype, @args) = @_;
+sub make_sysstub($$$$$@) {
+    my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
 
-    open(OUT, '>', "syscalls/${fname}.S");
+    open(OUT, '>', "${outputdir}/${fname}.S");
     print OUT "#include <asm/unistd.h>\n";
     print OUT "\n";
     print OUT "\t.section\t\".text.syscall\",\"ax\"\n";
diff --git a/klibc/arch/sparc/sysstub.ph b/klibc/arch/sparc/sysstub.ph
index baad9e3..d8cedb5 100644
--- a/klibc/arch/sparc/sysstub.ph
+++ b/klibc/arch/sparc/sysstub.ph
@@ -5,12 +5,12 @@
 # Script to generate system call stubs
 #
 
-sub make_sysstub($$$$@) {
-    my($fname, $type, $sname, $stype, @args) = @_;
+sub make_sysstub($$$$$@) {
+    my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
 
     $stype = $stype || 'common';
 
-    open(OUT, '>', "syscalls/${fname}.S");
+    open(OUT, '>', "${outputdir}/${fname}.S");
     print OUT "#include <asm/unistd.h>\n";
     print OUT "\n";
     print OUT "\t.type ${fname},\@function\n";
diff --git a/klibc/arch/sparc64/sysstub.ph b/klibc/arch/sparc64/sysstub.ph
index 2ef2c6b..deeb88c 100644
--- a/klibc/arch/sparc64/sysstub.ph
+++ b/klibc/arch/sparc64/sysstub.ph
@@ -5,12 +5,12 @@
 # Script to generate system call stubs
 #
 
-sub make_sysstub($$$$@) {
-    my($fname, $type, $sname, $stype, @args) = @_;
+sub make_sysstub($$$$$@) {
+    my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
 
     $stype = $stype || 'common';
 
-    open(OUT, '>', "syscalls/${fname}.S");
+    open(OUT, '>', "${outputdir}/${fname}.S");
     print OUT "#include <asm/unistd.h>\n";
     print OUT "\n";
     print OUT "\t.type ${fname},\@function\n";
diff --git a/klibc/arch/x86_64/sysstub.ph b/klibc/arch/x86_64/sysstub.ph
index 07af122..e2d797b 100644
--- a/klibc/arch/x86_64/sysstub.ph
+++ b/klibc/arch/x86_64/sysstub.ph
@@ -5,10 +5,10 @@
 # Script to generate system call stubs
 #
 
-sub make_sysstub($$$$@) {
-    my($fname, $type, $sname, $stype, @args) = @_;
+sub make_sysstub($$$$$@) {
+    my($outputdir, $fname, $type, $sname, $stype, @args) = @_;
 
-    open(OUT, '>', "syscalls/${fname}.S");
+    open(OUT, '>', "${outputdir}/${fname}.S");
     print OUT "#include <asm/unistd.h>\n";
     print OUT "\n";
     print OUT "\t.type ${fname},\@function\n";
diff --git a/klibc/socketcalls.pl b/klibc/socketcalls.pl
index fd82b2b..024483f 100644
--- a/klibc/socketcalls.pl
+++ b/klibc/socketcalls.pl
@@ -15,12 +15,13 @@
 	push(@args, $arg);
     }
 }
-($file, $arch) = @args;
+($file, $arch, $outputdir) = @args;
 
 if (!open(FILE, "< $file")) {
     die "$file: $!\n";
 }
 
+print "socketcall-objs := ";
 while ( defined($line = <FILE>) ) {
     chomp $line;
     $line =~ s/\s*[\#\;].*$//;	# Strip comments and trailing blanks
@@ -39,10 +40,11 @@
 	    push(@cargs, "$arg a".$i++);
 	}
 	$nargs = $i;
+	print " \\\n\tsocketcalls/${name}.o";
 
 	if ( $arch eq 'i386' ) {
-	    open(OUT, '>', "socketcalls/${name}.S")
-		or die "$0: Cannot open socketcalls/${name}.S\n";
+	    open(OUT, '>', "${outputdir}/${name}.S")
+		or die "$0: Cannot open ${outputdir}/${name}.S\n";
 
 	    print OUT "#include <sys/socketcalls.h>\n";
 	    print OUT "\n";
@@ -56,10 +58,10 @@
 	    print OUT "\t.size ${name},.-${name}\n";
 	    close(OUT);
 	} else {
-	    open(OUT, '>', "socketcalls/${name}.c")
-		or die "$0: Cannot open socketcalls/${name}.c\n";
+	    open(OUT, '>', "${outputdir}/${name}.c")
+		or die "$0: Cannot open ${outputdir}/${name}.c\n";
 
-	    print OUT "#include \"../socketcommon.h\"\n";
+	    print OUT "#include \"socketcommon.h\"\n";
 	    print OUT "\n";
 	    print OUT "#ifndef __NR_${name}\n\n";
 
@@ -82,3 +84,5 @@
 	die "$file:$.: Could not parse input\n";
     }
 }
+
+print "\n";
diff --git a/klibc/syscalls.pl b/klibc/syscalls.pl
index 1c48ce5..9cea630 100644
--- a/klibc/syscalls.pl
+++ b/klibc/syscalls.pl
@@ -18,13 +18,14 @@
 	push(@args, $arg);
     }
 }
-($file, $arch, $bits, $unistd, $havesyscall) = @args;
+($file, $sysstub, $arch, $bits, $unistd, $outputdir, $havesyscall) = @args;
 
-require "arch/$arch/sysstub.ph";
+require "$sysstub";
 
 if (!open(UNISTD, '<', $unistd)) {
     die "$0: $unistd: $!\n";
 }
+
 while ( defined($line = <UNISTD>) ) {
     chomp $line;
 
@@ -46,6 +47,8 @@
     die "$0: $file: $!\n";
 }
 
+print "syscall-objs := ";
+
 while ( defined($line = <FILE>) ) {
     chomp $line;
     $line =~ s/\s*(|[\#;].*)$//; # Strip comments and trailing blanks
@@ -104,11 +107,14 @@
 	@args = split(/\s*\,\s*/, $argv);
 
 	print HAVESYS "#define _KLIBC_HAVE_SYSCALL_${fname} ${sname}\n";
-	make_sysstub($fname, $type, $sname, $stype, @args);
+	print " \\\n\tsyscalls/${fname}.o";
+	make_sysstub($outputdir, $fname, $type, $sname, $stype, @args);
     } else {
 	die "$file:$.: Could not parse input: \"$line\"\n";
     }
 }
 
+print "\n";
+
 print HAVESYS "\n#endif\n";
 close(HAVESYS);