Okay so I've been thinking about this for a while now, and I've decided it's time to put pen to paper
fingers to keyboard.
So my idea is to put together a compile farm, for games. It could be used for releases, weekly snapshots, continuous integration, etc. I have done some searching but haven't really found anything appropriate, but I'll share what I found.
- GCC have a project (http://gcc.gnu.org/wiki/CompileFarm), with a heap of machines. It's open-source only, and going by the "news" section of that page, not very active any more. They do appear to have heaps of machines.
- Snakebite (http://www.snakebite.net/) is also interesting. Lots of machines. They only support Python at the moment, but might be doing more in the future. The mailing list is very quiet.
- The OpenTTD project (http://wiki.openttd.org/Compile_Farm) have one for their nightly builds and releases. I doubt they would let people use it for other purposes, but they might have some automation scripts which are useful.
- It appears that Debian and Ubuntu run farms, but it's probably only for .deb files. I haven't looked into these.
- OpenSUSE run one too (http://openbuildservice.org/), but again it's for Linux packages.
So this is what I am thinking:
I propose the creation of a compile farm. To begin with, the service would be free for end users. There wouldn't be a restriction on what you do with the farm (thus it would be structured like GitHub). There would be a web interface where registered users could create projects. A project would have a source URL (git, svn, etc), and one or more build targets. The user could set the build target to be run in some batch process (nightly, weekly, etc), run it via API call, or run it manually from within the web interface. The user would also set a location where the resulting files would be saved (ftp, scp, s3, etc). There would be logging, etc all built in.
Users would need to define build scripts to tie it all together. A build script for a Linux target might be as simple as cmake; make
, but it could be more complex as per the users' needs. Windows targets would be harder, but not impossible. I imagine the easiest way would be to have virtual machines (Linode, Amazon EC2, etc) with various pre-built configurations - different Linux distros, different versions of MSVC, etc. I would probably have the system spin these up for each compile, and then kill it off afterwards, reducing the security risk.
I can see some issues. Firstly, the OS which is typically the easiest to automate - Linux - is also probably the least desired for binaries, when it comes to games. Of course a cross-compiler build target would be possible, but native binaries are often smaller and easier to get working, especially when you have a lot of libraries involved. The most desired platform for building - Windows - is the hardest the automate, and virtual machines not only cost more, but not all VM providers offer them. As for OSX, well there is barely anyone offering OSX virtual machines, so it's a bit of a no-go at the moment.
So that's my idea. There are a few more things to think about though:
- I'm looking for some assistance. Coding, planning, web app development, etc.
- Is there anyone who has experience with anything like this? Perhaps we could contact one of the above projects and ask for assistance and/or an extension of their scope.
- I don't mind footing the bill to some degree, but it would be good if anyone wanted to donate some cpu cycles.
- It actually needs projects using it to really get going. Without the support of people using (and testing) the infrastructure, not only is it pointless, but there is no motivation to continue developing and improving the system.
Well that's a lot to say, nonetheless, I'm interested in peoples thoughts.
- a fast paced, shooter game that's a little odd, but still fun.