This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: compilation problems with ecj.jar


Andrew Haley wrote:
The *real* cause is that, for some reason, gcj isn't being passed the
correct path to libgcj.jar in the host system.  Instead, this happens:

jc1 /mnt/zebedee/aph/gcc/trunk/libjava/.././libjava/../ecj.jar \
 -fhash-synchronization \
 -fno-use-divide-subroutine \
 -fuse-boehm-gc \
 -fnon-call-exceptions \
 -fkeep-inline-functions \
 -quiet \
 -dumpbase ecj.jar \
 -mtune=generic \
 -auxbase ecj \
 -g \
 -O2 \
 -version \
 -ffloat-store \
 -fomit-frame-pointer \
 -findirect-dispatch \
 -fbootclasspath=./:/tmp/prefix/share/java/libgcj-4.3.0.jar \
 -o /tmp/ccD80X4c.s

Note that the bootclasspath at this point is wrong: there's no
libgcj.jar in the install dir yet.  The first "./" item in the string
is wrong because the .class files we need are no longer in the build
dir: they're in the srcdir.

This oughta do it:

Index: Makefile.am
===================================================================
--- Makefile.am (revision 120638)
+++ Makefile.am (working copy)
@@ -670,7 +670,7 @@
ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) -Djava.class.path=$(ECJ_JAR)
else !ENABLE_SHARED
## Use ecj.jar at compile time.
-ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) $(ECJ_BUILD_JAR)
+ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) $(ECJ_BUILD_JAR) -fbootclasspath=$(BOOTCLASSPATH)
endif !ENABLE_SHARED
ecjx_LDADD = -L$(here)/.libs libgcj.la



No, still the same:
/home/Marco/Desktop/compile-lin-lin/gcc-build/gcc/gcj -B/home/Marco/Desktop/compile-lin-lin/gcc-build/i686-pc-linux-gnu/libjava/ -B/home/Marco/Desktop/compile-lin-lin/gcc-build/gcc/ -ffloat-store -fomit-frame-pointer -g -O2 -o ecjx -findirect-dispatch --main=org.eclipse.jdt.internal.compiler.batch.GCCMain /usr/local/src/gcc/libjava/.././libjava/../ecj.jar -L/home/Marco/Desktop/compile-lin-lin/gcc-build/i686-pc-linux-gnu/libjava -L/home/Marco/Desktop/compile-lin-lin/gcc-build/i686-pc-linux-gnu/libjava/.libs ./.libs/libgcj.a -L/home/Marco/Desktop/compile-lin-lin/gcc-build/i686-pc-linux-gnu/libstdc++-v3/src -L/home/Marco/Desktop/compile-lin-lin/gcc-build/i686-pc-linux-gnu/libstdc++-v3/src/.libs -lpthread -lrt -ldl -L/home/Marco/Desktop/compile-lin-lin/gcc-build/./gcc -L/home/Marco/Desktop/compile-lin-lin/gcc-XYZXYZ-lin/i686-pc-linux-gnu/bin -L/home/Marco/Desktop/compile-lin-lin/gcc-XYZXYZ-lin/i686-pc-linux-gnu/lib -lgcc -lc -lgcc
gcj: Internal error: Segmentation fault (program jc1)
Please submit a full bug report.


Maybe I patched the wrong Makefile.am? I patched the one in the libjava dir...

Another question: I noticed that ecj.jar is compiled at the end. How can then gcj compile all java sources before that? Is ecj.jar called by gij? Just thought about it and I'm curious...


> > BTW,l there are more problems with compiling ecj.jar for > > cross-compiling. Creating a host-linux, target-windows GCJ will > > create a ecj.exe what is definitely the wrong thing to do. > > It's the right thing to do. You have to build the ecj.exe for > GNU/Linux as a separate step when building the GNU/Linux native > compiler. If you don't want ecj.exe for the target, don't include > ecj.jar in the build tree.

What do I need a "exe" for on Linux? If I create a gcj with host=Linux and target=Windows, I'd assume that I get a "ecj" binary for Linux that compiles for Windows. All other created binaries (gcc, gcj, objdump, ...) are also for Linux and not exes. If I get a ecj.exe, what can I do with it? I wont be able to compile .java files on Linux and its useless on Windows as far as I can see. But I'd be glad to learn better...


thanks Marco


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]