what i learned making a gcj cross-compile environment for target=i386-cygwin
Tony Kimball
cross-compile configure sizeof tests
Next message (by thread): what i learned making a gcj cross-compile environment fortarget=i386-cygwin
Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
I thought it would be easiest to debug the compiler in a linux
environment, so I should make a cross-compiler, in order to work with
a mingw32 target. That turned out to be easier concieved than
executed. I thought better of the whole adventure when I started
running into problems building libgcj. This message is intended
simply to document my effort for any future adventurers -- false moves
and all:
building cygwin cross-compilation environment from /home/anon into /usr/local/pkgs/cygwin:
obj: cygwin-binutils, src: src
obj: cygwin-trunk, src: trunk
0. cd cygwin-binutils
1. configure
use ../cygwin-binutils.sh:
../src/configure --target=i386-cygwin --prefix=/usr/local/pkgs/cygwin --disable-gdb --disable-tcl --disable-tk --disable-itcl --disable-tix --disable-expect --disable-libgui --disable-gdbtk --disable-sid --disable-sim
some of these options may be superfluous
2. make
fails in /usr/home/anon/cygwin-binutils/i386-cygwin/newlib/libc/stdlib
due to lack of gcc cross-compiler
3. make install
(same failure, but populates /usr/local/pkgs/cygwin with xdev binutils and libs)
4. cd ../cygwin-trunk
5. configure
use ../cygwin-trunk.sh:
../trunk/configure --target=i386-cygwin --prefix=/usr/local/pkgs/cygwin --enable-threads=pthreads --enable-shared --enable-languages=c,c++,java
Issues: --enable-threads? --enable-threads=win32? --enable-shared? i386-cygwin vs. i386-cygwin32?
6. make
fails in libgcc:
/home/anon/cygwin-trunk/gcc/xgcc -B/home/anon/cygwin-trunk/gcc/ -B/usr/local/pkgs/cygwin/i386-cygwin/bin/
-B/usr/local/pkgs/cygwin/i386-cygwin/lib/ -isystem /usr/local/pkgs/cygwin/i386-cygwin/include -O2
-I../../trunk/gcc/../winsup/include -I../../trunk/gcc/../winsup/cygwin/include
-I../../trunk/gcc/../winsup/w32api/include -DCROSS_COMPILE -DIN_GCC -W -Wall
-Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -isystem ./include -g1
-DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -Dinhibit_libc -I. -I.
-I../../trunk/gcc -I../../trunk/gcc/. -I../../trunk/gcc/config -I../../trunk/gcc/../include
-DL_muldi3 -c ../../trunk/gcc/libgcc2.c -o libgcc/./_muldi3.o
In file included from tconfig.h:4,
from ../../trunk/gcc/libgcc2.c:36:
../../trunk/gcc/config/i386/cygwin.h:31:19: stdio.h: No such file or directory
...
Immediate failure is due to lack of stdio.h installation
7. make install
This populates /usr/local/pkgs/cygwin/lib/gcc-lib, but fails to install gcc.
8. shuffle binaries around
cp gcc/xgcc /usr/local/pkgs/cygwin/bin/gcc
cd /usr/local/pkgs/cygwin/bin
mv gcj i386-cygwin-gcj
etc. (i.e. rename the gcc binaries to i386-cygwin-${NAME} for NAME in gcc, gcjh, gcov,
jcf-dump, jv-scan, gccbug).
ln i386-cygwin-gcc i386-cygwin-c++
9. cd /home/anon/cygwin-binutils
10. make
fails in newlib:
i386-cygwin-gcc -L/home/anon/cygwin-binutils/i386-cygwin/winsup
-L/home/anon/cygwin-binutils/i386-cygwin/winsup/cygwin
-L/home/anon/cygwin-binutils/i386-cygwin/winsup/w32api/lib -isystem /home/anon/src/winsup/include
-isystem /home/anon/src/winsup/cygwin/include -isystem /home/anon/src/winsup/w32api/include
-isystem /home/anon/src/newlib/libc/sys/cygwin -isystem /home/anon/src/newlib/libc/sys/cygwin32
-B/home/anon/cygwin-binutils/i386-cygwin/newlib/
-isystem /home/anon/cygwin-binutils/i386-cygwin/newlib/targ-include
-isystem /home/anon/src/newlib/libc/include -L/home/anon/cygwin-binutils/ld -c
-nostdinc -DHAVE_CONFIG_H -g -O2 -Wall -Wwrite-strings -I. -I/usr/home/anon/src/winsup/cygwin/include
-I/usr/home/anon/src/winsup/cygwin -I/usr/home/anon/src/newlib/libc/sys/cygwin
-I/usr/home/anon/src/newlib/libc/include -I/usr/home/anon/src/winsup/w32api/include
-I../../../../src/winsup/cygwin/config/i386 -I.//include -o ./glob.o ../../../../src/winsup/cygwin/glob.c
In file included from /usr/home/anon/src/newlib/libc/sys/cygwin/sys/param.h:12,
from ../../../../src/winsup/cygwin/glob.c:72:
/usr/home/anon/src/newlib/libc/include/sys/types.h:31:21: stddef.h: No such file or directory
11. make install
This is an attempt to get the header files installed for making libgcc.
12. cd ../cygwin-trunk
13. make
Same failure as in 6
Presumably the file ../src/winsup/cygwin/include/cygwin/types.h
(should be getting included via -isystem?)
-isystem /usr/local/pkgs/cygwin/i386-cygwin/include <-- this option is present
presumably the install in cygwin-binutils is not doing something that it should do here..
14. cd ../cygwin-binutils
There are 4 places to find stddef.h at this point:
a. /usr/local/pkgs/cygwin/lib/gcc-lib/i386-cygwin/3.1/include/stddef.h
b. ../trunk/gcc/ginclude/stddef.h
c. ../trunk/libstdc++-v3/include/c_shadow/stddef.h
d. ../src/winsup/mingw/include/stddef.h
I would be happiest with (a) or (d), but..
it appears that the -nostdinc option is preventing (a), and the others aren't really candidates,
since binutils is in a sep. workspace from trunk gcc.
15. patch src/winsup/Makefile.common:
cvs -z3 diff winsup/Makefile.common
Index: winsup/Makefile.common
===================================================================
RCS file: /cvs/src/src/winsup/Makefile.common,v
retrieving revision 1.23
diff -r1.23 Makefile.common
90a91,93
> tgt_cpp:=$(shell $(CC_FOR_TARGET) -print-prog-name=cpp0)
> cpp_sysdirs:=$(shell $(tgt_cpp) -v </dev/null 2>&1 | grep gcc-lib)
>93c96
< COMPILE_CC:=$(CC) $c -nostdinc $(ALL_CFLAGS) -I$(GCC_INCLUDE)
---
> COMPILE_CC:=$(CC) $c -nostdinc $(ALL_CFLAGS) -I$(GCC_INCLUDE) $(patsubst %,-isystem %,$(cpp_sysdirs))
16. make
fails linking cygwin.dll due to -lstdc++
make install
fails similarly -- still no install of cygwin/types.h needed by libgcc...
so patch src/winsup/cygwin/Makefile.in and reconfigure:
cvs -z3 diff -u winsup/cygwin/Makefile.in
Index: winsup/cygwin/Makefile.in
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/Makefile.in,v
retrieving revision 1.55
diff -u -r1.55 Makefile.in
--- Makefile.in 2001年04月20日 13:02:32 1.55
+++ Makefile.in 2001年04月25日 04:54:32
@@ -146,11 +146,13 @@
force:
-install: all $(install_host) $(install_target)
+install_data:
$(INSTALL_DATA) new-$(DLL_NAME) $(bindir)/$(DLL_NAME); \
for i in $(LIB_NAME) $(GMON_START) $(LIBGMON_A) automode.o binmode.o textmode.o ; do \
$(INSTALL_DATA) $$i $(tooldir)/lib/$$i ; \
- done ; \
+ done
+
+install_includes:
cd $(srcdir); \
for sub in `find include -name '[a-z]*' -type d -print | sort`; do \
for i in $$sub/*.h ; do \
@@ -158,6 +160,8 @@
done ; \
done ; \
$(INSTALL_DATA) regexp/regexp.h $(tooldir)/include/regexp.h
+
+install: all $(install_host) $(install_target) install_data install_includes
install_host:
17. At this point, i found that --enable-threads=pthreads is wrong for gcc... it requires
--enable-threads=posix instead, so i reconfigured cygwin-trunk. cygwin-trunk make
failed in libiberty, but since i already had a working libiberty, I skipped it, and
built/installed in cygwin-trunk/gcc, then moved on to cygwin-trunk/i386-cygwin/libstdc++-v3,
did make install.
18. back to binutils, now that I have an installed libstdc++:
make -- failure is:
i386-cygwin-gcc -L/home/anon/cygwin-binutils/i386-cygwin/winsup
-L/home/anon/cygwin-binutils/i386-cygwin/winsup/cygwin
-L/home/anon/cygwin-binutils/i386-cygwin/winsup/w32api/lib
-isystem /home/anon/src/winsup/include -isystem /home/anon/src/winsup/cygwin/include
-isystem /home/anon/src/winsup/w32api/include -isystem /home/anon/src/newlib/libc/sys/cygwin
-isystem /home/anon/src/newlib/libc/sys/cygwin32 -B/home/anon/cygwin-binutils/i386-cygwin/newlib/
-isystem /home/anon/cygwin-binutils/i386-cygwin/newlib/targ-include
-isystem /home/anon/src/newlib/libc/include -L/home/anon/cygwin-binutils/ld
-Wl,--base-file=mingwthrd.base -B./ -mdll -mno-cygwin -Wl,--image-base,0x6FBC0000
-Wl,--entry,_DllMainCRTStartup@12 mthr.o mthr_init.o
/usr/local/pkgs/cygwin/lib/gcc-lib/i386-cygwin/3.1/../../../../i386-cygwin/bin/ld:
cannot open mingw/dllcrt2.o: No such file or directory
collect2: ld returned 1 exit status
make[2]: *** [mingwthrd.def] Error 1
make[2]: Leaving directory `/usr/home/anon/cygwin-binutils/i386-cygwin/winsup/mingw'
for reasons unknown, this was overcome by the following steps:
cd i386-cygwin/winsup/mingw
make
cd ..
make
cd ../..
make
make install
at this point, i expect all the headers to be installed, so that gcc can be fully and finally installed.
19. back to cygwin-trunk
make
fails configuring libffi
re-configure trunk
remove libffi from cygwin-trunk/Makefile TARGET_CONFIGDIRS
make
now libjava fails to configure, due to sizeof(void *) config test
add line to i386-cygwin/config.cache:
ac_cv_sizeof_void_p=${ac_cv_sizeof_void_p=4}
this works, so i add lines:
ac_cv_sizeof_double=${ac_cv_sizeof_double=8}
ac_cv_sizeof_float=${ac_cv_sizeof_float=4}
ac_cv_sizeof_int=${ac_cv_sizeof_int=4}
ac_cv_sizeof_long=${ac_cv_sizeof_long=4}
ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=12}
ac_cv_sizeof_long_long=${ac_cv_sizeof_long_long=8}
ac_cv_sizeof_short=${ac_cv_sizeof_short=2}
and restore libffi to the Makefile,
which solves the config problem
make builds libffi okay
make install in libffi doesn't work, but i'm not going to worry about that yet, because:
20. libgcj failures:
./libtool: cygpath: command not found
libtool: link: warning: undefined symbols not allowed in i386-pc-cygwin shared libraries
lib /OUT:.libs/libzgcj.lib
adler32.o compress.o crc32.o deflate.o gzio.o infblock.o infcodes.o inffast.o inflate.o
inftrees.o infutil.o trees.o uncompr.o zutil.o
./libtool: lib: command not found
at this point i'm thinking: 'lib' is not going to be available on linux
i'll probably have to substitute i386-cygwin tool based scripts or some such...
and when i try 'make' again, i get problems with missing java class .h files,
(Tue 24 Apr 2001 Midnight)
i finally decided to put the cross-compiler on the back burner until
i've explored using the compiler on cygwin directly.
i submitted the patches above to the cygwin mailing list.
More information about the Java
mailing list