From 098c8a9e2800ec77edf4255c178028a1ee3e38c6 Mon Sep 17 00:00:00 2001 From: Warren Toomey Date: Mon, 21 Mar 2016 06:51:00 +1000 Subject: [PATCH] I've split the cmd and others Makefile rules out to individual utility rules, so that we don't keep building binaries for sources that have not changed. --- README.md | 11 ++--- build/Makefile | 113 +++++++++++++++++++++++++++++++------------------ 2 files changed, 78 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index 8403e18..af653d4 100644 --- a/README.md +++ b/README.md @@ -34,14 +34,15 @@ To compile it: `make pdp7` -On 64-bit systems, you may need to set the C compiler's optimisation -level to -O1. To run pdp-unix from the pdp7-unix source tree, do: - -`make run` - ## Running pdp7-unix You will need [simh](http://simh.trailing-edge.com/) 4.0 to run pdp7-unix. You can get the source code [here](https://github.com/simh/simh). +On 64-bit systems, you may need to set the C compiler's optimisation +level to -O1. + +To run pdp-unix from the pdp7-unix source tree, do: + +`make run`
 cd binaries
diff --git a/build/Makefile b/build/Makefile
index 355d67e..f39a5d5 100644
--- a/build/Makefile
+++ b/build/Makefile
@@ -17,35 +17,39 @@ TESTSRC=../src/tests
 # targets
 BINDIR=bin
 TESTDIR=tests
-IMAGEFILE=image.fs
 BINARIES=../binaries/
 
 
-all: cmd others a.rim image copybinaries
+all: cmd others a.rim image.fs copybinaries
 
-# Manually make all before make run
+# The run rule has no dependencies so that the system can be booted easily
+# and frequently with make run. However, you have to manually make all first!
 run:
 	$(PDP7) unixv0.simh
 
+# Warm boot Unix kernel: boots into init and a login prompt
 a.rim:
 	$(AS) -f rim  -o a.rim $(SYSSRC)/sop.s $(SYSSRC)/s[1-8].s
 	$(AS) -n -f list -o a.lst $(SYSSRC)/sop.s $(SYSSRC)/s[1-8].s
 
+# Cold boot Unix kernel: attempts to build a minimal filesystem.
+# Don't use this one!
 coldboot:
 	$(AS) -f rim  -o a.rim $(SYSSRC)/sop.s $(SYSSRC)/s[1-9].s
 	$(AS) -n -f list -o a.lst $(SYSSRC)/sop.s $(SYSSRC)/s[1-9].s
 
-image:
+# Filesystem image
+image.fs: cmd others
 	$(MKFS) --format simh proto
-	$(FSCK) $(IMAGEFILE)
+	$(FSCK) image.fs
 
 copybinaries:
 	mkdir -p $(BINARIES)
-	cp $(IMAGEFILE) $(BINARIES)
+	cp image.fs $(BINARIES)
 	cp a.rim $(BINARIES)
 
 clean:
-	rm -f a.rim $(IMAGEFILE) a.lst n.out
+	rm -f a.rim image.fs a.lst n.out
 	rm -rf $(BINDIR)
 	rm -rf $(TESTDIR)
 	rm -rf $(BINARIES)
@@ -53,41 +57,68 @@ clean:
 dirs:
 	mkdir -p $(BINDIR)
 
-cmd: dirs
-#	$(AS) $(ASARGS) -o $(BINDIR)/adm    $(CMDSRC)/adm.s
-#	$(AS) $(ASARGS) -o $(BINDIR)/apr    $(CMDSRC)/apr.s
-	$(AS) $(ASARGS) -o $(BINDIR)/as     $(CMDSRC)/as.s
-#	$(AS) $(ASARGS) -o $(BINDIR)/bc     $(CMDSRC)/bc.s
-#	$(AS) $(ASARGS) -o $(BINDIR)/bi     $(CMDSRC)/bi.s
-#	$(AS) $(ASARGS) -o $(BINDIR)/bl     $(CMDSRC)/bl.s
-#	$(AS) $(ASARGS) -o $(BINDIR)/cas    $(CMDSRC)/cas.s
-	$(AS) $(ASARGS) -o $(BINDIR)/cat    $(CMDSRC)/cat.s
-	$(AS) $(ASARGS) -o $(BINDIR)/check  $(CMDSRC)/check.s
-	$(AS) $(ASARGS) -o $(BINDIR)/chmod  $(CMDSRC)/chmod.s
-	$(AS) $(ASARGS) -o $(BINDIR)/chown  $(CMDSRC)/chown.s
-	$(AS) $(ASARGS) -o $(BINDIR)/chrm   $(CMDSRC)/chrm.s
-	$(AS) $(ASARGS) -o $(BINDIR)/cp     $(CMDSRC)/cp.s
-#	$(AS) $(ASARGS) -o $(BINDIR)/db     $(CMDSRC)/db.s
-#	$(AS) $(ASARGS) -o $(BINDIR)/dmabs  $(CMDSRC)/dmabs.s
-	$(AS) $(ASARGS) -o $(BINDIR)/ds     $(CMDSRC)/ds.s
-#	$(AS) $(ASARGS) -o $(BINDIR)/dskio  $(CMDSRC)/dskio.s
-#	$(AS) $(ASARGS) -o $(BINDIR)/dskres $(CMDSRC)/dskres.s
-#	$(AS) $(ASARGS) -o $(BINDIR)/dsksav $(CMDSRC)/dsksav.s
-#	$(AS) $(ASARGS) -o $(BINDIR)/dsw    $(CMDSRC)/dsw.s
-	$(AS) $(ASARGS) -o $(BINDIR)/ed     $(CMDSRC)/ed1.s $(CMDSRC)/ed2.s
-	$(AS) $(ASARGS) -o $(BINDIR)/init   $(CMDSRC)/init.s
-	$(AS) $(ASARGS) -o $(BINDIR)/maksys $(CMDSRC)/maksys.s
-	$(AS) $(ASARGS) -o $(BINDIR)/trysys $(CMDSRC)/trysys.s
+# The commands that came from the original scans
+cmd: dirs $(BINDIR)/as $(BINDIR)/cat $(BINDIR)/check $(BINDIR)/chmod \
+	$(BINDIR)/chown $(BINDIR)/chrm $(BINDIR)/cp $(BINDIR)/ds $(BINDIR)/ed \
+	$(BINDIR)/init
 
