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
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
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
#
#
# 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 $@ $<
# 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 ""; \
echo "public interface UsermodeConstants {"; \
tr '\t' ' ' | sed -n ' \
s/ */ /g; \
- s/ *# *define \([A-Z_][A-Za-z0-9_]*\) \([0-9][0-9x]*\)/ public static final int \1 = \2;/p'; \
+ s/ *# *define \([A-Z_][A-Za-z0-9_]*\) \([0-9][0-9a-fA-Fx]*\)/ 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
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
# 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) -Dnestedvm.busyboxhack=true -cp $(classpath) tests.BusyBox ash
#
# Boehm GC
@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