X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=blobdiff_plain;f=Makefile;h=671af44db84af497fe2b64fc16c2c7f1f39cf2cd;hp=cb554f0e4faa6fbaaa403f6a062566e17b9ca213;hb=769cf53f52755d6b8c976edb561e3c21700447aa;hpb=ab47671aab80c10b57b74c8eb7e240b79e352b99 diff --git a/Makefile b/Makefile index cb554f0..671af44 100644 --- 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 ##############################################################################