== link:index.html[Index] -> link:cookbook.html[Cookbook]

Cookbook: How to cross compile Cherokee
---------------------------------------

[[linux2win32]]
Cherokee-Win32 from Linux
~~~~~~~~~~~~~~~~~~~~~~~~~

First of all, you will have to install the cross compiler:

----
# apt-get install mingw32 mingw32-binutils
----

Then, you'll have to install the pthread library:

----
$ cd /var/tmp
$ mkdir pthread-win32
$ cd pthread-win32
$ wget ftp://sources.redhat.com/pub/pthreads-win32/pthreads-w32-2-8-0-release.exe
$ unzip pthreads-w32-2-8-0-release.exe
# cp ./Pre-built.2/lib/libpthreadGCE2.a /usr/i586-mingw32msvc/lib/libpthread.a
# cp Pre-built.2/include/* /usr/i586-mingw32msvc/include/
----

And now, we are ready to compile it. We only have to set a few environment
variables:

----
PATH=/usr/i586-mingw32msvc/bin:$PATH
CC=i586-mingw32msvc-gcc
LD=i586-mingw32msvc-ld
AR=i586-mingw32msvc-ar
RC=i586-mingw32msvc-windres
----

Check out the last development version of Cherokee:

----
$ git clone --recursive git://github.com/cherokee/webserver.git cherokee
$ cd cherokee
$ git submodule update --init #Not needed on Git >= 1.6.5
----

and execute a quite long "configure" command:

----
$ ac_cv_func_malloc_0_nonnull=yes   \
  ac_cv_func_realloc_0_nonnull=yes  \
./configure                         \
  --host=i586-mingw32msvc           \
  --prefix=/usr/i586-mingw32msvc    \
  --disable-readdir_r               \
  --disable-tls                     \
  --enable-static-module=all        \
  --enable-trace                    \
  --enable-static                   \
  --enable-shared=no                \
  --enable-beta                     \
  CC=i586-mingw32msvc-gcc
----

Once reached this point, we are ready to build it by simply typing:

----
$ make
----


[[osx2win32]]
Cherokee-Win32 from OS X
~~~~~~~~~~~~~~~~~~~~~~~~

First of all, you will have to install MinGW for OS X and to check out the
latest version of the source code, then fetch, uncompress and install
pthreads-win32:

----
unzip pthreads-w32-2-8-0-release.exe
cp Pre-built.2/lib/libpthreadGCE2.a \
     /usr/local/i386-mingw32-3.4.5/lib/libpthread.a
cp Pre-built.2/include/* \
         /usr/local/i386-mingw32-3.4.5/lib/gcc/*/*/include/
----

Then you will have to set a few environment variables:

----
         CC=i386-mingw32-gcc
         LD=i386-mingw32-ld
         AR=i386-mingw32-ar
         RC=i386-mingw32-windres
----

and run the configuration script::

----
ac_cv_func_malloc_0_nonnull=yes           \
ac_cv_func_realloc_0_nonnull=yes          \
./configure                               \
  --host=i386-mingw32                     \
  --prefix=/usr/local/i386-mingw32-3.4.5/ \
  --enable-static                         \
  --enable-shared=no                      \
  --enable-static-module=all              \
  --disable-readdir_r                     \
  --disable-tls                           \
  --enable-beta                           \
  --enable-trace                          \
  CC=i386-mingw32-gcc
----

