Compiling the viewer (MSVS2005)

__TOC__
This page explains how to compile the Second Life Viewer on Microsoft Windows.
There are several options for the build (compile) environment.
Currently, only the 32-bit binary is tested. There are attempts to produce a 64-bit Windows executable. If you did this, please write your experience on the discussion page (regardless of whether it was successful or not!)
== Choosing and preparing a compiler ==
=== Linden-supported compilers ===
Supported compiler: Visual Studio .NET 2005 Professional
You need to setup the compiler and Microsoft Development tools as follows:
* Setup Microsoft Visual Studio
=== Community experimental compilers ===
If you don't have Visual Studio .NET 2005 Professional, you may wish to try one of the following alternatives.
* Visual C++ 2005 Express (instructions, but the screenshots for VS2008 are worth a glance too)
* Visual Studio 2008 (instructions)
* Visual C++ 2008 Express (instructions)
== Getting other development tools ==
You will need to install the following tools to compile the Viewer:
* UniCode NSIS (download Unicode NSIS)
** This is the package installer used to build Setup.exe. Note: NSIS is now hosted by Google Code (linked above). Previously at: http://www.scratchpaper.com/home/downloads. --Jenn Linden 21:56, 25 October 2010 (UTC)
** NSIS must be installed to the default location for your windows install, i.e. "Program Files"
* CMake (download CMake)
** Use the latest point version for Cmake 2.6. As of this writing, the latest version is 2.6.4. Note: There are many known issues with CMake 2.6.0 and 2.6.1 in conjunction with building the Second Life Viewer. CMake 2.4.8 is supported for compiling the 1.21 version of the Second Life Viewer, but 2.6.2 is likely to become the new minimum requirement in the near future.
* Cygwin (download Cygwin)
** When you run the cygwin setup utility make sure you have selected to install patchutils, flex, bison, and zlib-devel(all located under "devel"), openssh (located under "Net"), which are not part of the default install. (If you missed one of these, the easiest thing to do is to re-run the entire installation.)
** NOTE: DO NOT use the Cygwin version of CMake or Python. The Build will fail. (CMake specifically excludes the Cygwin version of Python, in the Python.cmake file)
* Python (download either Python.org Standard Python or ActivePython
** 2.4.3 is the minimum required version.
** Use version v2.5 preferably. If you use a version newer than 2.5, you may need to change the Python.cmake file. See the CMake discussion for details (this change was necessary as of 1.21-r99587 source branch). ) 
* The Windows Platform SDK
** Get the latest version (as of 23 March 2010) here: Windows SDK for Windows Server 2008 and .NET Framework 3.5 SP1 (If you use the web installer, you can choose only the "Development Tools" and "Samples Win32", which is referenced by viewer-development source, to cut the download size significantly. Watch those version descriptions closely. v6.1 seems to work fine but v7.0, when combined with the components above, results in linking errors stating libraries are corrupted.) 
* DirectX SDK
** Get the latest version (as of 7 June 2010) here: DirectX SDK (June 2010)
Verify that Cygwin, CMake, and Python are in the windows "PATH".
== Downloading Source Code ==
You can download the Viewer source code on the source downloads page. You can also use a version control repository. If you're just starting out, it's probably best to get the latest Release version, rather than a Release Candidate, because the Release Candidates get updated quite often. But if you would rather work with the latest code, go for the version control repository "trunk". Don't forget to also download the artwork and library bundles relevant to the repository branch you're using as explained in Artwork and Library Bundles.
If you're downloading from the source downloads page, there are three packages to get: the source package, the artwork package, and the library package. In versions 1.20 and earlier, Linden packaged the library binaries in the Libs package. For 1.21 and beyond, the CMake develop.py script now downloads most of the libraries that were previously in the libs zip file. This saves developers who are tracking trunk from constantly downloading them every update and only downloads updated libraries. As of this writing, there are some pieces packages that still require downloading, so be sure to grab the library and artwork bundles from the source downloads page.
WARNING:
* If the directory path you keep the SL source in has a space in it, the batch file that copies message_template.msg will fail. So, if you unzip or checkout the source tree into, e.g., C:\Projects\Dir with space in name\Etc\linden, it won't work!
* You should also avoid using non-ASCII (national) characters in the paths, although some localized versions of the tool puts some as a default...
* Unzip or checkout your source tree into a directory that has as short full pathname as possible, since long paths cause some unexpected trouble during the build.
In other words, the easiest way to get this working is to get source, artwork, and libs from the source downloads page and unpack them all into the same directory/folder, which ideally would be a folder in (or near) the root directory with a short name like sl_1_21_6.
== Installing libraries ==
SL Viewer depends on some third party libraries. Some of them are open source, some others are not.
=== Open source libraries ===
As of Viewer version 1.21, all open source libraries are automatically downloaded as part of the build script invoked by develop.py, unless you choose to configure a standalone build.
=== Proprietary libraries ===
Linden Lab does not provide proprietary libraries. You will need to follow the instructions here under to acquire and copy them to your source tree.
It's probably a good idea to build an empty directory tree for those files, copy the relevant proprietary files there and, once done, copy the whole to your source tree (like XCOPY OLIB SL_1_16_0_5 /S). The reason is that these steps are cumbersome and will have to be repeated for each new release (at least if you keep the source for each release in its own folder). If you do not want to do this, you can just as well copy the files directly into the linden source paths.
 rem OLIBS.CMD to build a folder tree for 3rd party libraries and includes
 md olibs
 md olibs\linden\
 md olibs\linden\libraries
 md olibs\linden\libraries\include
 md olibs\linden\libraries\i686-win32
 md olibs\linden\libraries\i686-win32\lib_release
 md olibs\linden\libraries\i686-win32\lib_debug
 md olibs\linden\libraries\i686-win32\include
 md olibs\linden\libraries\i686-win32\include\GL
 md olibs\linden\libraries\i686-win32\include\quicktime
 md olibs\linden\indra
 md olibs\linden\indra\newview
