building gcc against eclipse?
Andrew Haley
aph@redhat.com
Thu Nov 12 17:12:00 GMT 2009
Jack Howarth wrote:
> On Tue, Nov 10, 2009 at 10:00:29AM +0000, Andrew Haley wrote:
>> Jack Howarth wrote:
>>> In fink, we have been building the gcj ecj1 support by
>>> copying the ecj-latest.jar file from ftp://sourceware.org/pub/java
>>> into the top level of the gcc source directory. I would like to try
>>> building gcc on darwin with the eclipse compiler instead. We have
>>> a fink ecj package which provides...
>>>>>> /.
>>> /sw
>>> /sw/bin
>>> /sw/bin/ecj
>>> /sw/share
>>> /sw/share/doc
>>> /sw/share/doc/ecj
>>> /sw/share/doc/ecj/about.html
>>> /sw/share/java
>>> /sw/share/java/ecj
>>> /sw/share/java/ecj/ecj.jar
>>>>>> How exactly does one build the gcj against this ecj compiler? Would
>>> creating a symlink in the toplevel gcc directory to
>>> /sw/share/java/ecj/ecj.jar be sufficient to cause the installed
>>> eclipse compiler to be used for ecj1?
>> We configure for Fedora with --with-ecj-jar=/usr/share/java/eclipse-ecj.jar
>> You don't have to copy that jar into the toplev of srcdir.
> Would there be any possible differences in the code execution of gcj when built
> with the stock ftp://sourceware.org/pub/java/ecj-latest.jar compared to the ecj.jar
> from eclipse? My initial attempts at building a usable gcj with eclipse's ecj.jar
> failed due to undefined symbols for org.eclipse.jdt.internal.compiler.batch.GCCMain
> at runtime for ecj1.
You mean the class org.eclipse.jdt.internal.compiler.batch.GCCMain is missing, I guess?
> I noticed that the fedora 12 gcc specfile at...
>> http://cvs.fedoraproject.org/viewvc/rpms/gcc/F-12/gcc.spec?revision=1.90&view=markup
>> has a section...
>> %if %{build_java}
> %if !%{bootstrap_java}
> # If we don't have gjavah in $PATH, try to build it with the old gij
> mkdir java_hacks
> cd java_hacks
> cp -a ../../libjava/classpath/tools/external external
> mkdir -p gnu/classpath/tools
> cp -a ../../libjava/classpath/tools/gnu/classpath/tools/{common,javah,getopt} gnu/classpath/tools/
> cp -a ../../libjava/classpath/tools/resource/gnu/classpath/tools/common/Messages.properties gnu/classpath/tools/common
> cp -a ../../libjava/classpath/tools/resource/gnu/classpath/tools/getopt/Messages.properties gnu/classpath/tools/getopt
> cd external/asm; for i in `find . -name \*.java`; do gcj --encoding ISO-8859-1 -C $i -I.; done; cd ../..
> for i in `find gnu -name \*.java`; do gcj -C $i -I. -Iexternal/asm/; done
> gcj -findirect-dispatch -O2 -fmain=gnu.classpath.tools.javah.Main -I. -Iexternal/asm/ `find . -name \*.class` -o gjavah.r
> eal
> cat > gjavah <<EOF
> #!/bin/sh
> export CLASSPATH=`pwd`${CLASSPATH:+:$CLASSPATH}
> exec `pwd`/gjavah.real "\$@"
> EOF
> chmod +x `pwd`/gjavah
> cat > ecj1 <<EOF
> #!/bin/sh
> exec gij -cp /usr/share/java/eclipse-ecj.jar org.eclipse.jdt.internal.compiler.batch.GCCMain "\$@"
> EOF
> chmod +x `pwd`/ecj1
> export PATH=`pwd`${PATH:+:$PATH}
> cd ..
> %endif
> %endif
>> This would be difficult to implement in fink for darwin since we don't have legacy gij/gcj compiler to
> leverage from the system compilers. Is there another way to get around the issue of the undefined
> org.eclipse.jdt.internal.compiler.batch.GCCMain symbol in ejc1 when using the ecj.jar from eclipse?
Sure. Just put the file GCCMain.class in someDirectory, and run ecj1 as
#!/bin/sh
exec gij -cp someDirectory:/usr/share/java/eclipse-ecj.jar org.eclipse.jdt.internal.compiler.batch.GCCMain "\$@"
Andrew.
More information about the Java
mailing list