Building Spring on Linux: Difference between revisions
→Debian: updated boost |
Auswaschbar (talk | contribs) No edit summary |
||
| Line 20: | Line 20: | ||
== Full list == | == Full list == | ||
* Programs necessary to build | * Programs necessary to build | ||
** cmake | ** cmake | ||
** 7zip (aka p7zip | ** 7zip (aka p7zip) | ||
** The usual build toolchain | ** The usual build toolchain | ||
*** gcc | *** gcc | ||
Revision as of 11:22, 24 October 2009
Development < Building Spring < Building Spring on Linux
Build From Source on Linux
If prefer to use your distributions package system, refer to the Linux SetupGuide.
If there is no package tailored for your distribution, you have to install from sources manually. Doing this for distributions where packages are available is not recommended.
Warning: Be carefull when building from source. You might encounter sync errors in online play if you are using special compilers (all GCC from the 4.x series should be safe) or unstandard compiler settings (be carefull about -march)!
Obtaining the Source
Tarballs
(For playing online official games on lobby.springrts.com - the spring lobby server)
Using Git is the recommended way to get the sources of the engine.
In spite of, you can use the official tarballs to compile Spring without git.
Note: Do NOT use the zip-files from github, they are missing important data to compile Spring.
See Building spring for build instructions.
Git
Master repo URI:
git://github.com/spring/spring.git
Backup repo: git://git.code.sf.net/p/springrts/code
Branches of interest:
- master - latest stable, enforced for official games on lobby.springrts.com
- maintenance - fixes for the latest stable
- develop - major developments (most active, larger developments)
Assuming the GIT command line client is installed, you can clone (get locally) the repository with the commands below.
Latest Stable (master branch, useless for development purposes, lives as maintenance moving forward)
git clone --recursive git://github.com/spring/spring.git -b master
To later update it (get the changes other people did) with:
git pull --rebase
Maintenance (maintenance branch)
git clone --recursive git://github.com/spring/spring.git -b maintenance
Bleeding-edge (develop branch)
git clone --recursive git://github.com/spring/spring.git -b develop
Working with git
Please note that patches to the code must be done for either develop or maintenance. Such patches can be then sent to one of the developers with repository access. If you are new to git and github, you may want to have a look at this guide to get you started.
Note: you can switch branches this way:<syntaxhighlight lang="bash">
- (optional) backup your current code changes
git stash
- switch branch
git checkout $MY_OTHER_BRANCH
- sometimes needed
- note, it deletes all your unstashed changes and all non-pushed commits on the new branch,
- but it doesn't delete untracked files.
- git reset --hard
- update/sync with remote repo
git pull --rebase
- (optional) if you want to apply the code changes backed-up in the first step
- git stash pop # reapplies your changes and DELETES the backup
- or
- git stash apply --index 0 # reapplies your changes and keep the backup (see `git stash list`)
</syntaxhighlight>
Submodules
To obtain the submodules you should clone the repository with --recursive as mentioned above. If you haven't done this, you can execute the following code <syntaxhighlight lang="bash"> git submodule sync git submodule update --init
</syntaxhighlight>
To update the submodules, you have to execute the same commands again or pull normally.
Get Dependencies
You will need to install some development packages Spring depends on. These vary from distro to distro and may also depend on your specific configuration.
If your distributions is not listed below, you should be able to figure out the correct package names from this. The scons configure will whine if you forget something, but it does not check if you remembered to install zip, even though you still need it.
Full list
- Programs necessary to build
- cmake
- 7zip (aka p7zip)
- The usual build toolchain
- gcc
- make
- Libraries
- SDL
- boost (version 1.35 or later)
- threads
- regex
- signals
- system
- DeviL (IL, ILU)
- OpenAL (openal-soft, older openal-0.0.8 does not work)
- OpenGL headers (mesa, glew, etc.)
- zlib
- freetype
- ogg,vorbis and vorbisfile
- Optional, for bindings and Ais
- Python (2.5)
- Java-SDK
Debian
For Etch (debian 4.0 stable) and Sid (debian unstable), I've confirmed the following to be the minimal set that is necessary to get. This works with Ubuntu 8.10, too. The version of spring from git repository depends on boost at least version 1.35.* (if your distro is behind you can try some unofficial backports) and won't work on lower versions.
Also, on 64-bit be sure to build against devIl 1.6.8-rc2 or higher, 1.6.7 has a bug in the PNG loading code that causes issues.
sudo aptitude install build-essential zlib1g-dev libfreetype6-dev
sudo aptitude install libsdl1.2-dev libopenal-dev libglew-dev zip
sudo aptitude install libvorbis-dev libxcursor-dev libdevil-dev
sudo aptitude install libboost-system1.37-dev libboost-system1.37-thread-dev
sudo aptitude install libboost-system1.37-regex-dev
sudo aptitude install libboost-system1.37-serialization-dev
sudo aptitude install libboost-system1.37-program-options-dev
and either scons and python2.5-dev or cmake, depending on what you use for building (I advise to use cmake). On debian 5.0 (lenny), libglew1.5-dev is required as well.
Gentoo
This has been tested to work with a clean install of gentoo 2008.0:
emerge cmake \>=media-libs/freetype-2.0.0 \>=media-libs/libsdl-1.2.0
emerge media-libs/openal media-libs/glew dev-libs/boost
emerge app-arch/zip media-libs/libogg
USE="png jpg tiff opengl" emerge media-libs/devil
Fedora
On Fedora 8, these dependencies should be sufficient:
yum install cmake boost-devel openal-devel SDL-devel \
DevIL-devel glew-devel libvorbis-devel
Slackware
On Slackware 13, cmake, ogg vorbis, boost, glew and SDL already come with the full regular install, both libs and headers. Also here you will find helper scripts to easily compile and package DEvIL, openAL and spring itself.
Build And Install
Using CMake (2.6 or newer)
Configure and build:
cmake .
make
Install:
make install
Your paths are: Spring executable in /usr/local/bin/spring and
read-only data in /usr/local/share/games/spring. If you want /usr prefix instead /usr/local do the compilation in this way:
cmake -DCMAKE_INSTALL_PREFIX=/usr .
make
And install as shown previously
Using Scons
Configure and build:
scons configure
scons
Install:
scons install
Finalizing installation
You should have Spring installed by now; if not, please see the SetupGuide.
Maps & Mods
Since Spring is only an engine, you need to download games for it, and the maps that go with those games.
SpringLobby will automatically do this for you when you attempt to join a game with a map or mod that you do not currently have, using an integrated downloader.
If you want to download it manually or browse existing maps, there are several easy to use websites:
Pick any of those sites, download a map or mod, and then double click it. This will move it to your Spring folder, using the spring map/mod installer program. If you wish to move maps/mods by hand, they are located under ~/.spring/maps/ or ~/.spring/mods/ (if the folder does not exist - create it). Do not unpack the file in any way though, just download and save it. Reload your maps/mods in SpringLobby, (Tools - Reload maps/mods) and they will be ready to use.
These sites also may provide other neat things like Lua widgets, epic replays, AI bots (for playing offline or to team up on with a friend). Generally the installation requires you to download the file and place it in the appropriate folder in your ~/.spring directory. (you may have to create the folder)
Hint: If you know the name of the map you want, there is a Search function provided in those websites. Just write a part of the name, like one word, and you will easily find the map you were looking for.
Linux specific Troubleshooting
Ingame
Slow Mouse
Run:
echo '# Slow fullscreen cursor fix for Spring' >> ~/.xsessionrc
echo 'SDL_MOUSE_RELATIVE=0' >> ~/.xsessionrc
echo 'export SDL_MOUSE_RELATIVE' >> ~/.xsessionrc
And log out and log in again.
The mouse should now be as fast as in windowed mode.
Rotating Buildings
You can rotate a building before you give the build order, but the keys that do this do not work in Linux by default for some users. Issue the following commands in the beginning of the game:
/bind keycodex buildfacing inc
/bind keycodey buildfacing dec
Keycodex and keycodey above are just placeholders. What you want to write depends on which key you want to use. To see what keycodes any keys have, do:
/keydebug yes
And then hit the keys you want to use, and spring prints the keycodes in the message buffer.
If you want to save these keys you have to edit the uikeys.txt.
Problems with Audio
The engine needs at least OpenAL Soft 1.6 for its sound. If you still have the old openal-0.0.8 installed, you should update it.
Additionally, pulseaudio causes lots of issues, so try to disable it for spring if you have sound problems.
Desync in game
Spring only send the commands and not the result over the network, so it needs to run all math in a repeatable manner, so all other clients in a multiplayer match get the same results. So some CPU specific features have to enabled/disabled. If you desync, you either have a CPU that is not SSE1 capable, or you set the wrong -march/-mtune compiler flags. If you compile Spring via CMake, remove CMakeCache.txt, and leave the march flag at the default.