Solutions for multi-platform compilation?

Hi, I work developing multi-platform applications in Haskell. This poses the following problem: I cannot compile binaries for windows from linux (AFAIK). I "solved" this problem with the following sledgehammer: I installed windows in a VM, I installed GHC, I installed all the C/C++ headers & binaries of the libraries that I use (Gtk, OpenGL, SDL, OpenCV, etc.) their Haskell counterparts, and I created several scripts that connect to the VM using SSH, push the changes to the repo, cabal clean & cabal install all my packages in sequence without me having to even login into the windows machine. I did this because I was unable to get GHC to run properly in Wine at that time (over 2 years ago). This solution is still unsatisfactory because: 1) It's slow, even though Windows itself works fine (well, as well as windows can work, but it runs at a decent spped, I can play games and all). 2) When I update a library with lots of dependencies, or GHC itself, I have to rebuild almost everything. This is particularly painful with big packages like Gtk, for instance. Because I have to tell cabal where headers and libraries are located, updating a package is almost never an automatic process. I haven't always been able to make GHC "just pick them up" properly with pkg-config. 3) When I make a change in a library with lots of dependencies, recompiling all the packages can take several hours. I don't think it's a problem with my machine: I'm giving a fair amount of resources to windows, and I use a 3Ghz quadcore with 8GB of RAM. Another relevant fact is: I use this for commercial purposes. I have customers, each requiring a completely different program, they do not have infinite budgets and, if there's a problem in the compilation process and something requires my attention and manual intervention too often, my salary per hour can easily drop to a ridiculous amount. If I'm going to redo this, I'd rather just redo it once. Any suggestions? How do you solve this kind of problem in your work environment? Cheers, Ivan

We use Jenkins to build our applications. You can have Jenkins slaves
for different platforms. We also use cabal-dev to sandbox the builds,
separating the environments for different executables. This solution
does require one server for every OS you develop for, but I guess you
need that anyway, for testing.
Erik
On Thu, Jul 12, 2012 at 11:43 AM, Ivan Perez
Hi, I work developing multi-platform applications in Haskell. This poses the following problem: I cannot compile binaries for windows from linux (AFAIK). I "solved" this problem with the following sledgehammer: I installed windows in a VM, I installed GHC, I installed all the C/C++ headers & binaries of the libraries that I use (Gtk, OpenGL, SDL, OpenCV, etc.) their Haskell counterparts, and I created several scripts that connect to the VM using SSH, push the changes to the repo, cabal clean & cabal install all my packages in sequence without me having to even login into the windows machine. I did this because I was unable to get GHC to run properly in Wine at that time (over 2 years ago).
This solution is still unsatisfactory because: 1) It's slow, even though Windows itself works fine (well, as well as windows can work, but it runs at a decent spped, I can play games and all). 2) When I update a library with lots of dependencies, or GHC itself, I have to rebuild almost everything. This is particularly painful with big packages like Gtk, for instance. Because I have to tell cabal where headers and libraries are located, updating a package is almost never an automatic process. I haven't always been able to make GHC "just pick them up" properly with pkg-config. 3) When I make a change in a library with lots of dependencies, recompiling all the packages can take several hours.
I don't think it's a problem with my machine: I'm giving a fair amount of resources to windows, and I use a 3Ghz quadcore with 8GB of RAM.
Another relevant fact is: I use this for commercial purposes. I have customers, each requiring a completely different program, they do not have infinite budgets and, if there's a problem in the compilation process and something requires my attention and manual intervention too often, my salary per hour can easily drop to a ridiculous amount. If I'm going to redo this, I'd rather just redo it once.
Any suggestions? How do you solve this kind of problem in your work environment?
Cheers, Ivan
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (2)
-
Erik Hesselink
-
Ivan Perez