- $(gcc) -Ibuild/h -c $< -o $@
-
-# PHASE 5: linking
-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)
-$(target_bin): upstream/jpeg-6b/build-$(target)/libjpeg.a $(java_sources:build/java/%.java=build/$(platform)/%.java.o) build/$(platform)/org/xwt/plat/$(platform).cc.o
- @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) $^ $(jpeg_sources:%.c=upstream/jpeg-6b/build-$(target)/%.o) -Lupstream/install/$(target)/lib $(link_flags)
-
-
-##############################################################################
-# Special treatment:
-#
-
-#build/java/org/xwt/Builtin.java: $(shell ls src/org/xwt/builtin/*.png src/org/xwt/builtin/*.xwt src/org/xwt/builtin/*.xwf)
-# @mkdir -p `dirname $@` build build/java build/class build/h build
-# echo -e "\n\033[1mzipping/uuencoding .xwt -> .java: build/java/org/xwt/Builtin.java\033[0m"
-# echo "package org.xwt;" > build/java/org/xwt/Builtin.java
-# echo "class Builtin {" >> build/java/org/xwt/Builtin.java
-# echo "public static String encoded = " >> build/java/org/xwt/Builtin.java
-# cd src; $(jar) cf ../.builtin.xwar $(^:src/%=%)
-# mimencode .builtin.xwar | sed s_.\*_\"\\0\"\ +_ >> build/java/org/xwt/Builtin.java
-# echo "\"\"; }" >> build/java/org/xwt/Builtin.java
-
-
-# compile is here to force compilation of the .class files (they get used via -Ibuild) without
-# having the individual .o's depend on the .java's (otherwise every .o gets recompiled when one .java changes)
-gcj: .compile .vendor .install_gcc-3.3_$(target) $(target_bin)
-build/JVM/xwt.jar: .compile
- @echo -e "\n\033[1marchiving .class -> .jar: build/JVM/xwt.jar\033[0m"
- mkdir -p build/JVM
- echo -e "Manifest-Version: 1.0\nMain-Class: org.xwt.Main\n" > build/JVM/.manifest
- cd build/class; $(jar) cfm ../JVM/xwt.jar ../JVM/.manifest `find . -name \*.class`;
-
-
-
-##############################################################################
-# Freetype
-#
+ $(g++) -c $< -o $@
+
+libjava_dir := $(shell pwd)/upstream/gcc-3.3/build-$(target)/$(target)/libjava
+nat_libjava_files_ := boehm.o exception.o posix-threads.o posix.o prims.o resolve.o java/net/natInetAddress.o
+nat_libjava_files_ += java/net/natPlainSocketImpl.o java/io/natFile*.o java/util/zip/nat*.o gnu/gcj/runtime/natFirstThread.o
+nat_libjava_files_ += gnu/gcj/runtime/natNameFinder.o gnu/gcj/runtime/natStackTrace.o gnu/gcj/runtime/natSharedLibLoader.o
+nat_libjava_files_ += gnu/gcj/runtime/natStringBuffer.o gnu/gcj/runtime/natVMClassLoader.o gnu/gcj/runtime/natFinalizerThread.o
+nat_libjava_files_ += $(shell cd $(libjava_dir) 2>/dev/null; find java/lang -name \*.o -not -name '*[A-Z]*' 2>/dev/null)
+nat_libjava_files_ += $(shell cd $(libjava_dir) 2>/dev/null; find java/lang -name nat\*.o 2>/dev/null)
+nat_libjava_files := $(nat_libjava_files_:%=$(libjava_dir)/%)
+
+build/$(platform)/natibex.a: $(nat_libjava_files)
+ @echo -e "\n\033[1mdetecting CNI calls...\033[0m"
+ rm -f build/$(platform)/natibex.a
+ cd upstream/gcc-3.3/build-$(target)/$(target)/libjava; \
+ $(shell pwd)/upstream/install/$(target)/bin/ar cq \
+ $(shell pwd)/build/$(platform)/natibex.a \
+ $^
+
+bcel_jar := upstream/bcel-5.1/src/bcel-5.1.jar
+build/$(platform)/ibex.pruned.jar: .compile .install_jpeg-6b_$(target) build/$(platform)/builtin.o build/$(platform)/natibex.a
+ @echo -e "\n\033[1mpruning .jar -> .jar\033[0m"
+ cp upstream/install/share/java/libgcj-3.3.jar build/$(platform)/ibex.jar
+ cd build/class; jar uf ../$(platform)/ibex.jar $(patsubst build/java/%.java,%*.class,$(java_sources)) gnu/regexp/*
+ nm build/$(platform)/natibex.a |\
+ grep _ZN | c++filt --format java | grep " U " | sed 's_\.class\$$_.class_' | sed 's_ * U __' | sed 's_(.*__' \
+ | java -cp $(bcel_jar):build/class org.ibex.util.NanoGoat build/$(platform)/ibex.jar
+ mkdir tmp; cd tmp; fastjar xvf ../build/$(platform)/ibex.jar.pruned; 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 $@
+
+ifneq ($(target_bin_extension),jar)
+build/$(platform)/$(target_bin): build/$(platform)/ibex.pruned.jar build/$(platform)/natibex.a build/$(platform)/org/ibex/plat/$(platform).cc.o build/$(platform)/builtin.o
+
+ @echo -e "\n\033[1mlinking .jar -> $(target_bin).phat\033[0m"
+# PATH=upstream/install/bin:$$PATH $(gcj)
+# -Os -w
+ cd build/$(platform); $(shell pwd)/upstream/install/bin/$(target)-gcj \
+ -fCLASSPATH=$(shell pwd)/upstream/install/share/java/libgcj-3.3.jar \
+ -c java/lang/Class.class
+ PATH=upstream/install/bin:$$PATH upstream/install/bin/$(target)-gcj \
+ -Wl,-O2,--relax,--gc-sections,--noinhibit-exec,--no-whole-archive \
+ --main=org.ibex.plat.$(platform) \
+ -Dfile.encoding=UTF8 \
+ -Lupstream/install/$(target)/lib -Lupstream/install/lib \
+ -w \
+ build/$(platform)/org/ibex/plat/$(platform).cc.o \
+ build/$(platform)/ibex.pruned.jar \
+ build/$(platform)/natibex.a \
+ build/$(platform)/builtin.o \
+ upstream/jpeg-6b/build-$(target)/libjpeg.a \
+ $(link_flags) \
+ $(libjava_dir)/../boehm-gc/.libs/libgcjgc.a \
+ build/$(platform)/Class.o \
+ -lz -o $@.phat
+ @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
+endif