- $(g++) -Iupstream/install/lib/gcc-lib/$(target)/3.3/include/ -Iupstream/install/$(target)/include -I/usr/X11R6/include/ -Ibuild/h -Wno-multichar -Iupstream/install/include -c $< -o $@
-
-build/$(platform)/jpeg-6b/%.c.o: upstream/jpeg-6b/src/%.c
- @echo -e "\n\033[1mcompiling .c -> .o: $<\033[0m"
- mkdir -p `dirname $@`
- $(gcc) -Ibuild/h -c $< -o $@
-
-# PHASE 5: linking
-# FIXME use libjpeg
-jpeg_sources := jdapimin.c jdapistd.c jcomapi.c jcparam.c jdmaster.c jdinput.c jdmainct.c jdcoefct.c jdpostct.c jdmarker.c
-jpeg_sources += jdhuff.c jdphuff.c jddctmgr.c jidctint.c jidctfst.c jidctflt.c jidctred.c jdsample.c jdcolor.c jdmerge.c
-jpeg_sources += jquant1.c jquant2.c jerror.c jutils.c jmemnobs.c jmemmgr.c
-
-upstream/jpeg-6b/build-$(target)/libjpeg.a: .install_jpeg-6b_$(target)
-java_objects := $(nonplat_java_sources:build/java/%.java=build/$(platform)/%.java.o)
-
-build/$(platform)/$(platform).ar: $(java_objects) $(plat_java_sources:build/java/%.java=build/$(platform)/%.java.o)
- @echo -e "\n\033[1marchiving .o -> .a\033[0m"
- mkdir -p build/$(platform)
- rm -f $@
- upstream/install/$(target)/bin/ar rc $@ $?
- upstream/install/$(target)/bin/ranlib $@
-
-$(target_bin): build/$(platform)/org/xwt/plat/$(platform).cc.o upstream/jpeg-6b/build-$(target)/libjpeg.a build/$(platform)/builtin.o build/$(platform)/$(platform).ar
- @echo -e "\n\033[1mlinking .o -> $(target_bin)\033[0m"
- mkdir -p build/$(platform)
- PATH=upstream/install/bin:$$PATH $(gcj) -v --main=org.xwt.Main -o build/$(platform)/$(target_bin) -Lupstream/install/$(target)/lib build/$(platform)/org/xwt/plat/$(platform).java.o $^ $(link_flags)
-
-
-##############################################################################
-# Special treatment:
-#
-
-builtin_src := $(shell find src/org/xwt/builtin -name '*.*' \! -name '*.xcf')
+ $(g++) -Iupstream/gcc-3.3/build-$(target)/$(target)/libjava -c $< -o $@
+
+
+bcel_jar := upstream/bcel-5.1/src/bcel-5.1.jar
+build/$(platform)/ibex.pruned.jar: .compile $(java_classes) .install_jpeg-6b_$(target) build/$(platform)/builtin.o build/$(platform)/org/ibex/plat/$(platform).cc.o
+ @echo -e "\n\033[1mpruning .jar -> .jar\033[0m"
+ifneq ($(platform),Darwin)
+ cp upstream/install/share/java/libgcj-3.3.jar build/$(platform)/ibex.jar
+ cd build/class; jar uf ../$(platform)/ibex.jar $(java_classes:build/class/%.class=%*.class)
+ ($(nm) $(nat_libjava_files) build/$(platform)/org/ibex/plat/$(platform).cc.o; echo org.ibex.plat.$(platform).main) |\
+ grep _ZN | c++filt --format java | grep " U " | sed 's_ * U __' | sed 's_(.*__' \
+ | java -cp $(bcel_jar):build/class org.ibex.util.NanoGoat build/$(platform)/ibex.jar | tee nanogoat.log
+ mkdir tmp; cd tmp; fastjar xvf ../build/$(platform)/ibex.jar.pruned; rm gnu/gcj/runtime/FirstThread*; cp ../build/class/org/ibex/plat/GCJ* org/ibex/plat/; cp -r ../build/class/org/xwt/mips/* org/xwt/mips/; mkdir -p $(shell pwd)/build/$(platform)/java/lang; mv java/lang/Class.class $(shell pwd)/build/$(platform)/java/lang; fastjar cvf ../build/$(platform)/ibex.jar.pruned .; cd ..; rm -rf tmp
+ mv build/$(platform)/ibex.jar.pruned $@
+endif
+ifeq ($(platform),Darwin)
+ cd build/class; jar cf ../$(platform)/ibex.pruned.jar \
+ org/ibex/plat/Platform*.class \
+ $(filter-out org/ibex/util/NanoGoat%,$(java_classes:build/class/%.class=%*.class))
+endif
+
+ifeq ($(platform),Win32)
+filedes := $(shell pwd)/upstream/gcc-3.3/src/libjava/java/io/natFileWin32.cc
+filedes += $(shell pwd)/upstream/gcc-3.3/src/libjava/java/io/natFileDescriptorWin32.cc
+else
+filedes := $(shell pwd)/upstream/gcc-3.3/src/libjava/java/io/natFilePosix.cc
+filedes += $(shell pwd)/upstream/gcc-3.3/src/libjava/java/io/natFileDescriptorPosix.cc
+endif
+
+final_compile := --main=org.ibex.plat.$(platform)
+final_compile += -Dfile.encoding=UTF8
+final_compile += -DPREFIX=\"\"
+final_compile += -Lupstream/install/$(target)/lib -Lupstream/install/lib
+final_compile += -g -save-temps -w -v
+final_compile += -Iupstream/jpeg-6b/build-$(target)/
+final_compile += -Iupstream/jpeg-6b/src
+final_compile += -Ibuild/h
+final_compile += -Iupstream/gcc-3.3/src/gcc
+final_compile += -Iupstream/gcc-3.3/build-$(target)/$(target)/boehm-gc/
+final_compile += -Iupstream/gcc-3.3/build-$(target)/$(target)/boehm-gc/include
+final_compile += -Iupstream/gcc-3.3/src/boehm-gc
+final_compile += -Iupstream/gcc-3.3/src/boehm-gc/include
+final_compile += -Iupstream/gcc-3.3/src/libjava
+final_compile += -Iupstream/gcc-3.3/src/libjava/include
+final_compile += -Iupstream/gcc-3.3/build-$(target)/$(target)/libjava/
+final_compile += -Iupstream/gcc-3.3/build-$(target)/$(target)/libjava/include
+final_compile += -Ufile
+final_compile += src/org/ibex/plat/$(platform).cc
+final_compile += upstream/jpeg-6b/build-$(target)/libjpeg.a
+final_compile += build/$(platform)/builtin.o
+final_compile += build/$(platform)/ibex.pruned.jar
+ifneq ($(platform),Darwin)
+final_compile += $(libjava_dir)/../boehm-gc/.libs/libgcjgc.a
+final_compile += -fno-store-check
+final_compile += -finhibit-reflection
+final_compile += $(nat_libjava_files_:%.o=$(shell pwd)/upstream/gcc-3.3/src/libjava/%.c*)
+final_compile += $(filedes)
+final_compile += build/$(platform)/Class.o
+final_compile += $(libjava_dir)/gnu/gcj/runtime/FirstThread.o
+final_compile += -Wl,-O2,--relax,--gc-sections,--noinhibit-exec,--no-whole-archive
+final_compile += -lz
+else
+final_compile += -Wl,-dylib_file,/usr/lib/libSystem.B.dylib:$(darwin_libdir)/libSystem.B.dylib
+final_compile += -Wl,-dylib_file,/usr/lib/system/libmathCommon.A.dylib:$(darwin_libdir)/libmathCommon.A.dylib
+final_compile += -Wl,-dylib_file,$(darwin_ogl_libdir)/libGL.dylib:$(darwin_libdir)/libGL.dylib
+final_compile += -Wl,-dylib_file,$(darwin_ogl_libdir):$(darwin_libdir)/libGLU.dylib
+final_compile += -lSystem.B -lmathCommon.A -lGL -lGLU
+#final_compile += $(libjava_dir)/.libs/libgcj.a
+#final_compile += $(libjava_dir)/../boehm-gc/.libs/libgcjgc.a
+#final_compile += -lgcc
+#final_compile += -lm
+#final_compile += -lpthread
+#final_compile += -lgcc
+#final_compile += -lcrt1.o
+#final_compile += -lcrt2.o
+#final_compile += -lSystem
+endif
+
+
+ifneq ($(target_bin_extension),jar)
+build/$(platform)/$(target_bin): build/$(platform)/ibex.pruned.jar src/org/ibex/plat/*.cc build/$(platform)/builtin.o $(java_headers)
+
+ @echo -e "\n\033[1mlinking .jar -> $(target_bin).phat\033[0m"
+ifneq ($(platform),Darwin)
+# -Os
+ cd build/$(platform); $(shell pwd)/upstream/install/bin/$(target)-gcj \
+ -fCLASSPATH=$(shell pwd)/upstream/install/share/java/libgcj-3.3.jar \
+ -finhibit-reflection \
+ -fno-store-check \
+ -c java/lang/Class.class
+ cd upstream/gcc-3.3/src/libjava/java/lang;\
+ ln -sf ../../../../build-$(target)/$(target)/libjava/java/lang/natConcreteProcess.cc
+endif
+# we need -fno-store-check since we can't dynamically resolve references to array classes
+ PATH=upstream/install/bin:$$PATH upstream/install/bin/$(target)-gcj $(final_compile) -o $@.phat
+
+ifneq ($(platform),Darwin)
+ @echo; ls -l $@.phat
+
+ @echo -e "\n\033[1mstripping $(target_bin).phat -> $(target_bin)\033[0m"
+ strip $@.phat -o $@
+ @echo; ls -l $@.phat
+
+ @echo -e "\n\033[1mcompressing $(target_bin) -> $(target_bin)\033[0m"
+ upx-ucl-beta $@
+ @echo; ls -l $@.phat
+else
+ mv $@.phat $@
+endif
+endif
+
+### Builtin Resources ##############################################################################
+
+builtin_src := $(shell find src/org/ibex/core/builtin -name '*.*' \! -name '*.xcf')