Building GCC

  1. Change the current directory to the ~/cygwin/src/ directory:

    
user@crosshost ~ $ cd ~/cygwin/src
    
  2. Extract the GCC archive, then extract the upstream GCC source archive and apply the patches it contains :

    
user@crosshost ~/cygwin/src $ tar jxf gcc4-4.5.0-1-src.tar.bz2
    user@crosshost ~/cygwin/src $ tar jxf gcc-4.5.0.tar.bz2
    user@crosshost ~/cygwin/src $ (patching and autoreconf commands omitted)
    
    • Where the patches touch the configuration mechanism, you need to regenerate the files generated by autotools. autoreconf doesn't work, I don't know why, so you need to invoke the correct autotools in the correct directories. The cygport file provides an example of how to do this.

    • GCC is picky about the exact versions of the autotools in use, so you need to make the versions it requires available.

    • For bonus points, use cygport prep to extract the source and apply the patches.

  3. Create a ~/cygwin/build/gcc-4.5.0-1/ directory and change the current directory to that directory:

    
user@crosshost ~/cygwin/src $ mkdir ~/cygwin/build/gcc-4.5.0
    user@crosshost ~/cygwin/src $ cd ~/cygwin/build/gcc-4.5.0
    
    • It's highly recommended that GCC be built into a separate directory from the sources which does not reside within the source tree. Building GCC in the source directory is generally untested, and building into a subdirectory of the source directory is unsupported.

  4. Configure GCC:

    
user@crosshost ~/cygwin/build/gcc-4.5.0 $ ../../src/gcc-4.5.0/configure --prefix=/home/user/cygwin --target=i686-pc-cygwin \
    --disable-bootstrap --enable-version-specific-runtime-libs --enable-static --enable-shared --enable-shared-libgcc \
    --disable-__cxa_atexit --disable-sjlj-exceptions --enable-languages=c,c++ --disable-symvers --enable-threads=posix \
    2>&1 | tee configure.log
    
    • Use the same configure options as used in the cygport file or reported by gcc -v

  5. Build GCC:

    
user@crosshost ~/cygwin/build/gcc-4.5.0-1 $ make all 2>&1 | tee all.log
    
  6. Install GCC:

    
user@crosshost ~/cygwin/build/gcc-4.5.0-1 $ make install 2>&1 | install.log
    

Building binutils and GCC is now complete. Test your cross-compiler by checking that a 'hello world' program can be successfully compiled on your build host and run on your Cygwin target host.