Back to wiki

RCS History

/ TOP / cross-compiler.mdwn

Differences for revision 1.14 from 1.13

--- /cross-compiler.mdwn	2010/02/28 07:44:21	1.13
+++ /cross-compiler.mdwn	2011/04/03 15:23:41	1.14
@@ -1,6 +1,6 @@
 __General cross-compiler__
-A complete cross-compiler can be setup easily. For example:
+A complete cross-compiler can be set up easily. For example:
     $ cd binutils-2.18
     $ ./configure --target=mips-netbsdelf
@@ -17,14 +17,82 @@
 __Cross-compiler to Microsoft Windows__
-To develop a cross-compiler for Microsoft Windows:
-    $ cd binutils-2.18
-    $ ./configure --target=i386-pe
-    $ make&& make install
-    $ cd ../pcc
-    $ ./configure --target=i386-pe
-    $ make&& make install
-You will need header files and libraries for Windows.  These files are maintained by the MinGW project.  You can find pcc-supported source and binary tarballs of these libraries [on the pcc website](  The libraries install into the /usr/local/i386-pe/ directory which will work with the the pcc compiler and the gnu assembler using the build instructions above.  The  w32api and the mingw-runtime sources should compile with the pcc compiler.
+Building a cross-compiler for Windows follows a similar process to the
+above; however be aware that using pcc to generate '.exe' executables is best
+described as a 'work in progress' at the present time.  Specifically, pcc is
+unable to compile the support libraries for either itself or the Windows
+runtime, so the gcc cross-compiler needs to be installed and used for this.
+Also, pcc cannot currently parse the #pragma's included by "windows.h", which
+means that you're pretty much limited to compiling console programs.
+It is hoped that these issues can be resolved and these build instructions
+are provided to outline the steps needed in creating a cross-compiler, and to
+assist as a test case for anticipated compiler fixes.  You will need header
+files and libraries for Windows; these files are maintained by the MinGW
+project. You can find pcc-supported source and binary tarballs of these
+libraries [on the pcc website]( and in
+addition you will need [binutils](  These
+instructions will create a cross-compiler called
+'/usr/local/bin/i386-pe-pcc' with all includes and libraries in
+'/usr/local/i386-pe'.  (Root password is required for the installation
+steps; if you are a 'sudo' user replace *su -c 'make install'* with *sudo
+make install* in the examples.)
+ - Stage 1: Prerequisites to give five directories named 'binutils', 'mingw32',
+'pcc', 'pcc-libs' and 'w32api' (assumes cvs is installed, if not then
+pcc/pcc-libs are available as [source
+        mkdir pcc-win32 ; cd pcc-win32
+        tar -zxf binutils-2.21.tar.gz ; mv binutils-2.21/ binutils
+        tar -zxf mingw-runtime-3.14pcc-src.tar.gz ; mv mingw-runtime-3.14/ mingw32
+        tar -zxf w32api-3.11pcc-src.tar.gz ; mv w32api-3.11/ w32api
+        cvs -d co pcc
+        cvs -d co pcc-libs
+ - Stage 2: Build the pcc cross-compiler and necessary tools (assembler/linker
+etc.) with options set for pcc to look in '/usr/local/i386-pe/include' when
+compiling as we don't want to use the host system includes in this case:
+        cd binutils
+        ./configure --target=i386-pe
+        make
+        su -c 'make install'
+        cd ../pcc
+        ./configure --target=i386-pe --with-incdir=/usr/local/i386-pe/include/ \
+          --with-libdir=/usr/local/i386-pe/lib
+        make CC=pcc
+        su -c 'make install'
+ - Stage 3: Build the support libraries.  As mentioned, these must currently
+all be compiled with gcc; change the '/usr/bin/i686-pc-mingw32-gcc' below to
+the name of your cross-compiler executable.  Also, note that 'short name'
+versions of the binutils have been installed to '/usr/local/i386-pe/bin/',
+and we need these on $PATH ahead of the host defaults AFTER 'configure' has
+been run for each build directory.
+        cd ../pcc-libs ; ./configure --target=i386-pe
+        cd ../mingw32 ; ./configure --target=i386-pe --prefix=/usr/local/i386-pe/
+        cd ../w32api ; ./configure --target=i386-pe --prefix=/usr/local/i386-pe/
+        export PATH="/usr/local/i386-pe/bin/:$PATH"
+        export CCROSS=/usr/bin/i686-pc-mingw32-gcc
+        cd ../pcc-libs
+        make CC=$CCROSS PCCLIBDIR=/usr/local/i386-pe/lib/ PCCINCDIR=/usr/local/i386-pe/include/
+        su -c 'make install PCCLIBDIR=/usr/local/i386-pe/lib/ PCCINCDIR=/usr/local/i386-pe/include/'
+        cd ../mingw32
+        make CC=$CCROSS
+        su -c 'make install'
+        cd ../w32api
+        make CC=$CCROSS
+        su -c 'make install'
+And that's it!  You should now be able to run 'i386-pe-pcc' to compile
+simple (console) programs, which will invoke only 'i386-pe-as' and
+'i386-pe-ld' (you may wish to open a new shell because of your altered $PATH):
+        i386-pe-pcc -o /tmp/helloworld.exe /tmp/hellow.c
+Be sure to check status of pragma support in pcc on [the bug tracking
+system]( and changes to the MinGW release files
+before submitting bugs for this build.

Powered by rcshistory.cgi 0.3