-propose-patch:
- @echo -n "Please type a one-line description of this bug: "; \
- read A; \
- echo; \
- echo "Please type any additional comments that explain this patch."; \
- echo "If this patch fixes a bug, include a link to bugs.xwt.org."; \
- echo "When you are done, press control-d on a new line."; \
- echo; \
- ( echo -e "HELO patcher"; \
- echo -e "MAIL FROM:$(USER)@xwt.org"; \
- echo -e "RCPT TO: patches@xwt.org"; \
- echo -e "DATA"; \
- echo -e "From: $(USER)@xwt.org"; \
- echo -e "To: patches@xwt.org"; \
- echo -e "Subject: proposed patch to $(this_branch): $$A"; \
- echo -e ""; \
- cat; \
- echo; \
- cvs diff -Bud; \
- echo .; \
- ) > .message
- bash -c "cat .message > /dev/tcp/mail.xwt.org/25" # /dev/tcp is faked by bash; not part of the os
-
-## GCJ-Derived Platforms #######################################################################
-
-# if the user doesn't change gcc_path, and it's not built, then we'll try to build it
-$(shell pwd)/gcc/bin/$(target)-gcj:
- cd gcc; make
-
-gcj: compile $(gcc_path)/bin/$(target)-gcj .headers link
-
-link: $(java_objects) $(cc_objects) $(c_objects) bin-$(platform)/org/xwt/builtin.o
- echo "linking .o -> $(target_bin)"
- $(ar) r bin-$(platform)/org/xwt/plat/platform.ar bin-$(platform)/org/xwt/plat/*.o
- $(gcj) --main=org.xwt.Main -o bin-$(platform)/$(target_bin) $^ -lstdc++ $(platform_link) bin-$(platform)/org/xwt/plat/platform.ar
-
-.headers: $(java_classes)
- cd bin; for A in `find * -name \*.class`; do \
- echo "extracting .class -> .h: $$A"; \
- $(gcjh) --classpath . `echo $$A | sed s_/_._g | sed s/.class$$//`; \
- done
- echo "extracting .class -> .h: done"
- touch .headers
-
-# turn off optimization of Trap.java due to a compiler bug
-bin-$(platform)/org/xwt/Trap.o: gcj_flags := -O0 -g
-
-# unpack and patch the ijg library
-src/org/ijg/jmorecfg.h: src/org/ijg/jpegsrc.v6b.tar.gz src/org/ijg/jmorecfg.h.patch
- cd src/org/ijg/; tar xzf jpegsrc.v6b.tar.gz
- cd src/org/ijg/jpeg-6b; ./configure --target=$(target)
- cd src/org/ijg/jpeg-6b; mv $(jpeg_c_sources) $(jpeg_headers) ..
- cd src/org/ijg; patch -p0 < jmorecfg.h.patch
- rm -rf src/org/ijg/jpeg-6b
-
-$(java_objects): bin-$(platform)/%.java.o: src/%.java $(java_classes)
- @echo "compiling .java -> .o: $<"
- @mkdir -p `dirname $@`
- $(gcj) -c $< -o $@
-
-$(cc_objects): bin-$(platform)/%.cc.o: src/%.cc src/org/ijg/jmorecfg.h
- @echo "compiling .cc -> .o: $<"
- @mkdir -p `dirname $@`
- $(g++) -Ibin -c $< -o $@
-
-$(c_objects): bin-$(platform)/%.c.o: src/%.c src/org/ijg/jmorecfg.h
- @echo "compiling .c -> .o: $<"
- @mkdir -p `dirname $@`
- $(gcc) -Ibin -c $< -o $@
-
-bin-$(platform)/org/xwt/builtin.o: bin/org/xwt/builtin.xwar
- @echo "wrapping .xwar -> .o"
- $(gcj) --resource org/xwt/builtin.xwar -c $< -o $@
-
-
-
-## Platforms ##############################################################################
-
-Linux:
- echo -e "\\n=== Linux ========================================="
- make gcj \
- platform=Linux \
- target=i686-pc-linux-gnu \
- target_bin=xwt.linux \
- platform_link="-L$(gcc-path)/lib -L/usr/X11R6/lib -lX11 -lXext --static" \
- platform_java_sources="src/org/xwt/plat/POSIX.java src/org/xwt/plat/X11.java"
-
-Win32:
- echo -e "\\n=== Win32 ========================================="
- make gcj \
- platform=Win32 \
- target=i686-pc-mingw32 \
- target_bin=xwt.exe \
- platform_link="-Wl,--subsystem,windows -lcomdlg32" \
- platform_java_sources=src/org/xwt/plat/Win32.java
-
-Java2: $(java_classes) bin/org/xwt/builtin.xwar
- echo -e "\\n=== Java2 ========================================="
- echo "archiving .class -> .jar"
- mkdir -p bin-Java2
- echo -e "Manifest-Version: 1.0\nMain-Class: org.xwt.Main\n" > bin/.manifest
- cd bin; $(jar) cvfm ../bin-Java2/xwt.jar .manifest \
- org/xwt/builtin.xwar \
- `find . -name \*.class | grep -v org/xwt/plat/` \
- org/xwt/plat/AWT*.class org/xwt/plat/Java2*.class | tr \\012 \\015
- echo
-
-$(java2_objects:bin/%=%)
-
-PalmOS:
- echo "PalmOS is not yet supported"
- false
-
-
-## master.dist.xwt.org ############################################################################
+gcj: .install_gcc-3.3_$(target)
+ @make build/$(platform)/$(target_bin) link_flags="$(link_flags)" platform=$(platform)
+
+include Makefile.upstream
+
+# find the superclasses of a platform class
+#superclass_%:
+# @if [ "$*" = "org.ibex.plat.Darwin" ]; then echo org.ibex.plat.OpenGL; fi
+# @echo $*
+# @grep -s extends src/$(subst .,/,$*).java | sed s_.\*extends\ __ | head -n 1 | sed s_\ .\*__ |\
+# xargs --replace make -s superclass_org.ibex.plat.{}
+
+plat_classes_Platform := org.ibex.plat.Platform
+plat_classes_AWT := org.ibex.plat.AWT $(plat_classes_Platform)
+plat_classes_Java2 := org.ibex.plat.Java2 org.ibex.plat.JVM $(plat_classes_AWT)
+plat_classes_GCJ := org.ibex.plat.GCJ $(plat_classes_Platform)
+plat_classes_Win32 := org.ibex.plat.Win32 $(plat_classes_GCJ)
+plat_classes_POSIX := org.ibex.plat.POSIX $(plat_classes_GCJ)
+plat_classes_X11 := org.ibex.plat.X11 $(plat_classes_POSIX)
+plat_classes_Linux := org.ibex.plat.Linux $(plat_classes_X11)
+plat_classes_Solaris := org.ibex.plat.Solaris $(plat_classes_X11)
+plat_classes_Darwin := org.ibex.plat.Darwin org.ibex.plat.OpenGL $(plat_classes_POSIX)
+
+plat_java_src_sources := $(patsubst %,build/java/%.java,$(subst .,/,$(plat_classes_$(platform))))
+java_src_sources := $(shell find src -name '*.java' | grep -v NanoGoat | grep -v Preprocessor | grep -v /plat/)
+java_src_sources += $(plat_java_src_sources)
+java_sources := $(patsubst src/%.java, build/java/%.java, $(java_src_sources))
+
+java_sources += build/java/org/ibex/nestedvm/util/Seekable.java
+java_sources += build/java/org/ibex/nestedvm/util/Platform.java
+java_sources += build/java/org/ibex/nestedvm/Registers.java
+java_sources += build/java/org/ibex/nestedvm/Runtime.java
+java_sources += build/java/org/ibex/nestedvm/UsermodeConstants.java
+
+java_sources += build/java/org/ibex/crypto/DER.java
+java_sources += build/java/org/ibex/crypto/Digest.java
+java_sources += build/java/org/ibex/crypto/HMAC.java
+java_sources += build/java/org/ibex/crypto/MD2.java
+java_sources += build/java/org/ibex/crypto/MD5.java
+java_sources += build/java/org/ibex/crypto/PKCS1.java
+java_sources += build/java/org/ibex/crypto/RC4.java
+java_sources += build/java/org/ibex/crypto/RSA.java
+java_sources += build/java/org/ibex/crypto/SHA1.java
+java_sources += build/java/org/ibex/crypto/X509.java
+java_sources += build/java/org/ibex/crypto/Base64.java
+java_sources += build/java/org/ibex/net/ssl/RootCerts.java
+java_sources += build/java/org/ibex/net/SSL.java
+
+java_sources += build/java/gnu/regexp/CharIndexed.java
+java_sources += build/java/gnu/regexp/CharIndexedCharArray.java
+java_sources += build/java/gnu/regexp/CharIndexedInputStream.java
+java_sources += build/java/gnu/regexp/CharIndexedString.java
+java_sources += build/java/gnu/regexp/CharIndexedStringBuffer.java
+java_sources += build/java/gnu/regexp/RE.java
+java_sources += build/java/gnu/regexp/REException.java
+java_sources += build/java/gnu/regexp/REFilterInputStream.java
+java_sources += build/java/gnu/regexp/REMatch.java
+java_sources += build/java/gnu/regexp/REMatchEnumeration.java
+java_sources += build/java/gnu/regexp/RESyntax.java
+java_sources += build/java/gnu/regexp/REToken.java
+java_sources += build/java/gnu/regexp/RETokenAny.java
+java_sources += build/java/gnu/regexp/RETokenBackRef.java
+java_sources += build/java/gnu/regexp/RETokenChar.java
+java_sources += build/java/gnu/regexp/RETokenEnd.java
+java_sources += build/java/gnu/regexp/RETokenEndSub.java
+java_sources += build/java/gnu/regexp/RETokenLookAhead.java
+java_sources += build/java/gnu/regexp/RETokenWordBoundary.java
+java_sources += build/java/gnu/regexp/RETokenOneOf.java
+java_sources += build/java/gnu/regexp/RETokenPOSIX.java
+java_sources += build/java/gnu/regexp/RETokenRange.java
+java_sources += build/java/gnu/regexp/RETokenRepeated.java
+java_sources += build/java/gnu/regexp/RETokenStart.java
+java_sources += build/java/gnu/regexp/UncheckedRE.java
+java_sources += build/java/gnu/regexp/CharIndexedReader.java
+java_sources += build/java/gnu/regexp/REFilterReader.java
+
+java_classes := $(java_sources:build/java/%.java=build/class/%.class)
+java_classes += build/class/gnu/regexp/CharUnit.class build/class/gnu/regexp/IntPair.class
+java_classes += build/class/org/ibex/util/MIPSApps.class
+
+### Java Source Files ##############################################################################
+
+$(java_sources):: .download_org.ibex.crypto .download_org.ibex.nestedvm .download_gnu.regexp-1.1.4
+link_upstream = build/java/$(1):: $(2)/$(1) $(3); \
+ @echo -e "\033[1mlinking .java -> .java: $$@\033[0m"; \
+ mkdir -p $$(@D); ln -fs `echo $$(@D)/ | sed 's_[^/]*//*_../_g'`/$$< $$@
+build/cc/%.cc: src/%.c ; @echo linking $@; mkdir -p $(@D); ln -fs `echo $(@D)/ | sed 's_[^/]*//*_../_g'`/$< $@
+build/res/%: src/% ; @echo linking $@; mkdir -p $(@D); ln -fs `echo $(@D)/ | sed 's_[^/]*//*_../_g'`/$< $@
+$(call link_upstream,org/ibex/nestedvm/%.java,upstream/org.ibex.nestedvm/src,.download_org.ibex.nestedvm)
+$(call link_upstream,org/ibex/crypto/%.java,upstream/org.ibex.crypto/src,.download_org.ibex.crypto)
+$(call link_upstream,org/ibex/net/ssl/%.java,upstream/org.ibex.crypto/src,.download_org.ibex.crypto)
+$(call link_upstream,org/ibex/net/SSL.java,upstream/org.ibex.crypto/src,.download_org.ibex.crypto)
+$(call link_upstream,gnu/regexp/%.java,upstream/gnu.regexp-1.1.4/src/src)
+build/java/org/ibex/%.java: src/org/ibex/%.java .download_gnu.regexp-1.1.4 build/class/org/ibex/util/Preprocessor.class
+ @echo -e "\033[1mpreprocessing .java -> .java: $<\033[0m"
+ mkdir -p `dirname $@`; java -cp build/class:upstream/gnu.regexp-1.1.4/src/src org.ibex.util.Preprocessor < $< > $@
+$(call link_upstream,%.java,src)
+$(call link_upstream,%.cc,src)
+
+
+### Java Class Files ##############################################################################
+
+build/class/org/ibex/util/Preprocessor.class: src/org/ibex/util/Preprocessor.java
+ @mkdir -p build/class/gnu/regexp build/class/org/ibex/util
+ $(javac) $< src/org/ibex/util/Vec.java upstream/gnu.regexp-1.1.4/src/src/gnu/regexp/*.java
+
+compile: .compile
+.compile: $(java_sources)
+ @echo -e "\n\033[1mcompiling .java -> .class\033[0m"
+ @echo $(java_sources) | tr ' ' '\n' | sed 's_build/java/_ _' | sed 's_/_._g' | sed 's_.java$$__g'
+ @make -s $(java_sources)
+ $(javac) $(java_sources)
+ touch $@
+
+build/class/org/ibex/util/MIPSApps.class: build/mips/mipsapps.mips .install_org.ibex.nestedvm
+ @mkdir -p build/java/org/ibex/util
+ @echo -e "\n\033[1mtranslating .mips -> .class: $<\033[0m"
+ java -cp upstream/org.ibex.nestedvm/build:upstream/org.ibex.nestedvm/upstream/build/classgen/build \
+ org.ibex.nestedvm.Compiler org.ibex.util.MIPSApps $< -outfile $@
+
+build/Java2/ibex.jar: compile build/res/builtin.jar build/class/org/ibex/util/MIPSApps.class
+ @echo -e "\n\033[1marchiving .class -> .jar: build/Java2/ibex.jar\033[0m"
+ mkdir -p build/Java2
+ echo -e "Manifest-Version: 1.0\nMain-Class: org.ibex.core.Main\n" > build/Java2/.manifest
+ cd build/class/org/ibex; ln -sf ../../../res/builtin.jar
+ cd build/class; $(jar) cfm ../Java2/ibex.jar ../Java2/.manifest `find . -name \*.class -or -name \*.jar`
+
+
+### Headers ##################################################################################
+
+java_headers := $(java_sources:build/java/%.java=build/h/%.h)
+build/h/%.h: build/class/%.class .compile
+ @echo -e "\n\033[1mextracting .class -> .h: $<\033[0m"
+ mkdir -p `dirname $@`
+ ls `echo $< | sed s/.class\$$//`*.class |\
+ sed s_build/class/__ | sed s/.class\$$//g | sed s_/_._g | (cd build/class; xargs $(gcjh) -d ../h --classpath .)
+
+
+### Native Code ##############################################################################
+
+# a hack since we've disabled gcj's awt implementation
+build/$(platform)/org/ibex/plat/Linux.cc.o: .install_WindowMaker-0.80.2_$(target)
+build/$(platform)/org/ibex/plat/Solaris.cc.o: .install_WindowMaker-0.80.2_$(target)
+
+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/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)/%)
+nat_libjava_files += $(libjava_dir)/java/io/natFile.o $(libjava_dir)/java/io/natFileDescriptor.o
+
+build/$(platform)/org/ibex/plat/$(platform).cc.o: src/org/ibex/plat/$(platform).cc src/org/ibex/plat/*.cc .configure_jpeg-6b_$(target)
+ @make $(java_headers)
+ @echo -e "\n\033[1mcompiling .cc -> .o: $<\033[0m"
+ mkdir -p `dirname $@`
+ $(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/ibex/nestedvm/* org/ibex/nestedvm/; 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