==== Fmod ==== 
* Download & extract FMOD3.75 API for Windows. (later versions, like FMOD Ex, are incompatible).
* Copy fmodapi375win\api\inc\fmod.h to linden\libraries\include
* Copy fmodapi375win\api\inc\fmod_errors.h to linden\libraries\include
* Copy fmodapi375win\api\inc\fmoddyn.h to linden\libraries\include
* Copy fmodapi375win\api\lib\fmodvc.lib to linden\libraries\i686-win32\lib_release and to linden\libraries\i686-win32\lib_debug
(If using cmake, copy fmodapi375win\api\lib\fmodvc.lib to linden\libraries\i686-win32\lib\release and to linden\libraries\i686-win32\lib\debug)
* Copy fmodapi375win\api\fmod.dll to linden\libraries\i686-win32\lib\release and linden\libraries\i686-win32\lib\debug
Note to Snowstorm users: if you are building using the Mercurial repository lindenlab/viewer-development, these steps have been simplified and cleaned up. In particular, there's no need to drop anything under linden\indra anymore, all the files are under linden\libraries like for other 3rd party libraries. The fmodvc.lib however needs to be renamed fmod.lib. The new instructions are:
* Download & extract FMOD3.75 API for Windows
* From fmodapi375win\api\inc\, copy fmod.h and fmod_errors.h to linden\libraries\include
* From fmodapi375win\api\lib, choose the relevant .lib that correspond to your environment (e.g. fmodvc.lib for Visual Studio), rename it fmod.lib and copy it to linden\libraries\i686-win32\lib\release and linden\libraries\i686-win32\lib\debug
* From fmodapi375win\api copy fmod.dll to linden\libraries\i686-win32\lib\release and linden\libraries\i686-win32\lib\debug
==== Quicktime ====
Currently - as of version 1.21 - CMake requires Quicktime to be installed.
Note: This download requires a registration at the Apple Quicktime website and take a bit of time. You can avoid using QuickTime if you want, see this for details. Remember that your Viewer can't play in-world movies if you do so.
* Download & install the Quicktime SDK for Windows
* Copy QuicktimeSDK\Libraries\QTMLClient.lib to linden\libraries\i686-win32\lib_release and to linden\libraries\i686-win32\lib_debug.
(If using CMake, copy QuicktimeSDK\Libraries\QTMLClient.lib to linden\libraries\i686-win32\lib\release and to linden\libraries\i686-win32\lib\debug instead)
* Copy the contents of QuicktimeSDK\CIncludes into linden\libraries\i686-win32\include\quicktime.
== Building the Viewer ==
At this point, you should be ready to use CMake to build the Visual Studio solution for the project. 
NOTE: CMake is only supported for Viewer versions 1.21 and beyond. 
Before you first run a build, you'll need to configure things. It is recommended that you use the develop.py script that will create a default configuration for you.
You must make sure that cmake is registered in the Windows environment or you will get strange errors from develop.py. To ensure everything is correct, right click My Computer -> Properties -> Advanced -> Environment Variables -> Inside System Variables, choose PATH (case insensitive) and click Edit. Now in the value field, go to the end of the value and add a semicolon (;), and then the folder containing the CMake binaries (example: C:\Program Files\CMake 2.8\bin). This might already have been set by the CMake installer.
From the command line, navigate to the indra folder of your source tree and run:
 python develop.py
