doc/c++/COMPILING-VS-VCPKG.md
Contents
<!-- END doctoc generated TOC please keep comment here to allow auto update -->This guide contains steps required to allow compilation of Cataclysm-DDA on Windows using Visual Studio and vcpkg.
Steps from current guide were tested on Windows 11 (64 bit), Visual Studio 2022 (64 bit) and vcpkg, but should as well work with slight modifications for other versions of Windows and Visual Studio.
WARNING: If you have CMake 4 or newer installed, you need to downgrade to CMake 3 eg. https://github.com/Kitware/CMake/releases/tag/v3.31.8 or a newer version of CMake 3. CMake 4 is not compatible with the version of vcpkg we use.
Install Visual Studio (installer can be downloaded from Visual Studio homepage).
Install Git for Windows (installer can be downloaded from Git homepage).
Install and configure vcpkg. If you already have vcpkg installed, you should update it to at least commit 3b57fb2e1ff55613db14d2aaf0a30529289c7050 (the most recent tested good revision) and rerun .\bootstrap-vcpkg.bat as described:
WARNING: It is important that, wherever you decide to clone this repo, the path does not include whitespace or special symbols. That is, C:/dev/vcpkg is acceptable, but C:/dev test/vcpkg and C:/C++Projects/vcpkg is not.
In a cmd.exe shell:
REM cd to the appropriate folder first
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
git pull
.\bootstrap-vcpkg.bat -disableMetrics
.\vcpkg integrate install
In a Git Bash shell, the commands are almost the same except the filesystem path separator is / instead of \.
# cd to the appropriate folder first
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
git pull
./bootstrap-vcpkg.bat -disableMetrics
./vcpkg.exe integrate install
If during the compilation you're getting a vcpkg error along the lines of error: no version database entry for sdl2 at 2.26.5, that probably means that your vcpkg install is too old. Running a git pull in vcpkg directory should fix the issue.
git clone https://github.com/CleverRaven/Cataclysm-DDA.git
cd Cataclysm-DDA
Note: This will download the entire CDDA repository; about three gigs of data. If you're just testing you should probably add --depth=1.
Note: If you want to contribute to CDDA, see example git workflow.
Open the provided solution (msvc-full-features\Cataclysm-vcpkg-static.sln) in Visual Studio.
Open the Build > Configuration Manager menu and adjust Active solution configuration and Active solution platform to match your intended target.
Release configuration and x64 platform together make a good default setting. Debug is too slow and should be reserved for breakpoint debugging with code stepping.Start the build process by selecting either Build > Build Solution or Build > Build > 1 Cataclysm-vcpkg-static. The process may take a long period of time, so you'd better prepare a cup of coffee and some books in front of your computer :) The first build of each architecture will also download and install dependencies through vcpkg, which can take an especially long time.
If you need localization support, execute the bash script lang/compile_mo.sh inside Git Bash GUI just like on a UNIX-like system. This will compile the language files that were not automatically compiled in step 3 above.
Even if you do not need languages other than English, you may still want to execute lang/compile_mo.sh to compile the language files if you're planning to run the unit tests, since those rely on the language files existing.
Ensure that the Cataclysm project (Cataclysm-vcpkg-static) is the selected startup project.
Set as Startup Project.Run or debug Cataclysm
When debugging, it is not strictly necessary to use a Debug build; Release builds run significantly faster, can still be run in the debugger, and most of the time will have most of the information you need.
Ensure that the Cataclysm test project (Cataclysm-test-vcpkg-static) is the selected startup project.
Configure any extra command line arguments for the tests.
Configuration Properties > Debugging, change Command Arguments to the needed arguments.--wait-for-keypress exit can be helpful by keeping the test window open at the end until you press Enter.Run the tests
Additional command line arguments may be configured in the project's command line arguments setting, or if you are using a compatible unit test runner (e.g. Resharper) you can run or debug individual tests from the unit test sessions.
You can also start the test runner library manually from Windows console. Run it with --help for an overview of the arguments.
It is recommended you run the unit tests in a Release configuration. Debug builds of the unit tests generally run intolerably slowly, but can raise signal that Release builds will not catch, like invalid iterators or improper STL usage.
There is a batch script in msvc-full-features folder distribute.bat. It will create a sub folder distribution and copy all required files(eg. data/, Cataclysm.exe and dlls) into that folder. Then you can zip it and share the archive on the Internet.
It is possible to use ccache with Visual Studio and gain the same benefits as other platforms.
Download the "Windows x86_64 (binary release)" of ccache from https://ccache.dev/download.html.
Extract the contents of the zip file somewhere convenient but not on $PATH.
C:/dev/Cataclysm-DDA/, then extract the folder and move the contents to C:/dev/ccache/. Verify the binary exists at C:/dev/ccache/ccache.exe.Create a copy of ccache.exe in the same folder, called cl.exe.
ccache.exe called clang-cl.exe.Create a file called Directory.Build.props at the root of the Cataclysm-DDA folder with the following contents. If it already exists, merge it with the contents below. The value of CDDA_CCACHE_PATH should be the folder where you put ccache.exe. Assuming this path is C:\dev\ccache\ (note: \ vs / matters, you need to use \ here):
<Project>
<PropertyGroup>
<CDDA_USE_CCACHE>true</CDDA_USE_CCACHE>
<CDDA_CCACHE_PATH>C:\dev\ccache\</CDDA_CCACHE_PATH>
</PropertyGroup>
</Project>
It is possible to use llvm-lib.exe and lld-link.exe to speed up your local builds by skipping unnecessary copy steps.
Assets section called eg. LLVM-16.0.6-win64.exe, or whatever version you are downloading.Directory.Build.props at the root of the Cataclysm-DDA folder with the following contents._PATH variables to the path you installed LLVM to.<Project>
<PropertyGroup>
<CDDA_ENABLE_THIN_ARCHIVES>true</CDDA_ENABLE_THIN_ARCHIVES>
<CDDA_LLVM_LIB_PATH>C:\Program Files\LLVM\bin\</CDDA_LLVM_LIB_PATH>
<CDDA_LLD_LINK_PATH>C:\Program Files\LLVM\bin\</CDDA_LLD_LINK_PATH>
</PropertyGroup>
</Project>
<Project>
<PropertyGroup>
<CDDA_ENABLE_THIN_ARCHIVES>true</CDDA_ENABLE_THIN_ARCHIVES>
</PropertyGroup>
</Project>