X-Git-Url: http://git.megacz.com/?p=nestedvm.git;a=blobdiff_plain;f=Makefile;h=4d5c279f09c21a728de8b4746b01269197a29c36;hp=db01b55165d76c3c27410b9376dd6d7ccb42c5e9;hb=078ff4840f2024d159a77080e966c7133517c908;hpb=e66ecb6291d5d0f99bf48c9d56ceabb92c958bc2 diff --git a/Makefile b/Makefile index db01b55..4d5c279 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,11 @@ - # +.SECONDARY: + +# # What to build # # Java sources that are part of the compiler/interpreter -java_sources = $(wildcard src/org/xwt/mips/*.java) $(wildcard src/org/xwt/mips/util/*.java) - -# Java sources that are part of the compiler/interpreter that are -# generated from other sources -java_gen_sources = $(patsubst %,build/org/xwt/mips/%.java, UsermodeConstants) +java_sources = $(wildcard src/org/ibex/nestedvm/*.java) $(wildcard src/org/ibex/nestedvm/util/*.java) # C sources that are part of the compiler/interpreter mips_sources = crt0.c support_aux.c @@ -37,9 +35,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/xwt/mips --static \ - -T $(mips2java_root)/src/org/xwt/mips/linker.ld -Wl,--gc-sections +MIPS_LDFLAGS= $(flags) --static -Wl,--gc-sections MIPS_STRIP = mips-unknown-elf-strip # Java compiler/VM settings @@ -59,15 +55,11 @@ EXE_EXT = ##### -java_classes = \ - $(java_sources:src/%.java=build/%.class) \ - $(java_gen_sources:%.java=%.class) - -mips_objects = $(mips_sources:%.c=build/org/xwt/mips/%.o) $(mips_asm_sources:%.s=build/org/xwt/mips/%.o) +java_classes = $(java_sources:src/%.java=build/%.class) +mips_objects = $(mips_sources:%.c=build/org/ibex/nestedvm/%.o) $(mips_asm_sources:%.s=build/org/ibex/nestedvm/%.o) -.SECONDARY: - -PATH := $(mips2java_root)/upstream/install/bin:$(PATH) +usr = $(mips2java_root)/upstream/install +PATH := $(usr)/bin:$(PATH) export PATH # @@ -79,16 +71,10 @@ all: build/mips2java$(EXE_EXT) $(mips_objects) endif $(tasks)/%: - $(MAKE) -C upstream tasks/$* MIPS_LDFLAGS="$(MIPS_LDFLAGS)" MIPS_CFLAGS="$(flags) $(mips_optflags)" + $(MAKE) -C upstream tasks/$* usr="$(usr)" MIPS_LDFLAGS="$(MIPS_LDFLAGS)" MIPS_CFLAGS="$(flags) $(mips_optflags)" upstream_clean_%: - $(MAKE) -C upstream clean_$* - -errno_h = upstream/install/mips-unknown-elf/include/sys/errno.h -$(errno_h): $(tasks)/build_newlib - -unistd_h = upstream/install/mips-unknown-elf/include/sys/unistd.h -$(unistd_h): $(tasks)/build_newlib + $(MAKE) -C upstream clean_$* usr="$(usr)" # # Interpreter/Compiler/Runtime Java Compilation @@ -96,42 +82,32 @@ $(unistd_h): $(tasks)/build_newlib # This works around a gcj -C bug ifeq ($(firstword $(JAVAC)),gcj) -build/org/xwt/mips/util/.Dummy.class: +build/org/ibex/nestedvm/util/.Dummy.class: mkdir -p `dirname $@` touch $@ -$(java_classes): build/org/xwt/mips/util/.Dummy.class +$(java_classes): build/org/ibex/nestedvm/util/.Dummy.class endif -$(java_classes): $(java_sources) $(java_gen_sources) $(bcel_jar) - $(JAVAC) -classpath $(classpath) -d build $(java_sources) $(java_gen_sources) +$(java_classes): $(java_sources) $(bcel_jar) + $(JAVAC) -classpath $(classpath) -d build $(java_sources) -build/org/xwt/mips/UsermodeConstants.java: src/org/xwt/mips/syscalls.h $(errno_h) $(unistd_h) - @mkdir -p `dirname $@` - cat $^ | ( \ - echo "package org.xwt.mips;"; \ - 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'; \ - echo "}"; \ - ) > $@ - $(bcel_jar): upstream/tasks/extract_bcel @true +# GCJ Stuff # FIXME: We're cramming more than we need into the binary here build/mips2java$(EXE_EXT): $(java_sources) $(java_gen_sources) @mkdir -p `dirname $@` - $(GCJ) -s -o $@ --main=org.xwt.mips.Compiler $(java_sources) $(java_gen_sources) + $(GCJ) -s -o $@ --main=org.ibex.nestedvm.Compiler $(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 $@ $< @@ -152,15 +128,15 @@ build/%.mips.stripped: build/%.mips # MIPS Compiler generated class compilation ifdef DO_JAVASOURCE -build/%.java: build/%.mips build/org/xwt/mips/JavaSourceCompiler.class - $(JAVA) -cp $(classpath) org.xwt.mips.Compiler -outformat javasource $(compiler_flags) $($(notdir $*)_COMPILERFLAGS) $(subst /,.,$*) $< > build/$*.java +build/%.java: build/%.mips build/org/ibex/nestedvm/JavaSourceCompiler.class + $(JAVA) -cp $(classpath) org.ibex.nestedvm.Compiler -outformat javasource $(compiler_flags) $($(notdir $*)_COMPILERFLAGS) $(subst /,.,$*) $< > build/$*.java -build/%.class: build/%.java build/org/xwt/mips/Runtime.class +build/%.class: build/%.java build/org/ibex/nestedvm/Runtime.class $(JAVAC) $(JAVAC_NODEBUG_FLAGS) -classpath build -d build $< else -build/%.class: build/%.mips build/org/xwt/mips/ClassFileCompiler.class - $(JAVA) -cp $(classpath) org.xwt.mips.Compiler -outformat class -outfile $@ $(compiler_flags) $($(notdir $*)_COMPILERFLAGS) $(subst /,.,$*) $< +build/%.class: build/%.mips build/org/ibex/nestedvm/ClassFileCompiler.class + $(JAVA) -cp $(classpath) org.ibex.nestedvm.Compiler -outformat class -outfile $@ $(compiler_flags) $($(notdir $*)_COMPILERFLAGS) $(subst /,.,$*) $< endif @@ -170,18 +146,19 @@ build/%.class: src/%.java $(JAVAC) -classpath build -d build $< clean: - rm -rf build/tests build/org/xwt/mips *.jar build/mips2java$(EXE_EXT) + rm -rf build/tests build/org/ibex/nestedvm *.jar build/mips2java$(EXE_EXT) # # env.sh # -env.sh: Makefile $(tasks)/full_toolchain build/org/xwt/mips/Compiler.class +env.sh: Makefile $(tasks)/full_toolchain build/org/ibex/nestedvm/Compiler.class @rm -f "$@~" - @echo 'PATH="$(mips2java_root)/build:$(mips2java_root)/upstream/install/bin:$$PATH"; export PATH' >> $@~ + @echo 'PATH="$(mips2java_root)/build:$(usr)/bin:$$PATH"; export PATH' >> $@~ @echo 'CC=mips-unknown-elf-gcc; export CC' >> $@~ @echo 'CXX=mips-unknown-elf-g++; export CXX' >> $@~ @echo 'AS=mips-unknown-elf-as; export AS' >> $@~ - @echo 'LD=mips-unknown-elf-ar; export LD' >> $@~ + @echo 'AR=mips-unknown-elf-ar; export AR' >> $@~ + @echo 'LD=mips-unknown-elf-ld; export LD' >> $@~ @echo 'RANLIB=mips-unknown-elf-ranlib; export RANLIB' >> $@~ @echo 'CFLAGS="$(mips_optflags)"; export CFLAGS' >> $@~ @echo 'CXXFLAGS="$(mips_optflags)"; export CXXFLAGS' >> $@~ @@ -194,17 +171,49 @@ env.sh: Makefile $(tasks)/full_toolchain build/org/xwt/mips/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) \ + org/ibex/nestedvm/Runtime\$$*.class \ + org/ibex/nestedvm/util/Seekable\$$*.class -runtime.jar: $(runtime_classes:%=build/org/xwt/mips/%.class) - cd build && jar cf ../$@ $(runtime_classes:%=org/xwt/mips/%*.class) +.manifest: + echo -ne "Manifest-Version: 1.0\nMain-Class: org.ibex.nestedvm.RuntimeCompiler\n" > $@ -unixruntime.jar: $(unixruntime_classes:%=build/org/xwt/mips/%.class) - cd build && jar cf ../$@ $(unixruntime_classes:%=org/xwt/mips/%*.class) +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.' '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: $(tasks)/build_newlib + @mkdir -p `dirname $@` + ( \ + 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 "package org.ibex.nestedvm;"; \ + 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'; \ + echo "}"; \ + ) > src/org/ibex/nestedvm/UsermodeConstants.java # # Tests @@ -212,13 +221,13 @@ unixruntime.jar: $(unixruntime_classes:%=build/org/xwt/mips/%.class) # to build or run mips2java # -build/tests/Env.class: build/org/xwt/mips/Runtime.class build/org/xwt/mips/Interpreter.class +build/tests/Env.class: build/org/ibex/nestedvm/Runtime.class build/org/ibex/nestedvm/Interpreter.class # Generic Hello Worldish test test: build/tests/Test.class $(JAVA) -cp build tests.Test "arg 1" "arg 2" "arg 3" -inttest: build/tests/Test.mips build/org/xwt/mips/Interpreter.class - $(JAVA) -cp build org.xwt.mips.Interpreter build/tests/Test.mips "arg 1" "arg 2" "arg 3" +inttest: build/tests/Test.mips build/org/ibex/nestedvm/Interpreter.class + $(JAVA) -cp build org.ibex.nestedvm.Interpreter build/tests/Test.mips "arg 1" "arg 2" "arg 3" cxxtest: build/tests/CXXTest.class $(JAVA) -cp build tests.CXXTest @@ -243,7 +252,7 @@ Paranoia_CFLAGS = "-Wno-error" Paranoia_LDFLAGS = -lm paranoiatest: build/tests/Paranoia.class $(JAVA) -cp build tests.Paranoia - + # # Freetype Stuff # @@ -289,12 +298,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 @@ -311,7 +320,7 @@ boehmgctest: build/tests/Env.class build/tests/GCTest.class # Speed tests # -build/tests/SpeedTest.class: build/org/xwt/mips/Runtime.class +build/tests/SpeedTest.class: build/org/ibex/nestedvm/Runtime.class tmp/thebride_1280.jpg: @mkdir -p tmp @@ -349,8 +358,8 @@ speedtest: build/tests/SpeedTest.class build/tests/DJpeg.class build/tests/FTBen echo "Run \"make check\" to get the MS True Type fonts for the MSPackBench test"; \ fi -intspeed: build/tests/DJpeg.mips build/org/xwt/mips/Interpreter.class tmp/thebride_1280.jpg - time $(JAVA) -cp build org.xwt.mips.Interpreter build/tests/DJpeg.mips -targa -outfile tmp/thebride_1280.tga tmp/thebride_1280.jpg +intspeed: build/tests/DJpeg.mips build/org/ibex/nestedvm/Interpreter.class tmp/thebride_1280.jpg + time $(JAVA) -cp build org.ibex.nestedvm.Interpreter build/tests/DJpeg.mips -targa -outfile tmp/thebride_1280.tga tmp/thebride_1280.jpg @echo "e90f6b915aee2fc0d2eb9fc60ace6203 tmp/thebride_1280.tga" | md5sum -c && echo "MD5 is OK" # @@ -364,9 +373,16 @@ compiletests: $(patsubst %,build/tests/%.class,FTBench MSPackBench DJpeg Test Fr @true +charts := $(shell find doc/charts -name \*.dat) + # IVME Paper -doc/nestedvm.ivme04.pdf: doc/nestedvm.ivme04.tex doc/acmconf.cls - cd doc; pdflatex nestedvm.ivme04.tex && ./pst2pdf && pdflatex nestedvm.ivme04.tex +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 + +doc/ivme04.pdf: doc/ivme04.tex doc/acmconf.cls $(charts:%.dat=%.pdf) + cd doc; pdflatex ivme04.tex && ./pst2pdf && pdflatex ivme04.tex -pdf: doc/nestedvm.ivme04.pdf - open doc/nestedvm.ivme04.pdf +pdf: doc/ivme04.pdf + open doc/ivme04.pdf