Compiling ScummVM/Windows CE/Old GCC
This page should be considered as deprecated instructions on how to tweak and build the GCC cross compiler, which is based on the VLC port. For current builds, this is not required. Please refer to the Compiling_ScummVM/Windows_CE page.
GCC Build Instructions
The VLC port of GCC requires some prep work before it's ready for action. There are two major problems with it: It does not honor the #pragma pack() directive and there is a store layout bug for packed structs. Hence, it needs to be rebuilt. As a welcome aside though, the procedure described in the following subsections can be applied to linux or cygwin based environment. This means that the cross compiler can be installed onto a Windows (Cygwin) machine as well.
It has been reported that the packages needed for Cygwin are: gcc, make, sed, bison, flex, texinfo, patch, cvs, gettext, gettext-devel, perl, svn. Also some CR/LF conversion may be needed by utilities such as dos2unix and unix2dos.
Cross compiler
The build process is carried out in two steps, first the binutils and then the gcc cross compiler. Begin by designating a directory where all source downloads and build will take place.
(Note: the patches by the VLC guys target specific GCC/binutils versions. We'll rebuild those exact versions as they are good enough for the time being.)
Binutils
Checkout the binutils source, as described in the GNU Binutils page but designating a revision date as well:
cvs -z 9 -d :pserver:anoncvs@sourceware.org:/cvs/src login {enter "anoncvs" as the password} cvs -z 9 -d :pserver:anoncvs@sourceware.org:/cvs/src co -D 20050514 binutils
CD into the root of the source tree and patch with the three VLC binutils patches (may patch with a little fuzz). Configure the build:
./configure --target=arm-wince-pe --prefix=PREFIX_TO_CROSS_COMPILER
(PREFIX_TO_CROSS_COMPILER is the path where the cross compiler will be installed. In linux it is: /usr/local/wince/cross-tools)
Make and make install. You may need to manually run ranlib on some generated libs during making.
GCC
Checkout the GCC source:
svn -q checkout -r {20050511} svn://gcc.gnu.org/svn/gcc/trunk gcc
(Note the date. It does not match the date in the VLC patches. Also, later revisions contain severe bugs)
Now come the patches.
#define HANDLE_PRAGMA_PACK_PUSH_POP
In the root of the GCC source tree, make a directory called wince.
CD into it and create a file called build.sh with the following stuff (substitute PREFIX_TO_CROSS_COMPILER), and run it:
export PATH=PREFIX_TO_CROSS_COMPILER/bin:$PATH ../configure --with-gcc --with-gnu-ld --with-gnu-as --target=arm-wince-pe --prefix=PREFIX_TO_CROSS_COMPILER --disable-threads --disable-nls --enable-languages=c++ --disable-win32-registry --disable-interwork --disable-multilib |
Finish up
We need to copy over some stuff from the full GCC tarball. Get the binary tarball and unpack it somewhere.
- Copy recursively all of usr/local/wince/cross-tools/include/ into your PREFIX_TO_CROSS_COMPILER/include.
- Copy all of the libs in usr/local/wince/cross-tools/lib into your PREFIX_TO_CROSS_COMPILER/lib (except libiberty.a).
- CD into your PREFIX_TO_CROSS_COMPILER/arm-wince-pe/lib and make the following two symbolic links:
ln -s ../../lib/corelibc.lib crt0.o ln -s ../../lib/coredll.lib c.lib
DoneĀ :-)
(Note: In linux, it is much easier to get the binary tarball, extract it into the root of the filesystem, and then build the binutils and GCC replacing essentially the offending files (C++ compiler etc). This final step in this case is not be required)