User:Gblues

= Building OpenMW on Windows =

I've suffered through the pain of setting up a Windows build environment so you (hopefully) don't have to.

Important Note
It's a good idea to install and set up an official release, which will create config files in your user profile that your development build will use.

Prerequisites

 * 1) Visual Studio (I used Visual Studio 2015 for this guide)
 * 2) The latest version of CMake (3.5.2 as of this writing)
 * 3) The latest version of git
 * 4) The latest version of 7-Zip
 * 5) You'll need about 15GB of disk space. I'm not sure on RAM, but generally it's good to have a lot. 8GB is probably OK. My system has 16GB.
 * 6) Know your CPU architecture. I'm assuming 64-bit in this guide.

Path structure
This guide is prescriptive, rather than descriptive. Feel free to use your own organizational structure if you choose.

Create the following folder structure:

C:\ |- deps\ | |- src\ | +- build\ |- src\ |- build\ +- out\
 * - OpenMW\

This is where things get dicey, because you have to do a lot of legwork and, in most cases, build the dependent libraries yourself. Fun! Let's start with the binary libraries.

QT
You will want to install the latest version of QT5.


 * 1) Go to the QT download page and choose the "open-source" package.
 * 2) Download the online installer
 * 3) Skip the registration
 * 4) Choose the latest QT5 version (5.9.2 as of this writing).
 * 5) Install to the recommended directory (C:\Qt), although it's fine to use a different drive letter.
 * 6) Set up the following environment variable:
 * 7) * QTDIR => C:\Qt

Boost
On Windows, you want to get the pre-built binaries that match up with your version of Visual Studio:


 * 1) Go to the parent boost-binaries page.
 * 2) Drill into the newest non-beta version (currently 1.61.0).
 * 3) Download the *.exe that corresponds to your architecture and MSVC version (e.g. boost_1_61_0-msvc-14.0-64.exe for VS 2015 64-bit).
 * 4) Run the *.exe you downloaded, and enter "C:\OpenMW\deps\boost" as the destination directory.
 * 5) Set up the following environment variables:
 * 6) * BOOST_ROOT => C:\OpenMW\deps\boost
 * 7) * BOOST_LIBRARYDIR => C:\OpenMW\deps\boost\lib64-msvc-14.0

FFMPEG
OpenMW uses Zeranoe's FFmpeg builds for Windows.

The environment variable has changed a few times, so set all of the above in case you need to switch among branches.


 * 1) Download the newest "shared" and "dev" archives.
 * 2) Unzip each archive into their own directory.
 * 3) Create the directory "C:\OpenMW\deps\ffmpeg".
 * 4) Copy the contents of the "dev" archive into the ffmpeg directory you just created.
 * 5) Copy the contents of the "shared" archive into the ffmpeg directory. You'll get a bunch of conflicts, just say "yes to all" to overwrite.
 * 6) Set up the following environment variables:
 * 7) * FFMPEG_DIR => C:\OpenMW\deps\ffmpeg
 * 8) * FFMPEG_SDK => C:\OpenMW\deps\ffmpeg
 * 9) * FFMPEG_HOME => C:\OpenMW\deps\ffmpeg

OpenAL
This is probably the easiest dependency to set up.


 * 1) Download OpenAL11CoreSDK.exe from here
 * 2) Install it to C:\OpenMW\deps\openal
 * 3) Set up the following environment variable:
 * 4) * OPENALDIR => C:\OpenmMW\deps\openal

SDL2
The Windows SDL2 package has to be massaged a bit so that CMake will detect it properly, because the default directory scheme is different from every other platform.


 * 1) Download the VC development libraries.
 * 2) Unzip the archive to a temporary location.
 * 3) Create the directory structure:
 * C:\OpenMW\deps\SDL2
 * 1) ** bin\
 * 2) ** include\
 * 3) *** SDL2\
 * 4) ** lib\
 * 5) Copy from the temporary location (indicated by TMP below) as follows (replace with "x86" for 32-bit or "x64" for 64-bit):
 * 6) * TMP\lib\ \SDL2.dll to C:\OpenMW\deps\SDL2\bin
 * 7) * TMP\lib\ \*.lib to C:\OpenMW\deps\SDL2\lib
 * 8) * TMP\include\* to C:\OpenMW\deps\SDL2\include
 * 9) Set the following environment variable:
 * 10) * SDL2DIR => C:\OpenMW\deps\SDL2

