GHC Cross Compiler Binary Distributions

As mentioned in the September Edition of What is New in Cross Compiling Haskell, I’ve been working on producing binary distributions of cross compilers, so that installing a cross compiler becomes almost as trivial as installing a GHC binary distribution.

A word of caution is in order. /These are rather experimental builds, and realistically I expect there to be a few issues, that will arise. I’d still appreciate early feedback so that we can iron out the wrinkles quickly!/

I’ve build binary distributions for from macOS Sierra to iOS, Android and Raspberry Pi, as well as binary distributions from Debian 8 to Android and Raspberry Pi.

So head on over to hackage.mobilehaskell.org and grab the binary distribution of your choice.

Prerequisites

For iOS development, the iOS SDK that is shipped with Xcode is required. For Android you will need the Android NDK, and iconv for Android. For Raspberry Pi, you will need to creat the Raspbian SDK.

You will also need a copy of LLVM5 in PATH. As well as a copy of the bootstrapped toolchain wrapper.

$ git clone https://github.com/zw3rk/toolchain-wrapper.git
$ cd toolchain-wrapper
toolchain-wrapper $ ./bootstrap
$ export PATH="$(PWD)/toolchain-wrapper:$PATH"

Note: you may need to adjust the *-toolchain.config file to match your toolchain paths.

Installing the binary distribution

While I hope that installing the binary distributions will eventually be as simple as =./configure –prefix=… && make install= for now you will likely need to provide --target… –host=… –build=…= as well. E.g. for the aarch64-unknown-linux-android on Debian 8, you would provide:

./configure --prefix=... \
            --target=aarch64-linux-android \
            --host=x86_64-pc-linux-gnu \
            --build=x86_64-pc-linux-gnu
make install

to satisfy the configure script.

Where to go from here

You should now be able to compile a simple

main = putStrLn "Hello World"

haskell file with your <target>-ghc for your target. Note that for iOS and Android you would likely want to use -staticlib to produce a static archive to link with your application.

Bugs & Issues

Please file any bug and issues you run into with the hackage-overlay issue tracker. That way we will have a central issue and knowledge base.