2003/09/16 00:37:38
[org.ibex.core.git] / Makefile
index 14f3505..e38135e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -33,29 +33,32 @@ gcc_optimizations      := -O2
 gcc_flags              := -nostdinc $(gcc_optimizations) -Ibuild/h -Iupstream/jpeg-6b/src/ -Iupstream/jpeg-6b/build-$(target)/
 gcj_flags              := -fCLASSPATH=build/java
 gcj                    := upstream/install/bin/$(target)-gcj $(gcc_flags) $(gcj_flags)
+gcjh                   := $(shell test -e `pwd`/upstream/install/bin/$(target)-gcjh && echo `pwd`/upstream/install/bin/$(target)-gcjh || echo `pwd`/upstream/install/bin/gcjh)
 g++                    := upstream/install/bin/$(target)-gcj $(gcc_flags)
 gcc                    := upstream/install/bin/$(target)-gcc $(gcc_flags)
 jar                    := $(shell ((type fastjar &>/dev/null) && echo fastjar) || echo jar)
 
 include Makefile.upstream
 
-# HACK: FIXME
-ifeq ($(platform),Darwin)
-superclass_org.xwt.plat.Platform:; echo org.xwt.plat.OpenGL
-else
-superclass_org.xwt.plat.Platform:;
-endif
-
 # figure out what stuff in org.xwt.plat.* this platform requires (its superclasses)
 superclass_%: 
-       @echo $*
+       @echo $(patsubst org.xwt.plat.%, build/java/org/xwt/plat/%.java, $*)
        @make -s superclass_org.xwt.plat.$(shell grep extends src/`echo $* | sed s_\\\\._/_g`.java | head -n 1 | sed s_.\*extends\ __ | sed s_\ .\*__)
 
 all_java_sources  := $(patsubst src/%.java,     build/java/%.java, $(shell find src -name '*.java'))
-java_sources      := $(filter-out build/java/org/xwt/plat/%, $(all_java_sources))
-java_sources      += $(patsubst src/%.java.pp,  build/java/%.java, $(shell find src -name \*.java.pp))
-plat_deps         := $(shell test x$(platform) == x"" || make -s superclass_org.xwt.plat.$(platform) platform= )
-java_sources      += $(patsubst org.xwt.plat.%, build/java/org/xwt/plat/%.java, $(plat_deps))
+all_java_sources  += $(patsubst src/%.java.pp,  build/java/%.java, $(shell find src -name '*.java.pp'))
+
+superclass_org.xwt.plat.Platform:;
+ifeq ($(platform),)
+plat_deps         := $(shell make -s superclass_org.xwt.plat.$(platform) platform= )
+endif
+
+# HACK: FIXME
+ifeq ($(platform),Darwin)
+plat_deps         += build/java/org/xwt/plat/OpenGL.java
+endif
+
+java_sources      := $(filter-out build/java/org/xwt/plat/%, $(all_java_sources)) $(plat_deps)
 
 build/java/%.java: src/%.java ; @echo linking $@; mkdir -p $(@D); ln -s `echo $(@D) | sed 's_[^/]*\(/\|$$\)_../_g'`/$< $@
 build/cc/%.cc:     src/%.c    ; @echo linking $@; mkdir -p $(@D); ln -s `echo $(@D) | sed 's_[^/]*\(/\|$$\)_../_g'`/$< $@
@@ -63,7 +66,7 @@ build/c/jpeg/%.c:     upstream/jpeg-6b/src/%.c
        @echo linking $@; mkdir -p $(@D); ln -s `echo $(@D) | sed 's_[^/]*\(/\|$$\)_../_g'`/$< $@
 
 build/java/%.java: src/%.java.pp
-       @make -s build/class/org/xwt/util/Preprocessor.class
+       make build/class/org/xwt/util/Preprocessor.class
        @echo -e "\n\033[1mpreprocessing   .java.pp -> .java:  $<\033[0m"
        mkdir -p `dirname $@`
        rm -f $@
@@ -75,19 +78,19 @@ build/class/%.class: build/java/%.java .jikes
        @./.jikes $<
 
 compile: .compile
