You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by cu...@apache.org on 2004/09/23 18:59:10 UTC

cvs commit: jakarta-lucene/src/gcj Makefile

cutting     2004/09/23 09:59:10

  Modified:    src/gcj  Makefile
  Log:
  Compile most of Lucene's core code with a single call to gcj.  This
  permits more cross-class inlining.  In particular, the final method
  PriorityQueue.size() can inline, which speeds things 7.5% in my
  benchmarks.  Note that 'final' declarations *do* sometimes make things
  faster in GCJ.  So let's not remove them all!
  
  Revision  Changes    Path
  1.3       +44 -20    jakarta-lucene/src/gcj/Makefile
  
  Index: Makefile
  ===================================================================
  RCS file: /home/cvs/jakarta-lucene/src/gcj/Makefile,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Makefile	22 Sep 2004 18:32:25 -0000	1.2
  +++ Makefile	23 Sep 2004 16:59:10 -0000	1.3
  @@ -2,23 +2,29 @@
   #
   # Usually invoked by Ant.  Requires that core classes & jars are already built.
   
  -BUILD=../../build
  -LUCENE_OBJ=$(subst .jar,.a,$(wildcard $(BUILD)/lucene-*.jar))
  +ROOT=../..
  +BUILD=$(ROOT)/build
   DEST=$(BUILD)/gcj
   CORE=$(BUILD)/classes/java
   SRC=.
   
  +CORE_OBJ:=$(subst .jar,.a,$(wildcard $(BUILD)/lucene-[0-9]*.jar))
  +CORE_JAVA:=$(shell find $(ROOT)/src/java -name '*.java')
  +
   CORE_HEADERS=\
     $(CORE)/org/apache/lucene/store/IndexInput.h \
     $(CORE)/org/apache/lucene/util/BitVector.h \
     $(CORE)/org/apache/lucene/index/SegmentTermDocs.h
   
  -JAVA=$(wildcard $(SRC)/org/apache/lucene/*/*.java)
  -JAVA_HEADERS=$(subst $(SRC)/,$(DEST)/,$(subst .java,.h,$(JAVA)))
  -JAVA_OBJ=$(DEST)/lucene-gcj.a
  +DEMO_JAR:=$(wildcard $(BUILD)/lucene-demo*.jar)
  +DEMO_OBJ:=$(subst .jar,.a,$(DEMO_JAR))
  +
  +JAVA:=$(wildcard $(SRC)/org/apache/lucene/*/*.java)
  +JAVA_HEADERS:=$(subst $(SRC)/,$(DEST)/,$(subst .java,.h,$(JAVA)))
  +JAVA_OBJ:=$(DEST)/lucene-gcj.a
   
  -CNI=$(wildcard $(SRC)/org/apache/lucene/*/*.cc)
  -CNI_OBJ=$(subst $(SRC)/,$(DEST)/,$(subst .cc,.o,$(CNI)))
  +CNI:=$(wildcard $(SRC)/org/apache/lucene/*/*.cc)
  +CNI_OBJ:=$(subst $(SRC)/,$(DEST)/,$(subst .cc,.o,$(CNI)))
   
   CFLAGS ?= -O3 -ffast-math 
   GCJFLAGS ?= $(CFLAGS) -fno-bounds-check -fno-store-check
  @@ -33,43 +39,61 @@
   
   LIBS = -lstdc++
   
  -# default rule build's command line executables
  +# default rule builds command line executables
   all: $(BUILD)/indexFiles $(BUILD)/searchFiles
   
  -# pattern rules to generate various things
  +# Compile Lucene Core code specially
  +# GCJ can do more inlining when it compiles .java files than .class
  +# files, but not all of Lucene's core .java files are yet compilable
  +# by GCJ. (In particular, GCJ has problems with anonymous ctors that
  +# throw exceptions used in the Span and Sort code.)  So we compile
  +# those that GCJ accepts from .java files, and those that GCJ does not
  +# yet accept from .class files.
  +$(CORE_OBJ) : $(CORE_JAVA)
  +	gcj $(GCJFLAGS) -c -I $(CORE) -o $@ `find $(ROOT)/src/java -name '*.java' -not -name '*Sort*' -not -name 'Span*'` `find $(CORE) -name '*.class' -name '*Sort*' -or -name 'Span*'`
  +
  +# generate object code from jar files using gcj
   %.a : %.jar
   	gcj $(GCJFLAGS) -c -I $(CORE) -o $@ $<
   
  -$(DEST)/%.class : $(SRC)/%.java
  -	mkdir -p $(dir $@)
  -	gcj -C -I $(CORE) -d $(DEST) $<
  -
  +# don't delete generated headers -- they're handy for debugging
   .PRECIOUS : $(CORE)/%.h $(DEST)/%.h
   
  +# generate headers from .class files using gcjh
   $(CORE)/%.h : $(CORE)/%.class
   	gcjh --classpath=$(CORE) -d $(CORE) \
   	 $(subst /,.,$(subst .class,,$(subst $(CORE)/,,$<)))
   
  +# generate headers from .class files using gcjh
   $(DEST)/%.h : $(DEST)/%.class
   	gcjh --classpath=$(DEST) -d $(DEST) \
   	 $(subst /,.,$(subst .class,,$(subst $(DEST)/,,$<)))
   
  -$(DEST)/%.cc : $(DEST)/%.class
  -	gcjh -stubs --classpath=$(DEST) -d $(DEST) \
  -	 $(subst /,.,$(subst .class,,$(subst $(DEST)/,,$<)))
  -
  +# generate object code for c++ code using g++
   $(DEST)/%.o : $(SRC)/%.cc $(DEST)/%.h $(CORE_HEADERS) $(JAVA_HEADERS)
   	g++ $(CFLAGS) -c -I $(CORE) -I $(DEST) -o $@ $<
   
  -$(DEST)/%.s : $(SRC)/%.cc $(DEST)/%.h $(CORE_HEADERS) $(JAVA_HEADERS)
  -	g++ $(CFLAGS) -S -I $(CORE) -I $(DEST) -o $@ $<
  +# generate class from java using gcj
  +$(DEST)/%.class : $(SRC)/%.java
  +	mkdir -p $(dir $@)
  +	gcj -C -I $(CORE) -d $(DEST) $<
   
  +# generate object code for .java files using gcj
   $(JAVA_OBJ) : $(JAVA)
   	mkdir -p $(dir $@)
   	gcj $(GCJFLAGS) -c -I $(CORE) -I $(DEST) -o $@ $^
   
  +# generate c++ stubs for a class using gcjh
  +$(DEST)/%.cc : $(DEST)/%.class
  +	gcjh -stubs --classpath=$(DEST) -d $(DEST) \
  +	 $(subst /,.,$(subst .class,,$(subst $(DEST)/,,$<)))
  +
  +# generate assembly code from c++ code for perusal
  +$(DEST)/%.s : $(SRC)/%.cc $(DEST)/%.h $(CORE_HEADERS) $(JAVA_HEADERS)
  +	g++ $(CFLAGS) -S -I $(CORE) -I $(DEST) -o $@ $<
  +
   # list of all object code to be linked
  -OBJ = $(LUCENE_OBJ) $(JAVA_OBJ) $(CNI_OBJ)
  +OBJ = $(CORE_OBJ) $(DEMO_OBJ) $(JAVA_OBJ) $(CNI_OBJ)
   
   USE_GCJ_DIRECTORY =\
    -Dorg.apache.lucene.FSDirectory.class=org.apache.lucene.store.GCJDirectory
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: lucene-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: lucene-dev-help@jakarta.apache.org