1 #############################################################################
6 target_Darwin := powerpc-apple-darwin
7 target_Win32 := i686-pc-mingw32
8 target_Solaris := sparc-sun-solaris2.7
9 target_Linux := i686-pc-linux-gnu
10 target := $(target_$(platform))
12 all: JVM Linux Win32 Darwin Solaris
16 rm -rf .jikes .configure* .install* build .compile .build*
17 find upstream -name config.cache -exec rm {} \;
18 test -e upstream/mips && make -C upstream/mips clean
20 libwing_Linux := -Lupstream/install/i686-pc-linux-gnu/lib/
21 libwing_Linux += upstream/install/i686-pc-linux-gnu/lib/libWINGs.a
22 libwing_Linux += upstream/install/i686-pc-linux-gnu/lib/libwraster.a
24 libwing_Solaris := -Lupstream/install/sparc-sun-solaris2.7/lib/
25 libwing_Solaris += upstream/install/sparc-sun-solaris2.7/lib/libWINGs.a
26 libwing_Solaris += upstream/install/sparc-sun-solaris2.7/lib/libwraster.a
28 JVM: build/JVM/ibex.jar
29 Linux: ; make gcj platform=Linux link_flags="$(libwing_Linux) -lXpm -lX11 -lXext"
30 Solaris: ; make gcj platform=Solaris link_flags="$(libwing_Solaris) -lXpm -lX11 -lXext -lpthread"
31 Win32: ; make gcj platform=Win32 link_flags="-Wl,--subsystem,windows -lcomdlg32"
32 Darwin: ; make gcj platform=Darwin link_flags="$(darwin_linker_flags)"
34 darwin_libdir := upstream/install/powerpc-apple-darwin/lib
35 darwin_linker_flags := -Wl,-dylib_file,/usr/lib/libSystem.B.dylib:$(darwin_libdir)/libSystem.B.dylib
36 darwin_linker_flags += -Wl,-dylib_file,/usr/lib/system/libmathCommon.A.dylib:$(darwin_libdir)/libmathCommon.A.dylib
37 darwin_ogl_libdir := /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries
38 darwin_linker_flags += -Wl,-dylib_file,$(darwin_ogl_libdir)/libGL.dylib:$(darwin_libdir)/libGL.dylib
39 darwin_linker_flags += -Wl,-dylib_file,$(darwin_ogl_libdir):$(darwin_libdir)/libGLU.dylib
40 darwin_linker_flags += -lSystem.B -lmathCommon.A -lGL -lGLU
42 # stupid broke-ass darwin linker...
43 darwin_linker_flags += build/Darwin/org/ibex/plat/OpenGL.java.o build/Darwin/org/ibex/plat/POSIX.java.o
45 target_bin_extension_$(platform) := $(shell echo $(platform) | tr A-Z a-z)
46 target_bin_extension_Win32 := exe
47 target_bin_extension_JVM := jar
48 target_bin_extension := $(target_bin_extension_$(platform))
49 target_bin := ibex.$(target_bin_extension)
51 jikes_flags := -nowarn
52 gcc_optimizations := -O2
53 #gcc_optimizations := -O9 -ffast-math -fomit-frame-pointer -foptimize-sibling-calls
54 #gcc_optimizations += -finline-functions -funroll-loops -ffunction-sections -fdata-sections
56 gcc_flags := -nostdinc $(gcc_optimizations) -Ibuild/h -Iupstream/jpeg-6b/src -Iupstream/jpeg-6b/build-$(target)
57 gcc_flags += -Iupstream/install/lib/gcc-lib/$(target)/3.3/include -Iupstream/install/$(target)/include
58 gcj := upstream/install/bin/$(target)-gcj $(gcc_flags) -fCLASSPATH=build/java
59 gcjh := $(shell pwd)/upstream/install/bin/$(shell test -e upstream/install/bin/$(target)-gcjh && echo $(target)-)gcjh
60 g++ := upstream/install/bin/$(target)-gcj $(gcc_flags) -Iupstream/install/include -Wno-multichar
61 gcc := upstream/install/bin/$(target)-gcc $(gcc_flags)
62 jar := $(shell ((type fastjar &>/dev/null) && echo fastjar) || echo jar)
64 gcj: .install_gcc-3.3_$(target)
66 make build/$(platform)/$(target_bin) link_flags="$(link_flags)" platform=$(platform)
68 include Makefile.upstream
70 java_sources := $(patsubst src/%.java, build/java/%.java, $(shell find src -name '*.java' | grep -v Preprocessor | grep -v plat/AWT | grep -v plat/Java2))
71 java_sources += build/java/org/xwt/mips/Errno.java
72 java_sources += build/java/org/xwt/mips/Unistd.java
73 java_sources += build/java/org/xwt/mips/Syscalls.java
74 java_sources += build/java/org/xwt/mips/Registers.java
75 java_sources += build/java/org/xwt/mips/Runtime.java
76 java_sources += build/java/org/xwt/mips/UnixRuntime.java
77 java_sources += build/java/org/xwt/mips/util/SeekableByteArray.java
78 java_sources += build/java/org/xwt/mips/util/SeekableData.java
79 java_sources += build/java/org/xwt/mips/util/SeekableFile.java
80 java_sources += build/java/org/xwt/mips/util/SeekableInputStream.java
82 build/java/org/xwt/mips/util/%:
83 @test -e .install_mips2java || make .install_mips2java
86 @cd $(@D); ln -sf ../../../../../../upstream/mips/org/xwt/mips/util/$*
88 build/java/org/xwt/mips/%:
89 @test -e .install_mips2java || make .install_mips2java
92 @test -e upstream/mips/build/org/xwt/mips/$* && (cd $(@D); \
93 ln -sf ../../../../../upstream/mips/build/org/xwt/mips/$*); true
94 @test -e upstream/mips/org/xwt/mips/$* && (cd $(@D); \
95 ln -sf ../../../../../upstream/mips/org/xwt/mips/$*); true
98 ### Java Class Files ##############################################################################
100 build/class/org/ibex/translators/MIPSApps.class: build/mips/mipsapps.mips .jikes
101 mkdir -p build/java/org/ibex/translators
102 @echo -e "\n\033[1mtranslating .mips -> .java: $<\033[0m"
103 (echo -e 'package org.ibex.translators;\n'; \
104 java -Xint -cp upstream/mips/build org.xwt.mips.Compiler MIPSApps build/mips/mipsapps.mips) \
105 | sed 's,//.*$$,,;'| tr -d '\n' > build/java/org/ibex/translators/MIPSApps.java
106 @echo -e "\n\033[1mcompiling .java -> .class: $<\033[0m"
107 ./.jikes -g:none build/java/org/ibex/translators/MIPSApps.java
109 build/java/org/ibex/%.java: src/org/ibex/%.java
110 make build/class/org/ibex/util/Preprocessor.class
111 @echo -e "\n\033[1mpreprocessing .java -> .java: $<\033[0m"
112 mkdir -p `dirname $@`; java -cp build/class org.ibex.util.Preprocessor < $< > $@
114 build/java/%.java: src/%.java ; @echo linking $@; mkdir -p $(@D); ln -fs `echo $(@D)/ | sed 's_[^/]*//*_../_g'`/$< $@
115 build/cc/%.cc: src/%.c ; @echo linking $@; mkdir -p $(@D); ln -fs `echo $(@D)/ | sed 's_[^/]*//*_../_g'`/$< $@
116 build/res/%: src/% ; @echo linking $@; mkdir -p $(@D); ln -fs `echo $(@D)/ | sed 's_[^/]*//*_../_g'`/$< $@
118 gnu_regexp_jfiles := $(patsubst src/%.java, build/java/%.java, $(shell find src/gnu/regexp -name \*.java))
119 gnu_regexp := $(patsubst src/%.java, build/class/%.class, $(shell find src/gnu/regexp -name \*.java))
121 build/class/gnu/regexp/%.class: build/java/gnu/regexp/%.java $(gnu_regexp_jfiles) .jikes
122 @echo -e "\n\033[1mcompiling .java -> .class: $<\033[0m"
123 mkdir -p build/class/org/ibex/util/
126 build/class/org/ibex/util/Preprocessor.class: src/org/ibex/util/Preprocessor.java $(gnu_regexp) .jikes
127 @echo -e "\n\033[1mcompiling .java -> .class: $<\033[0m"
128 mkdir -p build/class/org/ibex/util/
129 ./.jikes src/org/ibex/util/Vec.java
132 build/class/%.class: build/java/%.java $(java_sources) .jikes
133 @echo -e "\n\033[1mcompiling .java -> .class: $<\033[0m"
137 oldcompile:; CLASSPATH=$$CLASSPATH:lib/libgcj-minimal.jar:upstream/mips/build javac -target 1.1 -source 1.2 -d build/class `find build/java/ -name \*.java`
139 compile: .jikes .install_mips2java
140 @make -s $(java_sources:build/java/%.java=build/class/%.class)
143 #.compile: $(java_sources) .jikes .install_mips2java
144 # @echo -e "\n\033[1mcompiling .java -> .class: src/**/*.java\033[0m"
145 # @rm -f $(java_sources:build/java/%.java=build/class/%.class)
146 # mkdir -p build/class
147 # cd build/java; for A in `find . -name \*.java`; do mkdir -p ../class/`dirname $$A`; done
148 # @./.jikes -Xlint:deprecation $(java_sources)
151 build/JVM/ibex.jar: .compile build/res/builtin.jar build/class/org/ibex/translators/MIPSApps.class
152 @echo -e "\n\033[1marchiving .class -> .jar: build/JVM/ibex.jar\033[0m"
154 echo -e "Manifest-Version: 1.0\nMain-Class: org.ibex.Main\n" > build/JVM/.manifest
155 cd build/class/org/ibex; ln -sf ../../../res/builtin.jar
156 cd build/class; $(jar) cfm ../JVM/ibex.jar ../JVM/.manifest \
157 `find . \! -type d` \
158 $(patsubst %,../../upstream/mips/build/org/xwt/mips/%*.class, Runtime Registers Syscalls Errno)
161 ### GCJH Headers ##############################################################################
163 java_headers := $(java_sources:build/java/%.java=build/h/%.h)
164 build/h/edu/stanford/ejalbert/BrowserLauncher.h:; mkdir -p $(@D); touch $@
165 build/h/%.h: build/class/%.class .compile
166 @echo -e "\n\033[1mextracting .class -> .h: $<\033[0m"
167 mkdir -p `dirname $@`
168 ls `echo $< | sed s/.class\$$//`*.class |\
169 sed s_build/class/__ | sed s/.class\$$//g | sed s_/_._g | (cd build/class; xargs $(gcjh) -d ../h --classpath .)
172 ### Native Code ##############################################################################
174 # a hack since we've disabled gcj's awt implementation
175 build/$(platform)/org/ibex/plat/Java2.java.o: ; touch .empty.c; mkdir -p $(@D); $(gcc) -c .empty.c -o $@;
176 build/$(platform)/org/ibex/plat/AWT.java.o: ; touch .empty.c; mkdir -p $(@D); $(gcc) -c .empty.c -o $@;
178 build/$(platform)/%.java.o: build/class/%.class
179 @echo -e "\n\033[1mcompiling .java -> .o: $<\033[0m"
180 mkdir -p `dirname $@`
181 $(gcj) -fCLASSPATH=build/class -c $< -o $@
183 # FIXME detect subclasses of X11
184 build/$(platform)/org/ibex/plat/Linux.cc.o: .install_WindowMaker-0.80.2_$(target)
185 build/$(platform)/org/ibex/plat/Solaris.cc.o: .install_WindowMaker-0.80.2_$(target)
187 build/$(platform)/org/ibex/plat/$(platform).cc.o: src/org/ibex/plat/$(platform).cc src/org/ibex/plat/*.cc .configure_jpeg-6b_$(target)
188 @make $(java_headers)
189 @echo -e "\n\033[1mcompiling .cc -> .o: $<\033[0m"
190 mkdir -p `dirname $@`
193 nonplat_java_sources := $(filter-out build/java/org/ibex/plat/$(platform).java,$(java_sources))
194 build/$(platform)/$(platform).ar: $(nonplat_java_sources:build/java/%.java=build/$(platform)/%.java.o)
195 @echo -e "\n\033[1marchiving .o -> .a\033[0m"
196 mkdir -p build/$(platform)
198 upstream/install/$(target)/bin/ar rc $@ $^
199 upstream/install/$(target)/bin/ranlib $@
201 upstream/jpeg-6b/build-$(target)/libjpeg.a: .install_jpeg-6b_$(target)
203 # note: binaries appear in a different order in the dependency line vs the link line
204 build/$(platform)/$(target_bin): upstream/jpeg-6b/build-$(target)/libjpeg.a build/$(platform)/builtin.o build/$(platform)/org/ibex/plat/$(platform).cc.o
205 @echo -e "\n\033[1mlinking .o -> $(target_bin)\033[0m"
207 rm -rf build/pruned; mkdir -p build/pruned
208 javac -classpath lib/bcel-5.1.jar:build/class -d build/class src/org/ibex/util/BytecodePruner.java
209 rm -f build/$(platform)/ibex.jar
211 fastjar cf ../$(platform)/ibex.jar \
212 `find . -name \*.class | grep -v ibex/plat/` \
213 org/ibex/plat/$(platform)*.class \
214 org/ibex/plat/X11*.class \
215 org/ibex/plat/GCJ*.class \
216 org/ibex/plat/POSIX*.class
217 java -cp lib/bcel-5.1.jar:build/class org.ibex.util.BytecodePruner \
218 build/$(platform)/ibex.jar:upstream/install/share/java/libgcj-3.3.jar -o build/pruned
219 # rm -rf out/java/awt
220 # rm -f out/java/lang/*.*
221 # rm -f out/java/lang/reflect/*
222 # mkdir -p out/java/lang/ref
223 # mkdir -p out/java/lang/reflect
224 # cp upstream/gcc-3.3/src/libjava/java/lang/*.java out/java/lang/
225 # cp upstream/gcc-3.3/src/libjava/java/lang/ref/*.java out/java/lang/ref/
226 # cp upstream/gcc-3.3/src/libjava/java/lang/reflect/*.java out/java/lang/reflect/
227 rm -rf build/pruned/org/ibex/js/*; cp build/java/org/ibex/js/* build/pruned/org/ibex/js/
228 rm build/pruned/java/lang/System.class
229 cp upstream/gcc-3.3/src/libjava/java/lang/System.java build/pruned/java/lang/
231 for A in `find . -name \*.class -or -name \*.java`; do \
232 echo compiling $$A....; \
233 ../../upstream/install/bin/$(target)-gcj -w -c -fCLASSPATH=../../build/class $$A && \
234 (mkdir -p ../../build/$(platform)/`dirname $$A`; mv *.o ../../build/$(platform)/`dirname $$A`); \
236 rm -f build/$(platform)/ibex.a
237 cd upstream/gcc-3.3/build-$(target)/$(target)/libjava; \
238 $(shell pwd)/upstream/install/$(target)/bin/ar cq \
239 $(shell pwd)/build/$(platform)/ibex.a \
240 `find . -name nat\*.o` \
241 `find . -name \*.o -not -name '*[A-Z]*'` \
242 $(shell pwd)/build/$(platform)/org/ibex/plat/$(platform).cc.o \
243 `find $(shell pwd)/build/$(platform) -name \*.o`
244 PATH=upstream/install/bin:$$PATH upstream/install/bin/$(target)-gcj \
245 --main=org.ibex.plat.$(platform) \
246 -Lupstream/install/$(target)/lib \
247 -Lupstream/install/lib \
248 build/$(platform)/ibex.a \
249 upstream/jpeg-6b/build-$(target)/libjpeg.a \
251 upstream/gcc-3.3/build-$(target)/$(target)/boehm-gc/.libs/libgcjgc.a \
257 ### Builtin Resources ##############################################################################
259 builtin_src := $(shell find src/org/ibex/builtin -name '*.*' \! -name '*.xcf')
260 build/res/fonts/vera: .download_vera-1.10
261 mkdir -p build/res/fonts/vera
262 cd build/res/fonts/vera; ln -fs ../../../../upstream/vera-1.10/ttf-bitstream-vera-1.10/Vera.ttf
263 cd build/res/fonts/vera; ln -fs ../../../../upstream/vera-1.10/ttf-bitstream-vera-1.10/VeraMono.ttf
264 cd build/res/fonts/vera; ln -fs ../../../../upstream/vera-1.10/ttf-bitstream-vera-1.10/VeraSe.ttf
265 build/res/builtin.jar: $(builtin_src:src/%=build/res/%) build/res/fonts/vera
266 @echo -e "\n\033[1mzipping res/* -> .jar: builtin.jar\033[0m"
267 cd build/res; $(jar) cf builtin.jar $(^:build/res/%=%)
268 build/$(platform)/builtin.o: build/res/builtin.jar
269 @echo -e "\n\033[1mwrapping .jar -> .o: resources.o\033[0m"
270 @(echo "unsigned int builtin_length = "; \
271 (wc -c build/res/builtin.jar | sed "s_build.*__"); \
273 echo "unsigned char builtin_bytes[] = {"; \
274 hexdump -ve '"0x" 1/1 "%x,\n"' build/res/builtin.jar; \
275 echo "};") > .builtin.c
276 $(gcc) -c .builtin.c -o build/$(platform)/builtin.o
279 build/mips/%.c.o: src/%.c .download_libmspack-20030726
280 make .install_freetype-2.1.4_mips-unknown-elf target=mips-unknown-elf
281 make .install_libmspack-20030726_mips-unknown-elf target=mips-unknown-elf
283 echo -e "\n\033[1mcompiling $< -> $@ (mips)\033[0m"
284 upstream/install/bin/mips-unknown-elf-gcc -march=r3000 \
285 -Iupstream/freetype-2.1.4/src/include \
286 -Iupstream/libmspack-20030726/src/mspack \
289 build/mips/mipsapps.mips: build/mips/org/ibex/translators/Freetype.c.o build/mips/org/ibex/translators/MSPack.c.o build/mips/org/ibex/translators/main.c.o
290 make .install_freetype-2.1.4_mips-unknown-elf target=mips-unknown-elf
291 make .install_libmspack-20030726_mips-unknown-elf target=mips-unknown-elf
292 @echo -e "\n\033[1mlinking .o -> .mips: $@\033[0m"
293 mkdir -p build/mips build/res
294 upstream/install/bin/mips-unknown-elf-gcc \
297 -T upstream/mips/org/xwt/mips/linker.ld \
298 -L upstream/mips/build/org/xwt/mips/ \
299 -L upstream/freetype-2.1.4/src/objs \
300 -L upstream/libmspack-20030726/build-mips-unknown-elf/ \
308 ### Maintainer ######################################################################################
310 current_build := $(shell cat next.build)
311 strip_$(platform) := upstream/install/$(target)/bin/strip build/$(platform)/$(target_bin) -o
312 strip_JVM := cp build/$(platform)/$(target_bin)
313 install-dist:; $(strip_$(platform)) /var/www/org/xwt/dist/master/ibex-$(current_build).$(target_bin_extension).unsigned
315 (echo -n 0000; (echo "10k16o16i"; cat next.build | tr a-z A-Z; echo "1+f") | dc) | tail --bytes=5 > next.build-
316 mv next.build- next.build
317 echo -n "Next build will be "; cat next.build
319 make install-dist platform=Win32
320 make install-dist platform=Linux
321 make install-dist platform=Solaris
322 make install-dist platform=Darwin
323 make install-dist platform=JVM
324 echo -e "\n\n\n*** DONE ******************************************"
327 @darcs push --and-apply --edit-description -o .darcspatch -T patches@xwt.org http://darcs.ibex.org/ibex/
328 @(echo "To: patches@xwt.org";\
329 SUB=`grep -A10000 New.patches .darcspatch | grep '^\\[' | cut -b 2- | tr \\\n , | sed s_,_,\ _g | sed "s_, *\\$$__"`;\
330 echo "Subject: $$SUB";\
332 cat .darcspatch) | /usr/sbin/sendmail -bm -f $(USER)@xwt.org patches@xwt.org;