## Index → Cookbook

## Cookbook: How to cross compile Cherokee

### 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

### 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