g77/linpack
[nestedvm.git] / Makefile
index 7f30324..8a6af84 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -21,6 +21,7 @@ tasks = upstream/tasks
 flags = -march=mips1
 MIPS_CC = mips-unknown-elf-gcc
 MIPS_CXX = mips-unknown-elf-g++
+MIPS_G77 = mips-unknown-elf-g77
 
 # Be VERY careful about changing any of these as they can break binary 
 # compatibility and create hard to find bugs
@@ -35,9 +36,7 @@ mips_optflags = -O3 -g \
 
 MIPS_CFLAGS = $(mips_optflags) $(flags) -I. -Wall -Wno-unused -Werror
 MIPS_LD = mips-unknown-elf-gcc
-MIPS_LDFLAGS= \
-       $(flags) -L$(build)/org/ibex/nestedvm --static \
-       -T $(mips2java_root)/src/org/ibex/nestedvm/linker.ld -Wl,--gc-sections
+MIPS_LDFLAGS= $(flags) --static -Wl,--gc-sections
 MIPS_STRIP = mips-unknown-elf-strip
 
 # Java compiler/VM settings
@@ -78,12 +77,6 @@ $(tasks)/%:
 upstream_clean_%:
        $(MAKE) -C upstream clean_$* usr="$(usr)"
 
-errno_h = $(usr)/mips-unknown-elf/include/sys/errno.h
-$(errno_h): $(tasks)/build_newlib
-
-unistd_h = $(usr)/mips-unknown-elf/include/sys/unistd.h
-$(unistd_h): $(tasks)/build_newlib
-
 #
 # Interpreter/Compiler/Runtime Java Compilation
 #
@@ -111,11 +104,11 @@ build/mips2java$(EXE_EXT): $(java_sources) $(java_gen_sources)
 #
 # MIPS Binary compilation
 #
-build/%.o: src/%.c $(tasks)/full_toolchain
+build/%.o: src/%.c $(tasks)/build_gcc
        @mkdir -p `dirname $@`
        $(MIPS_CC) $(MIPS_CFLAGS) $($(notdir $*)_CFLAGS) -c -o $@ $<
 
-build/%.o: src/%.s $(tasks)/full_toolchain
+build/%.o: src/%.s $(tasks)/build_gcc
        @mkdir -p `dirname $@`
        $(MIPS_CC) -x assembler-with-cpp -c -o $@ $<
 
@@ -179,20 +172,48 @@ env.sh: Makefile $(tasks)/full_toolchain build/org/ibex/nestedvm/Compiler.class
 # Runtime.jar
 #
 
-runtime_util_classes = SeekableData SeekableByteArray SeekableFile SeekableInputStream
-runtime_classes = Runtime Registers UsermodeConstants  $(runtime_util_classes:%=util/%)
-unixruntime_classes = $(runtime_classes) UnixRuntime
+runtime_classes = Runtime Registers UsermodeConstants util/Seekable
 
