- $(g++) -c $< -o $@
-
-nonplat_java_sources := $(filter-out build/java/org/ibex/plat/$(platform).java,$(java_sources))
-build/$(platform)/$(platform).ar: $(nonplat_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 $@
-
-upstream/jpeg-6b/build-$(target)/libjpeg.a: .install_jpeg-6b_$(target)
-
-# note: binaries appear in a different order in the dependency line vs the link line
-build/$(platform)/$(target_bin): upstream/jpeg-6b/build-$(target)/libjpeg.a
- @echo -e "\n\033[1mlinking .o -> $(target_bin)\033[0m"
-
- rm -rf build/$(platform)/*
- make build/$(platform)/org/ibex/plat/$(platform).cc.o
- make build/$(platform)/builtin.o
-
- cd upstream/gcc-3.3/build-$(target)/$(target)/libjava; \
- (find . -name nat\*.o | grep -v JIS; \
- echo boehm.o;\
- echo defineclass.o;\
- echo exception.o;\
- echo posix-threads.o;\
- echo posix.o;\
- echo prims.o;\
- echo jni.o;\
- echo resolve.o;\
- echo libltdl/ltdl.o;\
- find java gnu -name \*.o -not -name '*[A-Z]*'; \
- ) > $(shell pwd)/.natbins
-
-
- cd upstream/gcc-3.3/build-$(target)/$(target)/libjava;\
- (cat $(shell pwd)/.natbins; echo $(shell pwd)/build/$(platform)/org/ibex/plat/$(platform).cc.o) |\
- grep -v shs | grep -v SHS |xargs nm |\
- grep _ZN | c++filt --format java | grep " U " | sed 's_\.class\$$_.class_' | sed 's_ * U __' | sed 's_(.*__' \
- > $(shell pwd)/.natcalls
-
- rm -rf build/pruned; mkdir -p build/pruned
- javac -classpath lib/bcel-5.1.jar:build/class -d build/class src/org/ibex/util/BytecodePruner.java
- rm -f build/$(platform)/ibex.jar
- cd build/class; \
- fastjar cf ../$(platform)/ibex.jar \
- `find . -name \*.class | grep -v ibex/plat/` \
- org/ibex/plat/$(platform)*.class \
- org/ibex/plat/X11*.class \
- org/ibex/plat/GCJ*.class \
- org/ibex/plat/POSIX*.class
- java -cp lib/bcel-5.1.jar:build/class org.ibex.util.BytecodePruner \
- build/$(platform)/ibex.jar:upstream/install/share/java/libgcj-3.3.jar \
- -o build/pruned \
- `cat .natcalls`
-
- rm build/pruned/org/ibex/plat/GCJ*.class
- cp build/java/org/ibex/plat/GCJ.java build/pruned/org/ibex/plat/
- cp upstream/gcc-3.3/build-$(target)/$(target)/libjava/java/lang/Object.class build/pruned/java/lang/
-
- rm -f build/pruned/java/lang/System*.*
- cp upstream/gcc-3.3/src/libjava/java/lang/System.java build/pruned/java/lang/
-
- cd build/pruned; \
- for A in `find gnu/gcj java/lang java/net -name \*.class -or -name \*.java`; do \
- echo compiling $$A....; \
- ../../upstream/install/bin/$(target)-gcj \
- -w -c -Os \
- -fCLASSPATH=../../build/$(platform)/ibex.jar \
- -fassume-compiled \
- $$A && \
- (mkdir -p ../../build/$(platform)/`dirname $$A`; mv *.o ../../build/$(platform)/`dirname $$A`); \
- done
-
- cd build/pruned; rm -rf gnu/gcj java/lang java/net
- cd build/pruned; \
- for A in `find . -name \*.class -or -name \*.java`; do \
- echo compiling $$A....; \
- ../../upstream/install/bin/$(target)-gcj \
- -w -c -Os \
- -fassume-compiled \
- -ffunction-sections \
- -fdata-sections \
- -fomit-frame-pointer \
- -fno-force-mem \
- -fno-force-addr \
- -fmerge-all-constants \
- -fCLASSPATH=../../build/$(platform)/ibex.jar \
- $$A && \
- (mkdir -p ../../build/$(platform)/`dirname $$A`; mv *.o ../../build/$(platform)/`dirname $$A`); \
- done
-# -fnew-ra \
-
- rm -f build/$(platform)/ibex.a
-
- cd upstream/gcc-3.3/build-$(target)/$(target)/libjava; \
- $(shell pwd)/upstream/install/$(target)/bin/ar cq \
- $(shell pwd)/build/$(platform)/ibex.a \
- `find $(shell pwd)/build/$(platform) -name \*.o`
-
- 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 \
- `cat $(shell pwd)/.natbins`
- PATH=upstream/install/bin:$$PATH upstream/install/bin/$(target)-gcj \
- -Wl,-O2,--relax,--gc-sections,--noinhibit-exec \
- --main=org.ibex.plat.$(platform) \
- -Dfile.encoding=UTF8 \
- -Lupstream/install/$(target)/lib \
- -Lupstream/install/lib \
- -Os -w \
- -Wl,--whole-archive \
- build/$(platform)/ibex.a \
- -Wl,--no-whole-archive,--gc-sections \
- build/$(platform)/natibex.a \
- upstream/jpeg-6b/build-$(target)/libjpeg.a \
- $(link_flags) \
- upstream/gcc-3.3/build-$(target)/$(target)/boehm-gc/.libs/libgcjgc.a \
- -lz -ldl \
- -o $@
-# strip build/Linux/ibex.linux
-# ls -l build/Linux/ibex.linux
-# upx-ucl-beta --best build/Linux/ibex.linux
-# ls -l build/Linux/ibex.linux
-
+ $(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"
+ 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 $@
+
+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
+
+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"
+# -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
+# 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 \
+ -Wl,-O2,--relax,--gc-sections,--noinhibit-exec,--no-whole-archive \
+ --main=org.ibex.plat.$(platform) \
+ -Dfile.encoding=UTF8 \
+ -DPREFIX=\"\" \
+ -Lupstream/install/$(target)/lib -Lupstream/install/lib \
+ -finhibit-reflection \
+ -fno-store-check \
+ -w -g \
+ -Iupstream/jpeg-6b/build-$(target)/ \
+ -Iupstream/jpeg-6b/src \
+ -Ibuild/h \
+ -Iupstream/gcc-3.3/src/gcc \
+ -Iupstream/gcc-3.3/build-i686-pc-linux-gnu/i686-pc-linux-gnu/boehm-gc/ \
+ -Iupstream/gcc-3.3/build-i686-pc-linux-gnu/i686-pc-linux-gnu/boehm-gc/include \
+ -Iupstream/gcc-3.3/src/boehm-gc \
+ -Iupstream/gcc-3.3/src/boehm-gc/include \
+ -Iupstream/gcc-3.3/build-i686-pc-linux-gnu/i686-pc-linux-gnu/libjava/ \
+ -Iupstream/gcc-3.3/build-i686-pc-linux-gnu/i686-pc-linux-gnu/libjava/include \
+ -Iupstream/gcc-3.3/src/libjava \
+ -Iupstream/gcc-3.3/src/libjava/include \
+ -Ufile \
+ build/$(platform)/ibex.pruned.jar \
+ src/org/ibex/plat/$(platform).cc \
+ $(nat_libjava_files_:%.o=$(shell pwd)/upstream/gcc-3.3/src/libjava/%.c*) \
+ $(filedes) \
+ build/$(platform)/builtin.o \
+ upstream/jpeg-6b/build-$(target)/libjpeg.a \
+ $(link_flags) \
+ $(libjava_dir)/../boehm-gc/.libs/libgcjgc.a \
+ build/$(platform)/Class.o \
+ $(libjava_dir)/gnu/gcj/runtime/FirstThread.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