Version 10 (modified by 17 years ago) (diff) | ,
---|
Building BOINC applications
When building a BOINC application, you typically
- want versions for several platforms (Windows, Mac OS X, Linux);
- want each version to run on a wide range of volunteered computers (e.g. the Linux/x86 version should run on Linux systems of many ages and types).
Achieving these goals can be challenging. However, BOINC provides tools and example files that simplify the task.
Whether you're creating a new application or adapting an existing application to BOINC, we recommend that you start by building the BOINC sample application upper_case on all the platforms you want to support. When this is done, you can use the sample application and its associated project files as a basis for your own application.
The first step in building the sample application on a given host is to check out the boinc and boinc_samples modules on that host. Put them in the same parent directory.
Windows
We use Windows XP for builds (other Windows versions may work too).
Microsoft Visual Studio
Go to boinc_samples/win_build. If you're using Visual Studio 2005, open samples.sln. If you're using Visual Studio 2003, open samples_2003.sln. Select 'Build/Build? Solution', or hit F7. That's it!
There is a free version, Visual C++ 2005 Express Edition; we think (but haven't verified) that it works with the BOINC project file. You'll also need the Microsoft Platform SDK and some changes to your Visual Studio Express installation to include the SDK.
If you use your own project file:
- It must compile BOINC .C files as C++. To do this: in Properties, see C/C++ -> Advanced -> Compile As.
- If your application uses graphics, go to Properties -> Linker -> Input. In Delay Loaded DLLs add
GDI32.DLL;OPENGL32.DLL;GLU32.DLL
and in Additional Dependencies adddelayimp.lib
- Configure your project to use ANSI strings rather than Unicode.
Cygwin
In order to run a cygwin application from BOINC, you need to supply all the cygwin DLLs that the application requires in addition to the executable. You can get LISTDLLS from http://www.sysinternals.com/. It will tell you what DLLs a running executable has loaded.
TODO: links to required software?
TODO: develop a Makefile for building uppercase under Cygwin. It can assume that the libraries in boinc/lib and boinc/api have already been built. Verify that _autosetup/configure/make work in boinc/.
Information from CERN is here.
Dev-C++
Dev-C++ is an open-source development environment based on the GCC compilers.
TODO: develop a project file for Dev-C++. It should be similar to the Visual Studio project file (i.e. it should include what it needs from boinc/).
SETI@home used Dev-C++ for its Windows build; the project file is here (outdated).
Mac OS X
Instructions for building applications on Mac OS X are on a separate page.
Linux/x86
If you build an application on a recent Linux distribution, it won't run on older Linux distributions because of library incompatibilities. The only solution we've discovered is to build applications on a host with an old Linux and an old gcc. Setting up such a host, however, is a giant pain.
Our recommended approach is not to build directly on a Linux host, but rather:
- Install Microsoft Virtual PC 2004 on a Windows XP machine (preferably one that's fast and has lots of disk).
- Download the Compatibility virtual machine module. This is a Debian Linux system with the appropriate (old) version of gcc.
- Run this system under Virtual PC.
- Install the boinc and boinc_samples modules in the same parent directory on the virtual host.
- Build the BOINC libraries: go to the boinc/directory and type
_autosetup ./configure --disable-client --disable-server make
Do not 'make install'. - go to the boinc_samples/uppercase directory and type
ln -s `g++ -print-file-name=libstdc++.a` make
Other UNIX systems
GLUT notes
Freeglut 2.2, freeglut 2.4 and OpenGL Utility Toolkit (GLUT) libraries are supported.
X11 notes
To get the X11 support, select the relevant options when you're installing Linux, or (Redhat) go to System Settings/Add? Software.