-others: dirs
-	$(AS) $(ASARGS) -o $(BINDIR)/sh    	$(OTHERSRC)/pbsh.s	
-	$(AS) $(ASARGS) -o $(BINDIR)/ls    	$(OTHERSRC)/wktls.s	
-	$(AS) $(ASARGS) -o $(BINDIR)/wktcat	$(OTHERSRC)/wktcat.s	
-	$(AS) $(ASARGS) -o $(BINDIR)/wktcp	$(OTHERSRC)/wktcp.s	
-	$(AS) $(ASARGS) -o $(BINDIR)/date  	$(OTHERSRC)/wktdate.s	
-	$(AS) $(ASARGS) -o $(BINDIR)/ln  	$(OTHERSRC)/wktln.s
-	$(AS) $(ASARGS) -o $(BINDIR)/mv    	$(OTHERSRC)/wktmv.s	
-	$(AS) $(ASARGS) -o $(BINDIR)/stat  	$(OTHERSRC)/wktstat.s	
+$(BINDIR)/as: $(CMDSRC)/as.s
+	$(AS) $(ASARGS) -o $(BINDIR)/as $(CMDSRC)/as.s
+
+$(BINDIR)/cat: $(CMDSRC)/cat.s
+	$(AS) $(ASARGS) -o $(BINDIR)/cat $(CMDSRC)/cat.s
+
+$(BINDIR)/check: $(CMDSRC)/check.s
+	$(AS) $(ASARGS) -o $(BINDIR)/check $(CMDSRC)/check.s
+
+$(BINDIR)/chmod: $(CMDSRC)/chmod.s
+	$(AS) $(ASARGS) -o $(BINDIR)/chmod $(CMDSRC)/chmod.s
+
+$(BINDIR)/chown: $(CMDSRC)/chown.s
+	$(AS) $(ASARGS) -o $(BINDIR)/chown $(CMDSRC)/chown.s
+
+$(BINDIR)/chrm: $(CMDSRC)/chrm.s
+	$(AS) $(ASARGS) -o $(BINDIR)/chrm $(CMDSRC)/chrm.s
+
+$(BINDIR)/cp: $(CMDSRC)/cp.s
+	$(AS) $(ASARGS) -o $(BINDIR)/cp $(CMDSRC)/cp.s
+
+$(BINDIR)/ds: $(CMDSRC)/ds.s
+	$(AS) $(ASARGS) -o $(BINDIR)/ds $(CMDSRC)/ds.s
+
+$(BINDIR)/ed: $(CMDSRC)/ed1.s $(CMDSRC)/ed2.s
+	$(AS) $(ASARGS) -o $(BINDIR)/ed $(CMDSRC)/ed1.s $(CMDSRC)/ed2.s
+
+$(BINDIR)/init: $(CMDSRC)/init.s
+	$(AS) $(ASARGS) -o $(BINDIR)/init $(CMDSRC)/init.s
+
+# The commands that did not come from the scans
+others: dirs $(BINDIR)/sh $(BINDIR)/wktcat $(BINDIR)/wktcp $(BINDIR)/date \
+	$(BINDIR)/ln $(BINDIR)/ls $(BINDIR)/mv $(BINDIR)/stat
+
+$(BINDIR)/sh: $(OTHERSRC)/pbsh.s
+	$(AS) $(ASARGS) -o $(BINDIR)/sh $(OTHERSRC)/pbsh.s
+
+$(BINDIR)/wktcat: $(OTHERSRC)/wktcat.s
+	$(AS) $(ASARGS) -o $(BINDIR)/wktcat $(OTHERSRC)/wktcat.s
+
+$(BINDIR)/wktcp: $(OTHERSRC)/wktcp.s
+	$(AS) $(ASARGS) -o $(BINDIR)/wktcp $(OTHERSRC)/wktcp.s
+
+$(BINDIR)/date: $(OTHERSRC)/wktdate.s
+	$(AS) $(ASARGS) -o $(BINDIR)/date $(OTHERSRC)/wktdate.s
+
+$(BINDIR)/ln: $(OTHERSRC)/wktln.s
+	$(AS) $(ASARGS) -o $(BINDIR)/ln $(OTHERSRC)/wktln.s
+
+$(BINDIR)/ls: $(OTHERSRC)/wktls.s
+	$(AS) $(ASARGS) -o $(BINDIR)/ls $(OTHERSRC)/wktls.s
+
+$(BINDIR)/mv: $(OTHERSRC)/wktmv.s
+	$(AS) $(ASARGS) -o $(BINDIR)/mv $(OTHERSRC)/wktmv.s
+
+$(BINDIR)/stat: $(OTHERSRC)/wktstat.s
+	$(AS) $(ASARGS) -o $(BINDIR)/stat $(OTHERSRC)/wktstat.s
 
 tests:
 	mkdir -p $(TESTDIR)