From 1fa609991b3afe4dd86f4ea313adaaa998a359e6 Mon Sep 17 00:00:00 2001 From: "tim.newsham" Date: Thu, 8 May 2008 03:01:00 +0000 Subject: [PATCH] - trying out a new build style. --- newbuild/Makefile | 166 ++++++++++++++++++++++++++++++++++++++++++++++ newbuild/simh.cfg | 21 ++++++ tools/mktape.py | 13 ++-- 3 files changed, 196 insertions(+), 4 deletions(-) create mode 100644 newbuild/Makefile create mode 100755 newbuild/simh.cfg diff --git a/newbuild/Makefile b/newbuild/Makefile new file mode 100644 index 0000000..fc5b262 --- /dev/null +++ b/newbuild/Makefile @@ -0,0 +1,166 @@ +# +# Makefile for building the unix kernel and disk images. +# +# important targets: +# all - make kernel and disk images +# images - make disk images +# tape - make a tape image for a "cold" kernel +# loadfile - make a simh loadfile containing the kernel +# unix - make the kernel +# clean - delete intermediate files +# clobber - delete all generated files +# +# settings: +# EXTRAPATCHES - list of extra patches to apply +# USECOREPATCHES - "yes" or "no", use the core set of patches +# +# Examples: +# make run +# build disk images and unix and run unix in simh +# make unix tape EXTRAPATCHES=cold +# build a "cold" kernel and a tape to boot it with. + + +USECOREPATCHES = yes +EXTRAPATCHES = + +ALL = loadfile rf0.dsk rk0.dsk +ML= ../tools/ml +MKFS = ../tools/mkfs +MKTAPE = ../tools/mktape.py +APOUT_ROOT = ../fs/root +APOUT = APOUT_ROOT=$(APOUT_ROOT) ../tools/apout/apout +AS = $(APOUT) $(APOUT_ROOT)/bin/as +NM = $(APOUT) $(APOUT_ROOT)/bin/nm +TREECOPY = rsync -a --exclude .svn +KSRCS = u0.s u1.s u2.s u3.s u4.s u5.s u6.s u7.s u8.s u9.s ux.s +ALLSRCS = $(KSRCS) init.s sh.s +CLEANSRCS = $(ALLSRCS:.s=.clean) +PAGES = ../pages/e00-01 ../pages/e00-02 ../pages/e00-03 ../pages/e00-04 \ + ../pages/e00-05 ../pages/e00-06 ../pages/e00-07 ../pages/e00-08 \ + ../pages/e00-09 ../pages/e00-10 ../pages/e01-01 ../pages/e01-02 \ + ../pages/e01-03 ../pages/e01-04 ../pages/e01-05 ../pages/e01-06 \ + ../pages/e01-07 ../pages/e01-08 ../pages/e01-09 ../pages/e01-10 \ + ../pages/e02-01 ../pages/e02-02 ../pages/e02-03 ../pages/e02-04 \ + ../pages/e02-05 ../pages/e02-06 ../pages/e02-07 ../pages/e02-08 \ + ../pages/e02-09 ../pages/e02-10 ../pages/e03-01 ../pages/e03-02 \ + ../pages/e03-03 ../pages/e03-04 ../pages/e04-01 ../pages/e04-02 \ + ../pages/e04-03 ../pages/e04-04 ../pages/e04-05 ../pages/e04-06 \ + ../pages/e04-07 ../pages/e05-01 ../pages/e05-02 ../pages/e05-03 \ + ../pages/e05-04 ../pages/e05-05 ../pages/e05-06 ../pages/e06-01 \ + ../pages/e06-02 ../pages/e06-03 ../pages/e06-04 ../pages/e06-05 \ + ../pages/e06-06 ../pages/e07-01 ../pages/e07-02 ../pages/e07-03 \ + ../pages/e07-04 ../pages/e07-05 ../pages/e07-06 ../pages/e07-07 \ + ../pages/e07-08 ../pages/e08-01 ../pages/e08-02 ../pages/e08-03 \ + ../pages/e08-04 ../pages/e08-05 ../pages/e08-06 ../pages/e08-07 \ + ../pages/e08-08 ../pages/e08-09 ../pages/e09-01 ../pages/e09-02 \ + ../pages/e09-03 ../pages/e09-04 ../pages/e09-05 ../pages/e09-06 \ + ../pages/e09-07 ../pages/e09-08 ../pages/e10-01 ../pages/e10-02 \ + ../pages/e11-01 ../pages/e11-02 ../pages/e11-03 ../pages/e11-04 \ + ../pages/e11-05 ../pages/e11-06 ../pages/e11-07 ../pages/e12-01 \ + ../pages/e12-02 ../pages/e12-03 ../pages/e12-04 + +# make the important stuff +all : $(ALL) + +# make the important stuff and run the emulator +run : $(ALL) + @../tools/pdp11 simh.cfg + +# reconstitute sources from ocr'd pages +$(CLEANSRCS) cleansrc : $(PAGES) + @echo Building clean source... + @r() { cat ../pages/$$1-* >$$2.clean ; } ; \ + r e00 u0; \ + r e01 u1; \ + r e02 u2; \ + r e03 u3; \ + r e04 u4; \ + r e05 u5; \ + r e06 u6; \ + r e07 u7; \ + r e08 u8; \ + r e09 u9; \ + r e10 ux; \ + r e11 sh; \ + r e12 init + @touch cleansrc + +# patch the clean sources +# XXX what if we do USECOREPATCHES=no and we want to apply +# one of the cores as an EXTRAPATCH? +$(ALLSRCS) patched : $(CLEANSRCS) + @echo Patching... + @for src in $(CLEANSRCS) ; do \ + cp $$src `basename $$src .clean`.s; \ + done + @if [ $(USECOREPATCHES) = "yes" ] ; then \ + for p in ../patches/core/*.patch ; do \ + echo ' ' `basename $$p .patch`; \ + patch -s -p1 < $$p; \ + done; \ + fi + @for p in $(EXTRAPATCHES) ; do \ + echo ' ' $$p; \ + patch -s -p1 < ../patches/$$p.patch; \ + done + @touch patched + +# build the unix kernel from the KSRCS using the v2 assembler. +# XXX make ml take cmd line args for input and output file. +unix loadfile usyms : $(KSRCS) + @echo Building kernel... + @$(AS) u?.s + @$(NM) a.out | sort > usyms + @$(ML) + @mv a.out unix + +# build init from sources +# XXX make fixaout.py overwrite a.out instead of write b.out +init : init.s + @echo Building init... + @$(AS) init.s + @../tools/fixaout.py + @rm a.out + @mv b.out init + +# build sh from sources XXX notyet +# sh : sh.s + +# build a prototype filesystems +root usr protofs : init + @echo Building filesystems... + @$(TREECOPY) ../fs/root . + @$(TREECOPY) ../fs/new/etc root + @$(TREECOPY) ../fs/usr . + @#cp init root/etc/init + @#cp sh root/etc/sh XXX notyet + @touch protofs + +# build filesystem images +rf0.dsk rk0.dsk images : protofs + @echo Building disk images... + @$(MKFS) -p ../fs/Readme root rf0.dsk rf + @$(MKFS) -p ../fs/Readme root rk0.dsk rk + @touch images + +# build a tape image +tape : protofs + @echo Building tape image... + @$(MKTAPE) root root/bin/* root/etc/* + +# clean intermediate files +clean : + rm -f $(CLEANSRCS) cleansrc + rm -f $(ALLSRCS) patched *.orig + rm -f unix usyms + rm -rf usr root protofs + rm -f init + rm -f images + +# clean intermediate and target files +clobber : clean + rm -f tape + rm -f loadfile + rm -f rf0.dsk rk0.dsk + diff --git a/newbuild/simh.cfg b/newbuild/simh.cfg new file mode 100755 index 0000000..901b808 --- /dev/null +++ b/newbuild/simh.cfg @@ -0,0 +1,21 @@ +#!../tools/pdp11 +set cpu 11/20 +set cpu 32K +set rk0 enabled +att rk0 rk0.dsk +set rf 2p +set rf enabled +attach rf rf0.dsk +set tc enabled +att tc tape +set hk disabled +set rha disabled +set tm disabled +set rx disabled +set rl disabled +set tq disabled +set tc enabled +set rf enabled +set ke enabled +load loadfile +go 400 diff --git a/tools/mktape.py b/tools/mktape.py index 813bfef..e453ec5 100755 --- a/tools/mktape.py +++ b/tools/mktape.py @@ -158,7 +158,7 @@ def wrFile(out, fn, d, mode, uid) : def wrEof(out) : wrFile(out, "", "", 0, 0) -def copyFile(out, fn) : +def copyFile(root, out, fn) : "copy file from local filesystem to tape." f = file(fn, 'rb') d = f.read() @@ -172,12 +172,17 @@ def copyFile(out, fn) : if not fn in perms : print "making up mode" wrFile(out, fn, d, mode, uid) -root = "/tmp/s2" def main() : + if len(sys.argv) < 2 : + print "usage: %s root files" % sys.argv[0] + raise SystemExit(1) + root = sys.argv[1] + files = sys.argv[2:] + f = file("tape", "wb") f.write("\0" * (512 * 65)) # start at block 65 - for fn in sys.argv[1:] : - copyFile(f, fn) + for fn in files : + copyFile(root, f, fn) wrEof(f) f.close()