CMake will pick the most recent version of Visual Studio we support. If you want to specify the version of Visual Studio to use.
* VisualStudio 2005:
 python develop.py -G VC80
* VisualStudio 2008:
 python develop.py -G VC90
NOTE: The above commands will configure a "non-standalone" version of the source code tree. This means that the required third party library packages (as built by Linden Lab) will be downloaded during the CMake process.
=== Finding your build directory ===
In the CMake world, we keep source and object files separate. The develop.py script did create and populate a build directory for you. It is in one of the following locations:
* VS 2005: indra/build-vc80
* VS 2008: indra/build-vc90 
=== Compiling ===
To start a build, do one of the following:
* Run python develop.py build from the indra directory.
** NOTE FOR VS 2008 USERS: This command will not work, since it will only look for VS 2005. Instead, run the command python develop.py -G VC90 build
* Load the Visual Studio solution into your IDE. For MSVS VC++:
** Use "File -> Open -> Project/Solution", and open the linden/indra/build-VC80/SecondLife.sln solution file
*** NOTE FOR VS 2008 USERS: Even though a build-VC90 was created in the above steps, developer.py places the VS 2008 solution/project files in the indra directory. Don't move them to build-VC90 - the paths in the project files are relative to the indra directory.
** In the MSVS toolbar, just to the right of the triangular "Start Debugging" arrow, is a text box whose tooltip is "Solution Configurations". Select RelWithDebugInfo.
** If ALL_BUILD is not set as your StartUp Project (the StartUp Project is displayed in bold font), right-click on ALL_BUILD and choose "Set as StartUp Project".
** Right-click on ALL_BUILD and choose "Properties". In "Configuration Properties -> Debugging", find "Working Directory" and navigate to linden\indra\newview.
** (For Snowglobe 1.x) In the Solution Explorer pane, right-click on the project named "prepare" and select Project Only -> Build Only prepare. This downloads and installs precompiled libraries and only needs to be done when the source tree is clean or if libraries in the list included in the source tree get updated. Running this when not required is brief and causes no harm.
** Build -> Build Solution (F7)
** Debug -> "Start Debugging" or "Start without debugging".
** MSVC might not be able to find the executable. If not, point it to linden\indra\build-VC80\newview\relwithdebinfo\secondlife-bin.exe, and try again.
** You may see an error due to not being able to find fmod.dll. If so, find a copy (remember, you copied this in a step above) and copy it into indra\build-VC80\newview\relwithdebinfo. Try again.
** You may see an error due to not finding llkdu.dll. If so, find it in the normal installed version (make sure it's the same version as your source) and copy it into indra\build-VC80\newview\relwithdebinfo. Try again.
** Good luck!
=== Where's the built Viewer? ===
On Windows, the built Viewer ought to run from VS2005.
To run outside MS VS, see Discussion tab:
Talk:Microsoft_Windows_Builds#Running_viewer_outside_of_MS_VS
=== Build instructions for 1.20 and earlier ===
See Compiling older Viewers (1.20 and earlier with MSVS) if you'd like to compile a version of the Viewer older than 1.20.
== What to do if it doesn't work for you ==
* Ask for help on IRC (#opensl on freenode)
* Find someone on the OpenSource-Dev mailing list
* Fix it: Modifying CMake Files‎ (and please, submit a patch!)
Please also see the (user contributed) instructions at User:Michelle2_Zenovka/cmake
Category:Compiling viewer