Hardcore Processing - Realize Your Wild Software Ideas Affordably


Start Here | News | For Artists | For Developers | Products & Projects | Research & Articles | Entertainment | Company Profile | Contact


This document decribes how to install the Linux to Windows cross-compiler version of Stephen T. Weeks' Standard ML compiler MLton. This is based on the old 19990712 release version of MLton. Go to MLton for Windows for the latest release.

Installing the cross-compiler

First of all you need to install the following:

  1. The SML/NJ compiler. I recommend SML/NJ version 110.0.7 but see the last section of this document for details.
  2. A native gcc compiler for Linux.
  3. The Mingw32 cross-compiler version of gcc.
  4. My WinMain library.
  5. And optionally Sam Lantinga's SDL library if you need to use that.

To download and install the MLton crosscompiler, do the following:

  1. Download MLton_ANOQ20010831.tar.gz
  2. Unpack with these commands:
    gzip -d MLton_ANOQ20010831.tar.gz
    tar -xvf MLton_ANOQ20010831.tar
  3. Make a second copy of the upacked directory with this command:
    cp -r MLton_ANOQ20010831/ MLton_ANOQ20010831_ToWin32
  4. If you haven't already got a Linux native version of MLton installed, you should now compile one with these commands:
    cd MLton_ANOQ20010831/src
    cd ../..
    If you already have a Linux native version of MLton installed that you want to keep you can remove the directory 'MLton_ANOQ20010831'.
  5. Now you should build another Linux native version of MLton with these commands:
    cd MLton_ANOQ20010831_ToWin32/src
    cd ../..
  6. Now edit the file 'MLton_ANOQ20010831_ToWin32/bin/mlton' and make sure that the line 'mlton=...' points to your (first) native Linux version of the MLton compiler. It is currently set to the file 'root/../MLton_ANOQ20010831/lib/mlton' which should be OK if you built the (first) native compiler as described above. In the line 'args=...' you should also remove the '-lm' option, since you cannot link with this when crosscompiling.
  7. Edit the file 'MLton_ANOQ20010831_ToWin32/include/mlton-lib.h'. You need to set the include paths to WinMain, SDL and the crosscompiler version of SDL to where they are installed on your computer.
  8. Now execute these commands:
    cd MLton_ANOQ20010831_ToWin32/src
    make prepareWin32
  9. Activate your gcc crosscompiler by setting the appropriate paths.
  10. You can now build the actual MLton crosscompiler with this command (hopefully using the crosscompiler version of gcc):
    make target=win32
    The makefile will stop with an error when it tries to compile MLton itself - but this is OK since you only need the crosscompiled versions of the runtime libraries.

Your new crosscompiler is now the file 'MLton_ANOQ20010831_ToWin32/bin/mlton'.

Brand new compiler flags for MLton

This brand new MLton crosscompiler some brand new compiler flag that you can set.

To compile ordinary Win32 applications you should problably set the flags something like this:

-D_WIN32 -L/usr/local/cross-tools/lib -L<WhereeverItIsInstalled>/WinMain/srcC/ -lmingw32 -lwinmain -luser32 -lgdi32 -lwinmm -ldxguid

To compile SDL applications you should problably set the flags something like this (besides linking with SDLFuncs.o from SDL::ML):

-D_WIN32 -DUSE_SDL -L/usr/local/cross-tools/lib -lmingw32 -lSDLmain -lSDL -luser32 -lgdi32 -lwinmm -ldxguid -mwindows
Now you might want to check out how to use my SDL bindings for ML - SDL::ML.

A note for using MLton's cmcat and MLKit at the same time

To use MLTon's cmcat tool (for concatenating an SML/NJ/CM project into one single sourcefile suitable for compilation with MLton) you will also need SML/NJ working version 110.9.1 or later. Notice that this may conflict if you're also using MLKit for typechecking your code, since MLKit does NOT compile with SML/NJ version 110.9.1, where as SML/NJ version 110.0.3 and SML/NJ version 110.0.7 works fine for MLKit. And to run either MLKit or cmcat you need an SML/NJ runtime of a compatible version, so you may soon find yourself continuously swapping between 2 versions of SML/NJ.

However if you change line 153 of the cmcat source code from '[file] => ((cmcat{sources = mkAbsolute{path =file, relativeTo = getDir()}' to '[file] => ((cmcat{sources = mkAbsolute (file, getDir())'

It should compile with SML/NJ version 110.0.7 so that you can use the same runtime for both MLKit and cmcat.

Patch desscription

Follow the link below for a description of how I have patched the '1999-7-12' release of MLton into the 20010831 cross-compiler distribution.

Hardcore ProcessingModified: 2023-05-19
E-mail: Contact