Libraries (Source)
These libraries have to be built from source. In all of these, you will follow a basic pattern:


 * Get the source
 * Configure/generate Visual Studio project files with CMake
 * Build & install the library
 * Set environment variables

It's important to avoid using any Visual Studio project files that may come with the source distribution.

Also important: close and re-open CMake each time you set an environment variable.

Bullet3

 * 1) Create the following directories:
 * C:\OpenMW\deps\build\bullet
 * C:\OpenMW\deps\bullet
 * 1) Clone the git repository:
 * 2) Open a command prompt.
 * 3) Change to C:\OpenMW\deps\src
 * 4) Use CMake to generate the Visual Studio projects:
 * 5) Launch CMake-GUI
 * 6) For the source path, enter: C:/OpenMW/deps/src/bullet3
 * 7) For the build path, enter: C:/OpenMW/deps/build/bullet
 * 8) Click "Configure", choose your version of Visual Studio/architecture (e.g. "Visual Studio 14 2015 Win64") and click Finish.
 * 9) Uncheck the following options:
 * 10) * BUILD_BULLET2_DEMOS
 * 11) * BUILD_BULLET3
 * 12) * BUILD_CPU_DEMOS
 * 13) * BUILD_EXTRAS
 * 14) * BUILD_OPENGL3_DEMOS
 * 15) * BUILD_UNIT_TESTS
 * 16) Set CMAKE_INSTALL_PREFIX to "C:/OpenMW/deps/bullet"
 * 17) Set the following options:
 * 18) * INSTALL_LIBS
 * 19) * USE_MSVC_RUNTIME_LIBRARY_DLL
 * 20) Click "Configure", which will get rid of most the red settings.
 * 21) Click "Configure" one more time. This gets rid of the remaining red.
 * 22) Click "Generate"
 * 23) Build and install Bullet:
 * 24) Open C:\OpenMW\deps\build\bullet\BULLET_PHYSICS.sln in Visual Studio.
 * 25) Choose "Debug" in the Solution Configuration drop-down.
 * 26) In Solution Explorer, right-click "ALL_BUILD" and choose "Build"
 * 27) In Solution Explorer, right-click "INSTALL" and choose "Build"
 * 28) Choose "Release" in the Solution Configuration drop-down.
 * 29) Right-click "ALL_BUILD" and choose "Clean"
 * 30) Repeat steps 3-4
 * 31) Set the following environment variable:
 * 32) * BULLET_ROOT => C:\OpenMW\deps\bullet
 * 1) * BULLET_ROOT => C:\OpenMW\deps\bullet

FreeType, GIFLIB, GLUT, libCURL, libJPEG, libPNG, libTIFF, minizip, and zlib
These are various open-source libraries you will need to build. Fortunately, there's a package created to build them painlessly. Unfortunately, you still have to do a lot of legwork. First step: acquire and unpack the sources.


 * FreeType: use git to clone: git://git.sv.nongnu.org/freetype/freetype2.git
 * GIFLIB: https://sourceforge.net/projects/giflib/files/giflib-5.1.4.tar.bz2/download
 * GLUT: use git to clone: https://github.com/markkilgard/glut.git
 * libCURL: https://curl.haxx.se/download/curl-7.49.0.zip
 * libJPEG: http://www.ijg.org/files/jpegsr9b.zip
 * libPNG: ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng16/lpng1622.zip
 * libTIFF: http://download.osgeo.org/libtiff/tiff-4.0.8.zip
 * minizip: use git to clone: http://github.com/nmoinvaz/minizip.git
 * zlib: http://zlib.net/zlib128.zip

For the libraries that come in an archive, you'll want to unzip the archives:


 * If you're using 7-zip: right-click > 7-Zip > "Extract to ".
 * Tip for GIFLIB: Use Right-click > 7-Zip > "Extract here" to extract the *.tar.bz2 to a *.tar file, and then use the "Extract to " option on the tar file.

