+all: JVM Darwin Linux Win32 Solaris
+
+JVM: build/JVM/xwt.jar
+Linux: ; make gcj platform=Linux target=i686-pc-linux-gnu link_flags="-lX11 -lXext --static"
+Solaris: ; make gcj platform=Solaris target=sparc-sun-solaris2.7 link_flags="-lX11 -lXext"
+Win32: ; make gcj platform=Win32 target=i686-pc-mingw32 link_flags="-Wl,--subsystem,windows -lcomdlg32" target_bin=xwt.exe
+Darwin: ; make gcj platform=Darwin target=powerpc-apple-darwin link_flags="$(darwin_linker_flags)"
+
+# default
+platform := JVM
+
+darwin_libdir := upstream/install/powerpc-apple-darwin/lib
+darwin_linker_flags := -Wl,-dylib_file,/usr/lib/libSystem.B.dylib:$(darwin_libdir)/libSystem.B.dylib
+darwin_linker_flags += -Wl,-dylib_file,/usr/lib/system/libmathCommon.A.dylib:$(darwin_libdir)/libmathCommon.A.dylib
+darwin_linker_flags += -Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:$(darwin_libdir)/libGL.dylib
+darwin_linker_flags += -Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib:$(darwin_libdir)/libGLU.dylib
+darwin_linker_flags += -lSystem.B -lmathCommon.A -lGL -lGLU
+
+
+#############################################################################
+# Configurables:
+#
+target_bin := xwt.$(shell echo $(platform) | tr A-Z a-z)
+jikes_flags := -nowarn -sourcepath src/
+gcc_optimizations := -O2
+#gcc_optimizations := -O9 -ffast-math -fomit-frame-pointer -foptimize-sibling-calls
+#gcc_optimizations += -finline-functions -funroll-loops -ffunction-sections -fdata-sections
+gcc_flags := -nostdinc $(gcc_optimizations) -Ibuild/h -Iupstream/jpeg-6b/src/ -Iupstream/jpeg-6b/build-$(target)/
+gcj_flags := -fCLASSPATH=build/java
+gcj := upstream/install/bin/$(target)-gcj $(gcc_flags) $(gcj_flags)
+g++ := upstream/install/bin/$(target)-gcj $(gcc_flags)
+gcc := upstream/install/bin/$(target)-gcc $(gcc_flags)
+jar := $(shell ((type fastjar &>/dev/null) && echo fastjar) || echo jar)
+
+include Makefile.upstream
+
+# figure out what stuff in org.xwt.plat.* this platform requires (its superclasses)
+superclass_org.xwt.plat.Platform:; echo org.xwt.plat.OpenGL
+superclass_%:
+ @echo $*
+ @make -s superclass_org.xwt.plat.$(shell grep extends src/`echo $* | sed s_\\\\._/_g`.java | head -n 1 | sed s_.\*extends\ __ | sed s_\ .\*__)
+
+all_java_sources := $(patsubst src/%.java, build/java/%.java, $(shell find src -name '*.java'))
+java_sources := $(filter-out build/java/org/xwt/plat/%, $(all_java_sources))
+java_sources += $(patsubst src/%.java.pp, build/java/%.java, $(shell find src -name \*.java.pp))
+plat_deps := $(shell test x$(platform) == x"" || make -s superclass_org.xwt.plat.$(platform) platform= )
+java_sources += $(patsubst org.xwt.plat.%, build/java/org/xwt/plat/%.java, $(plat_deps))
+
+build/java/%.java: src/%.java ; @echo linking $@; mkdir -p $(@D); ln -s `echo $(@D) | sed 's_[^/]*\(/\|$$\)_../_g'`/$< $@
+build/cc/%.cc: src/%.c ; @echo linking $@; mkdir -p $(@D); ln -s `echo $(@D) | sed 's_[^/]*\(/\|$$\)_../_g'`/$< $@
+build/c/jpeg/%.c: upstream/jpeg-6b/src/%.c
+ @echo linking $@; mkdir -p $(@D); ln -s `echo $(@D) | sed 's_[^/]*\(/\|$$\)_../_g'`/$< $@
+
+build/java/%.java: src/%.java.pp
+ @make -s build/class/org/xwt/util/Preprocessor.class
+ @echo -e "\n\033[1mpreprocessing .java.pp -> .java: $<\033[0m"
+ mkdir -p `dirname $@`
+ rm -f $@
+ java -cp build/class org.xwt.util.Preprocessor < $< > $@
+
+build/class/%.class: build/java/%.java .jikes
+ @echo -e "\n\033[1mcompiling .java -> .class: $<\033[0m"
+ mkdir -p build/class
+ @./.jikes $<
+
+compile: .compile
+.compile: $(java_sources) $(patsubst src/%, build/java/%, $(shell ls src/org/xwt/plat/*.java))
+ @echo -e "\n\033[1mcompiling .java -> .class: src/**/*.java\033[0m"
+ mkdir -p build/class
+ @./.jikes $^
+ touch .compile
+
+# PHASE 4: gcj-generated headers
+java_headers := $(all_java_sources:build/java/%.java=build/h/%.h)
+build/h/%.h: build/class/%.class .compile
+ @echo -e "\n\033[1mextracting .class -> .h: $<\033[0m"
+ mkdir -p `dirname $@`
+ ls `echo $< | sed s/.class\$$//`*.class |\
+ sed s_build/class/__ | sed s/.class\$$//g | sed s_/_._g | (cd build/class; xargs ../../upstream/install/bin/$(target)-gcjh -d ../h --classpath .)
+
+# a hack since we've disabled gcj's awt implementation
+build/$(platform)/org/xwt/plat/Java2.java.o:
+ touch .empty.c; mkdir -p $(@D); $(gcc) -c .empty.c -o $@;
+build/$(platform)/org/xwt/plat/AWT.java.o:
+ touch .empty.c; mkdir -p $(@D); $(gcc) -c .empty.c -o $@;