-.compile: $(java_sources) $(patsubst src/%, build/java/%, $(shell ls src/org/xwt/plat/*.java))
+.compile: $(all_java_sources)
        @echo -e "\n\033[1mcompiling          .java -> .class: src/**/*.java\033[0m"
        mkdir -p build/class
        @./.jikes $^
        touch .compile
 
 # PHASE 4: gcj-generated headers
-java_headers          := $(all_java_sources:build/java/%.java=build/h/%.h)
+java_headers          := $(all_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 ../../upstream/install/bin/$(target)-gcjh -d ../h --classpath .)
+                sed s_build/class/__ | sed s/.class\$$//g | sed s_/_._g | (cd build/class; xargs $(gcjh) -d ../h --classpath .)
 
 # a hack since we've disabled gcj's awt implementation
 build/$(platform)/org/xwt/plat/Java2.java.o:
@@ -116,7 +119,7 @@ jpeg_sources    += jdhuff.c jdphuff.c jddctmgr.c jidctint.c jidctfst.c jidctflt.
 jpeg_sources    += jquant1.c jquant2.c jerror.c jutils.c jmemnobs.c jmemmgr.c
 
 upstream/jpeg-6b/build-$(target)/libjpeg.a: .install_jpeg-6b_$(target)
-$(target_bin): upstream/jpeg-6b/build-$(target)/libjpeg.a $(java_sources:build/java/%.java=build/$(platform)/%.java.o) build/$(platform)/org/xwt/plat/$(platform).cc.o
+$(target_bin): upstream/jpeg-6b/build-$(target)/libjpeg.a $(java_sources:build/java/%.java=build/$(platform)/%.java.o) build/$(platform)/org/xwt/plat/$(platform).cc.o build/$(platform)/org/xwt/builtin.res.o build/$(platform)/freetype.res.o
        @echo -e "\n\033[1mlinking               .o -> $(target_bin)\033[0m"
        mkdir -p build/$(platform)
        PATH=upstream/install/bin:$$PATH $(gcj) -v --main=org.xwt.Main -o build/$(platform)/$(target_bin) $^ $(jpeg_sources:%.c=upstream/jpeg-6b/build-$(target)/%.o) -Lupstream/install/$(target)/lib $(link_flags)
@@ -126,25 +129,45 @@ $(target_bin): upstream/jpeg-6b/build-$(target)/libjpeg.a $(java_sources:build/j
 # Special treatment:
 #
 
-#build/java/org/xwt/Builtin.java: $(shell ls src/org/xwt/builtin/*.png src/org/xwt/builtin/*.xwt src/org/xwt/builtin/*.xwf)
-#      @mkdir -p `dirname $@` build build/java build/class build/h build
-#      echo -e "\n\033[1mzipping/uuencoding  .xwt -> .java:  build/java/org/xwt/Builtin.java\033[0m"
-#      echo "package org.xwt;"                  >  build/java/org/xwt/Builtin.java
-#      echo "class Builtin {"                   >> build/java/org/xwt/Builtin.java
-#      echo "public static String encoded = "   >> build/java/org/xwt/Builtin.java
-#      cd src; $(jar) cf ../.builtin.xwar $(^:src/%=%)
-#      mimencode .builtin.xwar | sed s_.\*_\"\\0\"\ +_ >> build/java/org/xwt/Builtin.java
-#      echo "\"\"; }"                           >> build/java/org/xwt/Builtin.java
+build/xwar/org/xwt/builtin.xwar: $(shell ls src/org/xwt/builtin/*.*)
+       @echo -e "\n\033[1mzipping                * -> .xwar: builtin.xwar\033[0m"
+       mkdir -p build/xwar
+       cd src; $(jar) cvf ../build/xwar/builtin.xwar org/xwt/builtin
+
+build/$(platform)/org/xwt/builtin.res.o: build/xwar/org/xwt/builtin.xwar
+       @echo -e "\n\033[1mwrapping           .xwar -> .o: builtin.res.o\033[0m"
+       @(echo "unsigned int builtin_xwar_length = ";                           \
+               (wc -c build/xwar/builtin.xwar | sed "s_build.*__");            \
+               echo \;;                                                        \
+               echo "unsigned char builtin_xwar[] = {";                        \
+               hexdump -ve '"0x" 1/1 "%x,\n"' build/xwar/builtin.xwar;         \
+               echo "};") > .builtin.c
+       $(gcc) -c .builtin.c -o build/$(platform)/org/xwt/builtin.res.o
+
+build/$(platform)/freetype.res.o: build/mips/freetype.mips
+       @echo -e "\n\033[1mwrapping           .mips -> .o: freetype.res.o\033[0m"
+       @(echo "unsigned int freetype_mips_length = ";                           \
+               (wc -c build/mips/freetype.mips | sed "s_build.*__");            \
+               echo \;;                                                         \
+               echo "unsigned char freetype_mips[] = {";                        \
+               hexdump -ve '"0x" 1/1 "%x,\n"' build/mips/freetype.mips;         \
+               echo "};") > .freetype.c
+       $(gcc) -c .freetype.c -o build/$(platform)/freetype.res.o
 
 
 # compile is here to force compilation of the .class files (they get used via -Ibuild) without
 # having the individual .o's depend on the .java's (otherwise every .o gets recompiled when one .java changes)
 gcj: .compile .vendor .install_gcc-3.3_$(target) $(target_bin)
-build/JVM/xwt.jar: .compile
+
+build/JVM/xwt.jar: .compile build/xwar/builtin.xwar build/mips/freetype.mips
        @echo -e "\n\033[1marchiving         .class -> .jar:   build/JVM/xwt.jar\033[0m"
        mkdir -p build/JVM
        echo -e "Manifest-Version: 1.0\nMain-Class: org.xwt.Main\n" > build/JVM/.manifest
-       cd build/class; $(jar) cfm ../JVM/xwt.jar ../JVM/.manifest `find . -name \*.class`;
+       cd build/class/org/xwt/; ln -fs ../../../xwar/builtin.xwar  # HACK
+       cd build/class/org/xwt/; ln -fs ../../../mips/freetype.mips         # HACK
+       cd build/class; $(jar) cfm ../JVM/xwt.jar ../JVM/.manifest `find .`;
+       rm build/class/org/xwt/builtin.xwar
+       rm build/class/org/xwt/freetype.mips
 
 
 
@@ -174,11 +197,6 @@ build/mips/freetype.mips: build/mips/org/xwt/imp/Freetype.c.o build/mips/org/xwt
                --strip \
                -lfreetype
 
-#build/java/org/xwt/imp/Freetype.java: build/mips/freetype.mips build/class/org/xwt/imp/MIPS.class
-#      @echo -e "\n\033[1mtranslating        .mips -> .java:  $@\033[0m"
-#      mkdir -p build/java/org/xwt/imp/
-#      rm -f $@
-#      java -cp build/class org.xwt.imp.MIPS org.xwt.imp.Freetype build/mips/freetype.mips > build/java/org/xwt/imp/Freetype.java