To build, do the following:


 * 1) Create the following directory:
 * C:\OpenMW\deps\build\osg-3rdparty-cmake
 * 1) Get the osg-3rdparty-cmake repository:
 * 2) Open a command prompt
 * 3) Change to C:\OpenMW\deps\src
 * 4) Use CMake to generate the Visual Studio projects:
 * 5) Open CMake-gui
 * 6) For the source path, enter: C:/OpenMW/deps/src/osg-3rdparty-cmake
 * 7) For the build path, enter: C:/OpenMW/deps/build/osg-3rdparty-cmake
 * 8) Click "Configure", choose your version of Visual Studio/architecture (e.g. "Visual Studio 14 2015 Win64") and click Finish.
 * 9) Set CMAKE_INSTALL_PREFIX to C:/OpenMW/deps/osg-3rdparty-cmake (this setting seems to get ignored)
 * 10) Point each _SOURCE_DIR setting to the base directory of the source for the corresponding package.
 * 11) Click "Configure," it should complete with no errors (if you get an error, you probably didn't drill down far enough).
 * 12) Click "Generate"
 * 13) Build and install the 3rd-party libraries:
 * 14) Go to C:\OpenMW\deps\build\osg-3rdparty-cmake and open OpenscenegraphThirdParty.sln in Visual Studio
 * 15) Choose "Debug" in the Solution Configuration drop-down.
 * 16) In Solution Explorer, right-click "ALL_BUILD" and choose "Build"
 * 17) In Solution Explorer, right-click "INSTALL" and choose "Build"
 * 18) Right-click "ALL_BUILD" and choose "Clean"
 * 19) Choose "Release" in the Solution Configuration drop-down, then repeat steps 3-4
 * 20) Go to C:\OpenMW\deps\build\osg-3rdparty-cmake and copy the "3rdparty" directory to C:\OpenMW\deps
 * 21) Go to C:\OpenMW\deps\3rdparty\ and rename the folder named nnn-x64 (nnn will be a 3-digit number, i.e. 140 for VS2015 on W10) to x64.
 * 22) Set the following environment variables
 * 23) * OSG_3RDPARTY_DIR => C:\OpenMW\deps\3rdparty
 * 24) * FREETYPE_HOME => C:\OpenMW\deps\3rdparty\x64
 * 1) * FREETYPE_HOME => C:\OpenMW\deps\3rdparty\x64

MyGUI

 * 1) Create the following directories:
 * C:\OpenMW\deps\mygui
 * C:\OpenMW\deps\build\mygui
 * 1) Get the source:
 * 2) Open a command prompt
 * 3) Change to C:\OpenMW\deps\src
 * 4) Use CMake to generate the Visual Studio projects:
 * 5) Open CMake-GUI
 * 6) For the source path, enter: C:/OpenMW/deps/src/mygui
 * 7) For the build path, enter: C:/OpenMW/deps/build/mygui
 * 8) Set CMAKE_INSTALL_PREFIX to C:/OpenMW/deps/mygui/sdk
 * 9) Uncheck all of the MYGUI_BUILD options.
 * 10) Change MYGUI_RENDERSYSTEM to 1.
 * 11) Click "Configure". All of the red should go away (except MYGUI_CREATE_PACKAGE).
 * 12) Click "Configure" again.
 * 13) Click "Generate"
 * 14) Build and install MyGUI
 * 15) Open C:\OpenMW\deps\build\mygui\MYGUI.sln in Visual Studio
 * 16) Choose "Debug" in the Solution Configuration drop-down.
 * 17) In Solution Explorer, right-click "ALL_BUILD" and choose "Build"
 * 18) In Solution Explorer, right-click "INSTALL" and choose "Build"
 * 19) Right-click "ALL_BUILD" and choose "Clean"
 * 20) Choose "Release" in the Solution Configuration drop-down, then repeat steps 3-4
 * 21) Set the following environment variable:
 * 22) * MYGUI_HOME => C:\OpenMW\deps\mygui
 * 1) * MYGUI_HOME => C:\OpenMW\deps\mygui

