pruner mostly working
[org.ibex.core.git] / Makefile
index cb554f0..671af44 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -3,6 +3,8 @@
 # The Ibex Makefile
 #
 
+#  auto directory creation with %/%: %?
+
 target_Darwin := powerpc-apple-darwin
 target_Win32  := i686-pc-mingw32
 target_Solaris := sparc-sun-solaris2.7
@@ -178,7 +180,7 @@ build/$(platform)/org/ibex/plat/AWT.java.o:   ; touch .empty.c; mkdir -p $(@D);
 build/$(platform)/%.java.o: build/class/%.class
        @echo -e "\n\033[1mcompiling          .java -> .o:     $<\033[0m"
        mkdir -p `dirname $@`
-       $(gcj) -fCLASSPATH=build/class -c $< -o $@
+       $(gcj) -fCLASSPATH=build/pruned -c $< -o $@
 
 # FIXME detect subclasses of X11
 build/$(platform)/org/ibex/plat/Linux.cc.o: .install_WindowMaker-0.80.2_$(target) 
@@ -203,6 +205,10 @@ 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 build/$(platform)/builtin.o build/$(platform)/org/ibex/plat/$(platform).cc.o
        @echo -e "\n\033[1mlinking               .o -> $(target_bin)\033[0m"
+       find upstream/gcc-3.3/build-i686-pc-linux-gnu/i686-pc-linux-gnu/libjava/ \
+               -name nat\*.o -or \( -name \*.o -not -name '*[A-Z]*' \) -exec nm {} \; |\
+                grep _ZN | c++filt --format java | grep " U " | sed 's_\.class\$$_.class_' | sed 's_ * U __' | sed 's_(.*__' \
+               > .natcalls
        make $(java_sources)
        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
@@ -215,43 +221,79 @@ build/$(platform)/$(target_bin): upstream/jpeg-6b/build-$(target)/libjpeg.a buil
                        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
-#      rm -rf out/java/awt
-#      rm -f out/java/lang/*.*
-#      rm -f out/java/lang/reflect/*
-#      mkdir -p out/java/lang/ref
-#      mkdir -p out/java/lang/reflect
-#      cp upstream/gcc-3.3/src/libjava/java/lang/*.java out/java/lang/
-#      cp upstream/gcc-3.3/src/libjava/java/lang/ref/*.java out/java/lang/ref/
-#      cp upstream/gcc-3.3/src/libjava/java/lang/reflect/*.java out/java/lang/reflect/
+               build/$(platform)/ibex.jar:upstream/install/share/java/libgcj-3.3.jar \
+               -o build/pruned \
+               `cat .natcalls`
+
        rm -rf build/pruned/org/ibex/js/*; cp build/java/org/ibex/js/* build/pruned/org/ibex/js/
+
        rm build/pruned/java/lang/System.class
        cp upstream/gcc-3.3/src/libjava/java/lang/System.java build/pruned/java/lang/
-       cd build/pruned;                                               \
-               for A in `find . -name \*.class -or -name \*.java`; do \
-                       echo compiling $$A....;                        \
-                       ../../upstream/install/bin/$(target)-gcj -w -c -fCLASSPATH=../../build/class $$A &&                     \
+
+       rm build/pruned/gnu/gcj/runtime/FirstThread*.class
+       cp upstream/gcc-3.3/src/libjava/gnu/gcj/runtime/FirstThread.java build/pruned/gnu/gcj/runtime/
+
+       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/
+
+       find build/pruned/gnu/java/locale/ -name 'LocaleInformation_*' -not -name 'LocaleInformation_en.class' -not -name 'LocaleInformation_en_US.class' -exec rm {} \;
+
+#      cd build/pruned; fastjar cvf ../../tmp.jar .
+#      java -jar lib/jarg.jar -verbose -verboseufm -normlv -normsf -normsy -normin \
+#                              -normex -nornc -nornf -nornm -nobco tmp.jar
+#      cd build/pruned; fastjar xvf ../../tmp.jar
+
+# try oneshot compile/link
+# --redefine-sym to merge errorthrowers?   or do this in C++?
+# --rename-section to try to merge Utf8 sections?
+
+       cd build/pruned;                                                  \
+               for A in `find . -name \*.class -or -name \*.java`; do    \
+                       echo compiling $$A....;                           \
+                       ../../upstream/install/bin/$(target)-gcj          \
+                               -fdata-sections -ffunction-sections -w -c -Os \
+                               -fCLASSPATH=../../build/$(platform)/ibex.jar $$A &&                     \
                                (mkdir -p ../../build/$(platform)/`dirname $$A`; mv *.o ../../build/$(platform)/`dirname $$A`); \
                done
        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 . -name nat\*.o`                           \
+                       boehm.o  defineclass.o  exception.o              \
+                       posix-threads.o  posix.o  prims.o  resolve.o     \
+                       `find . -name nat\*.o | grep -v JIS`             \
                        `find . -name \*.o -not -name '*[A-Z]*'`         \
-                       $(shell pwd)/build/$(platform)/org/ibex/plat/$(platform).cc.o \
                        `find $(shell pwd)/build/$(platform) -name \*.o`
        PATH=upstream/install/bin:$$PATH upstream/install/bin/$(target)-gcj \
                --main=org.ibex.plat.$(platform)                            \
                -Lupstream/install/$(target)/lib                            \
                -Lupstream/install/lib                                      \
+               -ffunction-sections -fdata-sections -Os -w -fCLASSPATH=build/$(platform)/ibex.jar \
                build/$(platform)/ibex.a                                    \
                upstream/jpeg-6b/build-$(target)/libjpeg.a                  \
                $(link_flags)                                               \
                upstream/gcc-3.3/build-$(target)/$(target)/boehm-gc/.libs/libgcjgc.a \
                -lz -ldl -lffi                                                   \
+               -Wl,--noinhibit-exec,--gc-sections \
                -o $@
 
+# linker
+# --no-whole-archive,--relax,-O,2
+# 
+#                              -fomit-frame-pointer \
+#                              -fno-force-mem \
+#                              -fno-force-addr \
+#                              -fno-inline-functions \
+#                              -fnew-ra \
+#                              -fbranch-probabilities \
+#                              -finline-limit=1 \
+#                              -fno-schedule-insns \
+#                              -fno-optimize-sibling-calls \
+#                              -fno-if-conversion \
+#                              -fno-thread-jumps \
+#                              -fno-hosted \
 
 
 ### Builtin Resources ##############################################################################