-runtime.jar: $(runtime_classes:%=build/org/ibex/nestedvm/%.class)
-       cd build && jar cf ../$@ $(runtime_classes:%=org/ibex/nestedvm/%*.class)
+tex.jar: $(mips_objects) $(runtime_classes:%=build/org/ibex/nestedvm/%.class) upstream/tasks/build_tex
+       echo -e "Manifest-Version: 1.0\nMain-Class: TeX\n" > .manifest
+       cp upstream/build/tex/TeX.class build
+       cd build && jar cfm ../$@ ../.manifest \
+               TeX.class \
+               $(runtime_classes:%=org/ibex/nestedvm/%.class) \
+               org/ibex/nestedvm/*.class \
+               org/ibex/nestedvm/util/*.class
 
-unixruntime.jar: $(unixruntime_classes:%=build/org/ibex/nestedvm/%.class)
-       cd build && jar cf ../$@ $(unixruntime_classes:%=org/ibex/nestedvm/%*.class)
+runtime.jar: $(runtime_classes:%=build/org/ibex/nestedvm/%.class)
+       cd build && jar cf ../$@ \
+               $(runtime_classes:%=org/ibex/nestedvm/%.class) \
+               org/ibex/nestedvm/Runtime\$$*.class \
+               org/ibex/nestedvm/util/Seekable\$$*.class
+
+.manifest:
+       echo -ne "Manifest-Version: 1.0\nMain-Class: org.ibex.nestedvm.RuntimeCompiler\n" > $@
+
+nestedvm.jar: $(java_classes) .manifest
+       cd build && jar cfm ../$@ ../.manifest $(java_classes:build/%.class=%*.class)
+
+compact_runtime_compiler.jar: $(java_classes) .manifest $(tasks)/build_gcclass
+       mkdir -p tmp/pruned
+       java -cp upstream/build/gcclass/build:$(bcel_jar) com.brian_web.gcclass.GCClass \
+               build tmp/pruned \
+               org.ibex.nestedvm.RuntimeCompiler.main 'org.ibex.nestedvm.Runtime.decodeData' \
+               'org.ibex.nestedvm.UnixRuntime.<init>' 'org.ibex.nestedvm.Runtime.initPages' \
+               'org.ibex.nestedvm.Runtime.clearPages' 'org.ibex.nestedvm.Runtime.syscall' \
+               'org.ibex.nestedvm.Runtime$$CPUState.dup'
+       cd tmp/pruned && jar cfm ../../$@ ../../.manifest .
 
 # This is only for Brian to use... don't mess with it
-rebuild-constants: src/org/ibex/nestedvm/syscalls.h $(errno_h) $(unistd_h)
+rebuild-constants: $(tasks)/build_newlib
        @mkdir -p `dirname $@`
-       cat $^ | ( \
+       ( \
+               cat \
+                       src/org/ibex/nestedvm/syscalls.h \
+                       $(usr)/mips-unknown-elf/include/sys/{errno.h,unistd.h,syslimits.h}; \
+               $(MIPS_CC) -E -dM $(usr)/mips-unknown-elf/include/sys/fcntl.h | awk '$$2 ~ /^[OF]_/ { print; }'; \
+       ) | ( \
                echo "// THIS FILE IS AUTOGENERATED! DO NOT EDIT!"; \
                echo "// run \"make rebuild-constants\" if it needs to be updated"; \
                echo ""; \
@@ -203,7 +224,7 @@ rebuild-constants: src/org/ibex/nestedvm/syscalls.h $(errno_h) $(unistd_h)
                        s/ *# *define \([A-Z_][A-Za-z0-9_]*\) \([0-9][0-9x]*\)/    public static final int \1 = \2;/p'; \
                echo "}"; \
        ) > src/org/ibex/nestedvm/UsermodeConstants.java
-       
+
 #
 # Tests
 # These are simply here for convenience. They aren't required 
@@ -213,6 +234,7 @@ rebuild-constants: src/org/ibex/nestedvm/syscalls.h $(errno_h) $(unistd_h)
 build/tests/Env.class: build/org/ibex/nestedvm/Runtime.class build/org/ibex/nestedvm/Interpreter.class
 
 # Generic Hello Worldish test
+test_COMPILERFLAGS = -o unixruntime
 test: build/tests/Test.class
        $(JAVA) -cp build tests.Test "arg 1" "arg 2" "arg 3"
 inttest: build/tests/Test.mips build/org/ibex/nestedvm/Interpreter.class
@@ -287,12 +309,12 @@ build/tests/DJpeg.mips: $(mips_objects) $(tasks)/build_libjpeg
 # Busybox
 #
 BusyBox_COMPILERFLAGS = -o unixruntime
-build/tests/BusyBox.mips: $(mips_object) $(tasks)/build_busybox
+build/tests/BusyBox.mips: $(mips_objects) $(tasks)/build_busybox
        @mkdir -p `dirname $@`
        cp upstream/build/busybox/busybox $@
-       
+
 busyboxtest: build/tests/BusyBox.class
-       $(JAVA) -cp build tests.BusyBox ash
+       $(JAVA) -cp $(classpath) tests.BusyBox ash
 
 #
 # Boehm GC
@@ -362,9 +384,23 @@ compiletests: $(patsubst %,build/tests/%.class,FTBench MSPackBench DJpeg Test Fr
        @true
 
 
-# IVME Paper
-doc/nestedvm.ivme04.pdf: doc/nestedvm.ivme04.tex doc/acmconf.cls
-       cd doc; pdflatex nestedvm.ivme04.tex && ./pst2pdf && pdflatex nestedvm.ivme04.tex
+charts := $(shell find doc/charts -name \*.dat)
 
-pdf: doc/nestedvm.ivme04.pdf
-       open doc/nestedvm.ivme04.pdf
+# IVME Paper
+doc/charts/%.pdf: doc/charts/%.dat doc/charts/%.gnuplot
+       cd doc/charts; gnuplot $*.gnuplot
+       cd doc/charts; chmod +x boxfill.pl; ./boxfill.pl -g -o unfilled.eps $*.eps
+       cd doc/charts; ps2pdf $*.eps
+
+tex := java -cp $(usr)/../../build:.. TeX
+
+#tex := java -cp $(usr)/../../build:.. org.ibex.nestedvm.Interpreter ../tex.mips
+doc/ivme04.pdf: doc/ivme04.tex doc/acmconf.cls $(charts:%.dat=%.pdf) tex.jar upstream/tasks/extract_texinputs
+       cp upstream/build/tex/tex.pool upstream/build/tex/texinputs/tex.pool
+       cd upstream/build/tex/texinputs; echo '\latex.ltx' | $(tex)
+       cd upstream/build/tex/texinputs; ln -fs ../../../../doc/* .; rm -f ivme04.aux; touch ivme04.aux; touch ivme04.bbl
+       cd upstream/build/tex/texinputs; echo '\&latex \input ivme04.tex' | $(tex)
+       cd upstream/build/tex/texinputs; dvipdf ivme04.dvi
+
+pdf: doc/ivme04.pdf
+       open doc/ivme04.pdf