OpenSceneGraph (OSG)

 * 1) Create the following directories:
 * C:\OpenMW\deps\osg
 * C:\OpenMW\deps\build\osg
 * 1) Get the source:
 * 2) Open a command prompt
 * 3) Change to C:\OpenMW\deps\src
 * 4) Use CMake to generate the Visual Studio projects:
 * 5) Open CMake-GUI
 * 6) For the source path, enter: C:/OpenMW/deps/src/osg
 * 7) For the build path, enter: C:/OpenMW/deps/build/osg
 * 8) Click "Configure", choose your version of Visual Studio/architecture (e.g. "Visual Studio 14 2015 Win64") and click Finish.
 * 9) Uncheck BUILD_OSG_APPLICATIONS
 * 10) Set CMAKE_INSTALL_PREFIX to C:/OpenMW/deps/osg
 * 11) Click "Add Entry" and fill it out as follows:
 * 12) * Name: CMAKE_DEBUG_POSTFIX
 * 13) * Type: String
 * 14) * Value: d
 * 15) * Description: leave blank
 * 16) Click "Configure"
 * 17) Click "Generate"
 * 18) Build and install OpenSceneGraph
 * 19) Open C:\OpenMW\deps\build\osg\OpenSceneGraph.sln in Visual Studio.
 * 20) Choose "Debug" in the Solution Configuration drop-down.
 * 21) In Solution Explorer, right-click "ALL_BUILD" and choose "Build"
 * 22) In Solution Explorer, right-click "INSTALL" and choose "Build"
 * 23) Go to C:\OpenMW\deps\osg\ and rename the bin directory to "Debug"
 * 24) Back in Visual Studio, choose "Release" in the Solution Configuration drop-down.
 * 25) Right-click "ALL_BUILD" and choose "Clean"
 * 26) Repeat steps 3-4
 * 27) Go to C:\OpenMW\deps\osg\ and rename the bin directory to "Release"
 * 28) Still in C:\OpenMW\deps\osg, create a new bin directory, and then copy/paste the contents of the Debug and Release folders into it.
 * 29) Set the following environment variable:
 * 30) * OSGDIR => C:\OpenMW\deps\osg
 * 1) * OSGDIR => C:\OpenMW\deps\osg

Before you start
You should download and run an official release at least once to ensure that it's properly detected your Morrowind installation files. This is because you won't have the wizard to use.

You've got your dependencies sorted, now here's how to build OpenMW itself.


 * 1) Get the source
 * 2) Open a command prompt.
 * 3) Change to C:\OpenMW
 * 4) Configure and generate Visual Studio projects with CMake
 * 5) Open CMake-GUI
 * 6) For the source path, enter: C:/OpenMW/src
 * 7) For the build path, enter: C:/OpenMW/build
 * 8) Click "Configure", choose your version of Visual Studio/architecture (e.g. "Visual Studio 14 2015 Win64") and click Finish. YOu'll get an error, ignore it.
 * 9) Uncheck the following options:
 * 10) * BUILD_LAUNCHER
 * 11) * BUILD_OPENCS
 * 12) * BUILD_WIZARD
 * 13) Set CMAKE_INSTALL_PREFIX to C:/OpenMW/out
 * 14) Click "Configure" again. You'll get another error, keep ignoring it.
 * 15) Set MYGUI_INCLUDE_DIRS to C:/OpenMW/deps/mygui/sdk/include/MYGUI
 * 16) Click "Configure". No errors, but a few new red items.
 * 17) Click "Configure" one last time.
 * 18) Click "Generate"
 * 1) Click "Generate"

Now, at this point things get janky, because the "INSTALL" project scripts don't work (at least, in VS 2015 they don't). So you have to do a lot of manual legwork.


 * 1) Open C:/OpenMW/build/OpenMW.sln in Visual Studio
 * 2) Choose the build you want (Debug or Release) in the Solutions Configuration drop-down.
 * 3) * If you plan on simply playing Morrowind, you want to choose "Release."
 * 4) Right-click "ALL_BUILD" and choose Build.
 * 5) Right-click on "INSTALL" and click Build. You'll get a ton of errors.
 * 6) Go to C:\OpenMW\build\Release\ and copy all the executables to C:\OpenMW\out.
 * 7) Go to C:\OpenMW\build\ and copy the "resources" folder to C:\OpenMW\out.
 * 8) Go to C:\OpenMW\deps\osg\ and grab the appropriate DLLs and copy to C:\OpenMW\out:
 * 9) * For a Debug build, you want the contents of the Debug/ folder.
 * 10) * For a Release build, you want the contents of the Release/ folder.
 * 11) Go to C:\OpenMW\deps\mygui\sdk\bin\Release\ and copy MyGUIEngine.dll to C:\OpenMW\out
 * 12) Go to C:\OpenMW\deps\ffmpeg\bin\ and copy *.dll to C:\OpenMW\out
 * 13) Go to C:\OpenMW\deps\SDL2-2.0.4\lib and copy SDL2.dll to C:\OpenMW\out
 * 14) Go to C:\OpenMW\deps\3rdParty\x64\bin and copy the appropriate DLLs:
 * 15) * For a Debug build, grab the DLLs that end with 'd', i.e. 'libcurld.dll'
 * 16) * For a Release build, grab the DLLs that do not have the 'd' suffix.

The moment of truth! Double-click openmw.exe, and if everything worked, Morrowind will start!