commit ae5ef00bfb5f7fff6873dcfa556f5dcc11ebf9bd
parent 0e027fffa4904f7d186948f5a39ba9cc82c1977f
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Thu, 7 Oct 2021 18:56:22 +0200
build: Split proto files
Until this moment it was hard to install architectures
different than amd64. Having them in the proto file
generated errors when they were not compiled, forcing
to compile all the architectures always. This is a problem
in this stage because we need external toolchains for
the libc, incrementing the list of external dependencies.
This modification splits the common part and the part that
depends of the toolchain used. It only adds the proto for
amd64, that is the most common architecture used by the
scc developers, but it provides scripts to make easy to
update any proto file needed.
Diffstat:
9 files changed, 289 insertions(+), 190 deletions(-)
diff --git a/Makefile b/Makefile
@@ -10,51 +10,95 @@ DIRS =\
PROJECTDIR = .
include $(PROJECTDIR)/scripts/rules.mk
-PREFIX= /usr/local
+PREFIX= $(HOME)
NODEP = 1
all:
+@PREFIX=$(PREFIX) $(MAKE) `$(SCRIPTDIR)/config` toolchain
+@$(MAKE) `$(SCRIPTDIR)/config` `uname -m`
-x86_64 amd64: FORCE
+install:
+ $(SCRIPTDIR)/install $(PREFIX)
+ +@$(MAKE) install-`uname -m`
+
+uninstall:
+ $(SCRIPTDIR)/uninstall $(PREFIX)
+ +@$(MAKE) uninstall-`uname -m`
+
+#############################################################
+# x86_64 rules
+
+x86_64 amd64:
+@$(MAKE) `$(SCRIPTDIR)/config` CONF=amd64-linux libc libcrt
+@$(MAKE) `$(SCRIPTDIR)/config` CONF=amd64-openbsd libc libcrt
+@$(MAKE) `$(SCRIPTDIR)/config` CONF=amd64-netbsd libc libcrt
+@$(MAKE) `$(SCRIPTDIR)/config` CONF=amd64-dragonfly libc libcrt
+@$(MAKE) `$(SCRIPTDIR)/config` CONF=amd64-darwin libc libcrt
-i386: FORCE
+install-x86_64 install-amd64: amd64
+ $(SCRIPTDIR)/install -p $(SCRIPTDIR)/proto.amd64 $(PREFIX)
+
+uninstall-x86_64 uninstall-amd64:
+ $(SCRIPTDIR)/uninstall -p $(SCRIPTDIR)/proto.amd64 $(PREFIX)
+
+#############################################################
+# i386 rules
+
+i386:
+@$(MAKE) `$(SCRIPTDIR)/config` CONF=i386-linux libc libcrt
-ppc: FORCE
+install-i386: i386
+ $(SCRIPTDIR)/install -p $(SCRIPTDIR)/proto.i386 $(PREFIX)
+
+uninstall-i386:
+ $(SCRIPTDIR)/uninstall -p $(SCRIPTDIR)/proto.i386 $(PREFIX)
+
+#############################################################
+# ppc rules
+
+ppc:
+@$(MAKE) `$(SCRIPTDIR)/config` CONF=ppc-linux libc libcrt
-arm: FORCE
+install-ppc: ppc
+ $(SCRIPTDIR)/install -p $(SCRIPTDIR)/proto.ppc $(PREFIX)
+
+uninstall-ppc:
+ $(SCRIPTDIR)/uninstall -p $(SCRIPTDIR)/proto.ppc $(PREFIX)
+
+#############################################################
+# arm rules
+
+arm:
+@$(MAKE) `$(SCRIPTDIR)/config` CONF=arm-linux libc libcrt
-arm64: FORCE
+install-arm: arm
+ $(SCRIPTDIR)/install -p $(SCRIPTDIR)/proto.arm $(PREFIX)
+
+uninstall-arm:
+ $(SCRIPTDIR)/uninstall -p $(SCRIPTDIR)/proto.arm $(PREFIX)
+
+#############################################################
+# arm64 rules
+
+arm64:
+@$(MAKE) `$(SCRIPTDIR)/config` CONF=arm64-linux libc libcrt
-toolchain: dirs src
+install-arm64: arm64
+ $(SCRIPTDIR)/install -p $(SCRIPTDIR)/proto.arm64 $(PREFIX)
+uninstall-arm64:
+ $(SCRIPTDIR)/uninstall -p $(SCRIPTDIR)/proto.arm64 $(PREFIX)
+
+toolchain: dirs src
libc: dirs src/libc
libcrt: dirs src/libcrt
-
src: include/scc/scc
+tests: all
dirs: $(SCRIPTDIR)/libc-proto
xargs mkdir -p < $(SCRIPTDIR)/libc-proto
touch dirs
-install: all
- $(SCRIPTDIR)/install $(PREFIX)
-
-uninstall:
- $(SCRIPTDIR)/uninstall $(PREFIX)
-
clean:
xargs rm -rf < $(SCRIPTDIR)/libc-proto
rm -f dirs
-
-tests: all
diff --git a/scripts/install b/scripts/install
@@ -34,4 +34,4 @@ do
esac
chmod $perm $prefix/$name
-done < ${proto:-scripts/proto}
+done < ${proto:-scripts/proto.all}
diff --git a/scripts/mkproto b/scripts/mkproto
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+for dir
+do
+ find $dir |
+ while read i
+ do
+ if test -d $i
+ then
+ echo d 755 $i
+ elif test -x $i
+ then
+ echo f 755 $i
+ else
+ echo f 644 $i
+ fi
+ done
+done
diff --git a/scripts/proto b/scripts/proto
@@ -1,170 +0,0 @@
-d 755 lib
-d 755 lib/scc
-f 644 lib/scc/libmach.a
-f 644 lib/scc/libscc.a
-d 755 lib/scc/amd64-dragonfly
-f 644 lib/scc/amd64-dragonfly/libc.a
-f 644 lib/scc/amd64-dragonfly/crt.o
-f 644 lib/scc/amd64-dragonfly/libcrt.a
-d 755 lib/scc/amd64-darwin
-f 644 lib/scc/amd64-darwin/libc.a
-f 644 lib/scc/amd64-darwin/crt.o
-f 644 lib/scc/amd64-darwin/libcrt.a
-d 755 lib/scc/amd64-openbsd
-f 644 lib/scc/amd64-openbsd/libc.a
-f 644 lib/scc/amd64-openbsd/crt.o
-f 644 lib/scc/amd64-openbsd/libcrt.a
-d 755 lib/scc/amd64-netbsd
-f 644 lib/scc/amd64-netbsd/libc.a
-f 644 lib/scc/amd64-netbsd/crt.o
-f 644 lib/scc/amd64-netbsd/libcrt.a
-d 755 lib/scc/amd64-linux
-f 644 lib/scc/amd64-linux/libc.a
-f 644 lib/scc/amd64-linux/crt.o
-f 644 lib/scc/amd64-linux/libcrt.a
-d 755 bin
-f 755 bin/ld
-f 755 bin/cpp
-f 755 bin/cc
-f 755 bin/nm
-f 755 bin/objdump
-f 755 bin/addr2line
-f 755 bin/objcopy
-f 755 bin/strip
-f 755 bin/ranlib
-f 755 bin/size
-f 755 bin/ar
-d 755 include
-f 644 include/string.h
-f 644 include/wchar.h
-f 644 include/float.h
-d 755 include/scc
-d 755 include/scc/scc
-f 644 include/scc/scc/ar.h
-d 755 include/scc/scc/coff32
-f 644 include/scc/scc/coff32/linenum.h
-f 644 include/scc/scc/coff32/scnhdr.h
-f 644 include/scc/scc/coff32/filehdr.h
-f 644 include/scc/scc/coff32/aouthdr.h
-f 644 include/scc/scc/coff32/reloc.h
-f 644 include/scc/scc/coff32/syms.h
-f 644 include/scc/scc/scc.h
-f 644 include/scc/scc/mach.h
-f 644 include/limits.h
-f 644 include/wctype.h
-f 644 include/ctype.h
-f 644 include/assert.h
-f 644 include/stdarg.h
-f 644 include/stdlib.h
-f 644 include/signal.h
-f 644 include/math.h
-f 644 include/errno.h
-f 644 include/stdio.h
-f 644 include/stdbool.h
-f 644 include/locale.h
-f 644 include/stddef.h
-f 644 include/setjmp.h
-f 644 include/time.h
-f 644 include/stdint.h
-d 755 include/bits
-d 755 include/bits/darwin
-d 755 include/bits/darwin/sys
-f 644 include/bits/darwin/sys/cdefs.h
-f 644 include/bits/darwin/sys/signal.h
-f 644 include/bits/darwin/sys/errno.h
-f 644 include/bits/darwin/sys.h
-d 755 include/bits/linux
-d 755 include/bits/linux/sys
-f 644 include/bits/linux/sys/cdefs.h
-f 644 include/bits/linux/sys/signal.h
-f 644 include/bits/linux/sys/errno.h
-f 644 include/bits/linux/sys.h
-d 755 include/bits/openbsd
-d 755 include/bits/openbsd/sys
-f 644 include/bits/openbsd/sys/cdefs.h
-f 644 include/bits/openbsd/sys/signal.h
-f 644 include/bits/openbsd/sys/errno.h
-f 644 include/bits/openbsd/sys.h
-d 755 include/bits/dragonfly
-d 755 include/bits/dragonfly/sys
-f 644 include/bits/dragonfly/sys/cdefs.h
-f 644 include/bits/dragonfly/sys/signal.h
-f 644 include/bits/dragonfly/sys/errno.h
-f 644 include/bits/dragonfly/sys.h
-d 755 include/bits/arm
-d 755 include/bits/arm/arch
-f 644 include/bits/arm/arch/cdefs.h
-f 644 include/bits/arm/arch/string.h
-f 644 include/bits/arm/arch/limits.h
-f 644 include/bits/arm/arch/stdlib.h
-f 644 include/bits/arm/arch/stdio.h
-f 644 include/bits/arm/arch/setjmp.h
-f 644 include/bits/arm/arch/time.h
-f 644 include/bits/arm/arch/stdint.h
-d 755 include/bits/ppc
-d 755 include/bits/ppc/arch
-f 644 include/bits/ppc/arch/cdefs.h
-f 644 include/bits/ppc/arch/string.h
-f 644 include/bits/ppc/arch/limits.h
-f 644 include/bits/ppc/arch/stdlib.h
-f 644 include/bits/ppc/arch/stdio.h
-f 644 include/bits/ppc/arch/setjmp.h
-f 644 include/bits/ppc/arch/time.h
-f 644 include/bits/ppc/arch/stdint.h
-d 755 include/bits/z80
-d 755 include/bits/z80/arch
-f 644 include/bits/z80/arch/cdefs.h
-f 644 include/bits/z80/arch/string.h
-f 644 include/bits/z80/arch/limits.h
-f 644 include/bits/z80/arch/stdlib.h
-f 644 include/bits/z80/arch/stdio.h
-f 644 include/bits/z80/arch/time.h
-f 644 include/bits/z80/arch/stdint.h
-d 755 include/bits/arm64
-d 755 include/bits/arm64/arch
-f 644 include/bits/arm64/arch/cdefs.h
-f 644 include/bits/arm64/arch/string.h
-f 644 include/bits/arm64/arch/limits.h
-f 644 include/bits/arm64/arch/stdlib.h
-f 644 include/bits/arm64/arch/stdio.h
-f 644 include/bits/arm64/arch/setjmp.h
-f 644 include/bits/arm64/arch/time.h
-f 644 include/bits/arm64/arch/stdint.h
-d 755 include/bits/amd64
-d 755 include/bits/amd64/arch
-f 644 include/bits/amd64/arch/cdefs.h
-f 644 include/bits/amd64/arch/string.h
-f 644 include/bits/amd64/arch/limits.h
-f 644 include/bits/amd64/arch/stdlib.h
-f 644 include/bits/amd64/arch/stdio.h
-f 644 include/bits/amd64/arch/setjmp.h
-f 644 include/bits/amd64/arch/time.h
-f 644 include/bits/amd64/arch/stdint.h
-d 755 include/bits/netbsd
-d 755 include/bits/netbsd/sys
-f 644 include/bits/netbsd/sys/cdefs.h
-f 644 include/bits/netbsd/sys/signal.h
-f 644 include/bits/netbsd/sys/errno.h
-f 644 include/bits/netbsd/sys.h
-d 755 include/bits/i386
-d 755 include/bits/i386/arch
-f 644 include/bits/i386/arch/cdefs.h
-f 644 include/bits/i386/arch/string.h
-f 644 include/bits/i386/arch/limits.h
-f 644 include/bits/i386/arch/stdlib.h
-f 644 include/bits/i386/arch/stdio.h
-f 644 include/bits/i386/arch/time.h
-f 644 include/bits/i386/arch/stdint.h
-d 755 libexec
-d 755 libexec/scc
-f 755 libexec/scc/as-i386
-f 755 libexec/scc/as-i286
-f 755 libexec/scc/cc2-qbe_amd64-sysv
-f 755 libexec/scc/cc1
-f 755 libexec/scc/as-powerpc64
-f 755 libexec/scc/cc2-i386-sysv
-f 755 libexec/scc/as-powerpc
-f 755 libexec/scc/as-amd64
-f 755 libexec/scc/cc2-amd64-sysv
-f 755 libexec/scc/cc2-z80-scc
-f 755 libexec/scc/as-z80
diff --git a/scripts/proto.all b/scripts/proto.all
@@ -0,0 +1,171 @@
+d 755 bin
+f 755 bin/ld
+f 755 bin/cpp
+f 755 bin/cc
+f 755 bin/nm
+f 755 bin/objdump
+f 755 bin/addr2line
+f 755 bin/objcopy
+f 755 bin/strip
+f 755 bin/ranlib
+f 755 bin/size
+f 755 bin/ar
+d 755 libexec
+d 755 libexec/scc
+f 755 libexec/scc/as-i386
+f 755 libexec/scc/as-i286
+f 755 libexec/scc/cc2-qbe_amd64-sysv
+f 755 libexec/scc/as-powerpc64
+f 755 libexec/scc/cc2-i386-sysv
+f 755 libexec/scc/cc1
+f 755 libexec/scc/as-powerpc
+f 755 libexec/scc/cc2-qbe_arm64-sysv
+f 755 libexec/scc/as-amd64
+f 755 libexec/scc/cc2-amd64-sysv
+f 755 libexec/scc/cc2-z80-scc
+f 755 libexec/scc/as-z80
+d 755 include
+f 644 include/string.h
+f 644 include/wchar.h
+f 644 include/float.h
+f 644 include/iso646.h
+f 644 include/limits.h
+f 644 include/wctype.h
+f 644 include/ctype.h
+f 644 include/assert.h
+f 644 include/stdarg.h
+f 644 include/stdlib.h
+f 644 include/signal.h
+f 644 include/math.h
+f 644 include/errno.h
+f 644 include/stdio.h
+f 644 include/stdbool.h
+f 644 include/inttypes.h
+f 644 include/locale.h
+f 644 include/stddef.h
+f 644 include/setjmp.h
+f 644 include/time.h
+f 644 include/stdint.h
+d 755 include/bits
+d 755 include/bits/arm
+d 755 include/bits/arm/arch
+f 644 include/bits/arm/arch/string.h
+f 644 include/bits/arm/arch/limits.h
+f 644 include/bits/arm/arch/stdlib.h
+f 644 include/bits/arm/arch/setjmp.h
+f 644 include/bits/arm/arch/cdefs.h
+d 755 include/bits/darwin
+d 755 include/bits/darwin/sys
+f 644 include/bits/darwin/sys/stdlib.h
+f 644 include/bits/darwin/sys/signal.h
+f 644 include/bits/darwin/sys/errno.h
+f 644 include/bits/darwin/sys/stdio.h
+f 644 include/bits/darwin/sys/cdefs.h
+d 755 include/bits/darwin/amd64
+d 755 include/bits/darwin/amd64/arch
+f 644 include/bits/darwin/amd64/arch/sigaction.h
+f 644 include/bits/darwin/amd64/arch/time.h
+f 644 include/bits/darwin/amd64/arch/stdint.h
+f 644 include/bits/darwin/sys.h
+d 755 include/bits/linux
+d 755 include/bits/linux/arm
+d 755 include/bits/linux/arm/arch
+f 644 include/bits/linux/arm/arch/time.h
+f 644 include/bits/linux/arm/arch/stdint.h
+d 755 include/bits/linux/sys
+f 644 include/bits/linux/sys/stdlib.h
+f 644 include/bits/linux/sys/signal.h
+f 644 include/bits/linux/sys/errno.h
+f 644 include/bits/linux/sys/stdio.h
+f 644 include/bits/linux/sys/cdefs.h
+d 755 include/bits/linux/ppc
+d 755 include/bits/linux/ppc/arch
+f 644 include/bits/linux/ppc/arch/time.h
+f 644 include/bits/linux/ppc/arch/stdint.h
+d 755 include/bits/linux/arm64
+d 755 include/bits/linux/arm64/arch
+f 644 include/bits/linux/arm64/arch/time.h
+f 644 include/bits/linux/arm64/arch/stdint.h
+d 755 include/bits/linux/amd64
+d 755 include/bits/linux/amd64/arch
+f 644 include/bits/linux/amd64/arch/inttypes.h
+f 644 include/bits/linux/amd64/arch/sigaction.h
+f 644 include/bits/linux/amd64/arch/time.h
+f 644 include/bits/linux/amd64/arch/stdint.h
+f 644 include/bits/linux/sys.h
+d 755 include/bits/openbsd
+d 755 include/bits/openbsd/sys
+f 644 include/bits/openbsd/sys/stdlib.h
+f 644 include/bits/openbsd/sys/signal.h
+f 644 include/bits/openbsd/sys/errno.h
+f 644 include/bits/openbsd/sys/stdio.h
+f 644 include/bits/openbsd/sys/cdefs.h
+d 755 include/bits/openbsd/amd64
+d 755 include/bits/openbsd/amd64/arch
+f 644 include/bits/openbsd/amd64/arch/sigaction.h
+f 644 include/bits/openbsd/amd64/arch/time.h
+f 644 include/bits/openbsd/amd64/arch/stdint.h
+f 644 include/bits/openbsd/sys.h
+d 755 include/bits/dragonfly
+d 755 include/bits/dragonfly/sys
+f 644 include/bits/dragonfly/sys/stdlib.h
+f 644 include/bits/dragonfly/sys/signal.h
+f 644 include/bits/dragonfly/sys/errno.h
+f 644 include/bits/dragonfly/sys/stdio.h
+f 644 include/bits/dragonfly/sys/cdefs.h
+d 755 include/bits/dragonfly/amd64
+d 755 include/bits/dragonfly/amd64/arch
+f 644 include/bits/dragonfly/amd64/arch/sigaction.h
+f 644 include/bits/dragonfly/amd64/arch/time.h
+f 644 include/bits/dragonfly/amd64/arch/stdint.h
+f 644 include/bits/dragonfly/sys.h
+d 755 include/bits/ppc
+d 755 include/bits/ppc/arch
+f 644 include/bits/ppc/arch/string.h
+f 644 include/bits/ppc/arch/limits.h
+f 644 include/bits/ppc/arch/stdlib.h
+f 644 include/bits/ppc/arch/setjmp.h
+f 644 include/bits/ppc/arch/cdefs.h
+d 755 include/bits/z80
+d 755 include/bits/z80/arch
+f 644 include/bits/z80/arch/string.h
+f 644 include/bits/z80/arch/limits.h
+f 644 include/bits/z80/arch/stdlib.h
+f 644 include/bits/z80/arch/setjmp.h
+f 644 include/bits/z80/arch/stdint.h
+f 644 include/bits/z80/arch/cdefs.h
+d 755 include/bits/arm64
+d 755 include/bits/arm64/arch
+f 644 include/bits/arm64/arch/string.h
+f 644 include/bits/arm64/arch/limits.h
+f 644 include/bits/arm64/arch/stdlib.h
+f 644 include/bits/arm64/arch/setjmp.h
+f 644 include/bits/arm64/arch/cdefs.h
+d 755 include/bits/amd64
+d 755 include/bits/amd64/arch
+f 644 include/bits/amd64/arch/string.h
+f 644 include/bits/amd64/arch/limits.h
+f 644 include/bits/amd64/arch/stdlib.h
+f 644 include/bits/amd64/arch/setjmp.h
+f 644 include/bits/amd64/arch/cdefs.h
+d 755 include/bits/netbsd
+d 755 include/bits/netbsd/sys
+f 644 include/bits/netbsd/sys/stdlib.h
+f 644 include/bits/netbsd/sys/signal.h
+f 644 include/bits/netbsd/sys/errno.h
+f 644 include/bits/netbsd/sys/stdio.h
+f 644 include/bits/netbsd/sys/cdefs.h
+d 755 include/bits/netbsd/amd64
+d 755 include/bits/netbsd/amd64/arch
+f 644 include/bits/netbsd/amd64/arch/sigaction.h
+f 644 include/bits/netbsd/amd64/arch/time.h
+f 644 include/bits/netbsd/amd64/arch/stdint.h
+f 644 include/bits/netbsd/sys.h
+d 755 include/bits/i386
+d 755 include/bits/i386/arch
+f 644 include/bits/i386/arch/string.h
+f 644 include/bits/i386/arch/limits.h
+f 644 include/bits/i386/arch/stdlib.h
+f 644 include/bits/i386/arch/setjmp.h
+f 644 include/bits/i386/arch/stdint.h
+f 644 include/bits/i386/arch/cdefs.h
diff --git a/scripts/proto.amd64 b/scripts/proto.amd64
@@ -0,0 +1,22 @@
+d 755 lib
+d 755 lib/scc
+d 755 lib/scc/amd64-darwin
+f 644 lib/scc/amd64-darwin/libc.a
+f 644 lib/scc/amd64-darwin/crt.o
+f 644 lib/scc/amd64-darwin/libcrt.a
+d 755 lib/scc/amd64-dragonfly
+f 644 lib/scc/amd64-dragonfly/libc.a
+f 644 lib/scc/amd64-dragonfly/crt.o
+f 644 lib/scc/amd64-dragonfly/libcrt.a
+d 755 lib/scc/amd64-linux
+f 644 lib/scc/amd64-linux/libc.a
+f 644 lib/scc/amd64-linux/crt.o
+f 644 lib/scc/amd64-linux/libcrt.a
+d 755 lib/scc/amd64-netbsd
+f 644 lib/scc/amd64-netbsd/libc.a
+f 644 lib/scc/amd64-netbsd/crt.o
+f 644 lib/scc/amd64-netbsd/libcrt.a
+d 755 lib/scc/amd64-openbsd
+f 644 lib/scc/amd64-openbsd/libc.a
+f 644 lib/scc/amd64-openbsd/crt.o
+f 644 lib/scc/amd64-openbsd/libcrt.a
diff --git a/scripts/uninstall b/scripts/uninstall
@@ -17,11 +17,13 @@ do
done
prefix=${1?'prefix missed'}
+proto=${proto:-scripts/proto.all}
while read type perm name
do
case $type in
d)
+ echo $type $perm $name
continue
;;
f)
@@ -32,8 +34,8 @@ do
exit 1
;;
esac
-done < ${proto:-scripts/proto}
-
+done < $proto |
+sort -r |
while read type perm name
do
case $type in
@@ -41,4 +43,4 @@ do
rmdir $prefix/$name || :
;;
esac
-done < ${proto:-scripts/proto}
+done
diff --git a/scripts/update-proto.all b/scripts/update-proto.all
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+(scripts/mkproto bin
+ scripts/mkproto libexec
+ scripts/mkproto include | grep -v scc) > scripts/proto.all
diff --git a/scripts/update-proto.arch b/scripts/update-proto.arch
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+arch=${1?'missed architecture parameter'}
+
+(echo d 755 lib
+ echo d 755 lib/scc
+ scripts/mkproto lib/scc/$arch-*) > scripts/proto.$arch