chiark / gitweb /
Fix Makefile.nestedvm so that it works with make -j.
authorSimon Tatham <anakin@pobox.com>
Fri, 1 Jun 2018 06:22:55 +0000 (07:22 +0100)
committerSimon Tatham <anakin@pobox.com>
Fri, 1 Jun 2018 06:24:15 +0000 (07:24 +0100)
Instead of repeatedly reusing the file name 'PuzzleEngine.class' in
the main build directory, now each puzzle's NestedVM translation is
left in a separate subdirectory so that they don't collide with each
other. A bonus is that we don't have to rename the file back and forth
between the rule that builds it and the one that consumes it.

Recipe

diff --git a/Recipe b/Recipe
index a17f4f3724766c80b002b614ddbee37ec279f4ab..f94b1f904175b34cec98b2c0afc999a47ffb116b 100644 (file)
--- a/Recipe
+++ b/Recipe
@@ -122,12 +122,12 @@ install:
        done
 !end
 !begin nestedvm
-.PRECIOUS: %.class
-%.class: %.mips
-       java -cp $(NESTEDVM)/build:$(NESTEDVM)/upstream/build/classgen/build \
+%.tmpdir/PuzzleEngine.class: %.mips
+       mkdir -p $(patsubst %.mips,%,$<).tmpdir
+       cd $(patsubst %.mips,%,$<).tmpdir && \
+               java -cp $(NESTEDVM)/build:$(NESTEDVM)/upstream/build/classgen/build \
                org.ibex.nestedvm.Compiler -outformat class -d . \
-               PuzzleEngine $<
-               mv PuzzleEngine.class $@
+               PuzzleEngine ../$<
 
 org:
        mkdir -p org/ibex/nestedvm/util
@@ -136,16 +136,17 @@ org:
        cp $(NESTEDVM)/build/org/ibex/nestedvm/Runtime*.class org/ibex/nestedvm
        cp $(NESTEDVM)/build/org/ibex/nestedvm/util/Platform*.class org/ibex/nestedvm/util
        cp $(NESTEDVM)/build/org/ibex/nestedvm/util/Seekable*.class org/ibex/nestedvm/util
+
+applet.manifest:
        echo "Main-Class: PuzzleApplet" >applet.manifest
 
 PuzzleApplet.class: PuzzleApplet.java org
        javac -source 1.7 -target 1.7 PuzzleApplet.java
 
-%.jar: %.class PuzzleApplet.class org
-       mv $< PuzzleEngine.class
-       jar cfm $@ applet.manifest PuzzleEngine.class PuzzleApplet*.class org
+%.jar: %.tmpdir/PuzzleEngine.class PuzzleApplet.class applet.manifest org
+       cd $(patsubst %.jar,%,$@).tmpdir && ln -s ../applet.manifest ../org ../PuzzleApplet*.class .
+       cd $(patsubst %.jar,%,$@).tmpdir && jar cfm ../$@ applet.manifest PuzzleEngine.class PuzzleApplet*.class org
        echo '<applet archive="'$@'" code="PuzzleApplet" width="700" height="500"></applet>' >$*.html
-       mv PuzzleEngine.class $<
 !end
 
 # A benchmarking and testing target for the GTK puzzles.