Building the Pony compiler on Windows

Update 2017-01

I have made a vastly simpler build system for Pony on Windows.

Original

I have been taking a look at the very interesting Pony programming language in my copious free time for a couple of weeks now. It’s fairly straightforward to build on Ubuntu. Here’s how I built it on Windows 10:

This process uses GnuWin32, which LLVM recommends, to provide unix utils; your mileage may vary with MSYS or Cygwin.

Build LLVM:

  • Install GnuWin32 via the GetGnuWin32 tool; make sure it’s in your PATH.
  • Install Python (I used 3.5.1; 2.7 is supposed to work as well); make sure it’s in PATH.
  • Installed CMake; make sure it’s in PATH.
  • Get the LLVM source. I used the tarball of 3.7.1 (requireds 7-zip to open on Windows).
  • Make sure you have VS2015 with C++ installed.
  • Generate LLVM VS2015 configuration with CMake. I used the GUI to configure and generate the VS projects; make sure you use the 64-bit generator (“Visual Studio 14 2015 Win64”), and set the CMAKE_INSTALL_PREFIX to where you want LLVM to live.
  • Build the INSTALL project in the LLVM solution.

Build PonyC:

  • Get the PreMake5 executable, and put it somewhere in your PATH.
  • Get the PonyC source.
  • Run premake5.exe --with-tests --to=..\vs vs2015 to generate Ponyc.sln.
  • Changed the Character Set property of each project in the PonyC solution to Not Set.
  • Build Pony.sln

In order to run the pony compiler, you’ll need a few libraries in your environment. I have made a utility that will get the libraries and set up your environment:

  • Install 7-Zip, make sure it’s in PATH.
  • Open a VS2015 x64 Native Tools Command Prompt (things will not work correctly otherwise!) and run:


    > git clone git@github.com:kulibali/ponyc-windows-libs.git
    > cd ponyc-windows-libs
    > .\getlibs.bat
    > .\setenv.bat

  • Now you can run the pony compiler and tests:


    > cd path_to_pony_source
    > build\release\testc.exe
    > build\release\testrt.exe
    > build\release\ponyc.exe -d -s packages\stdlib
    > .\stdlib