There are several methods for using CMake but the easiest by far is through Visual Studio by importing the CMake project directly into it. So that is what will be described below.
-
Visual Studio 2019 or 2022 (Community Edition is fine)
-
Git for Windows (or other git tool)
-
vcpkg
-
Visual Studio
Download from the official site and run the installer.
Make sure to check Desktop development with C++ under Workloads and Clang C++ Tools for Windows in Optional components.
-
Git
Nothing special. Just follow the installer.
-
vcpkg
Let's say you will install it to
C:\vcpkg
.Open your preferred terminal and go to
C:\
. Then run these commands.C:\> git clone https://github.com/microsoft/vcpkg C:\> cd vcpkg C:\vcpkg> bootstrap-vcpkg.bat C:\vcpkg> vcpkg integrate install
-
vcpkg
You are recommended to update vcpkg from time to time, so that the latest libraries are used in the build.
Go to the installation path, pull the latest repo and the binary:
C:\vcpkg> git pull C:\vcpkg> bootstrap-vcpkg.bat
-
Launch Visual Studio
Choose either Clone a repository to clone from GitHub or Open a local folder if you already have a copy.
-
Open Terminal (View -> Terminal). Install the needed submodules to build the project, avoiding CMake telling you to do so with:
git submodule update --init --recursive
Note: This step is not necessary if you have chosen Clone a repository as Visual Studio automatically takes care of it.
-
Switch to folder view in the solution explorer
-
Select a configuration from the dropdown menu below the search box. The default configurations are:
-
x64-native
Build x64 executables with 64-bit compiler (most common)
-
x64-on-x86
Cross compile x64 executables with 32-bit compiler
-
x86-native
Build x86 executables with 32-bit compiler
-
x86-on-x64
Cross compile x86 executables with 64-bit compiler
On 64-bit Windows, all four configurations can be used. 32-bit platforms can only use 32-bit compiler.
-
-
Visual Studio will try generating CMake cache. If not, click Project -> Configure Cache or Generate Cache.
If CMake is busy, you will find Generate Cache greyed out. Wait until it finishes or click Cancel CMake Cache Generation to stop it.
The initial configuration will take a longer time since it needs to download and install dependencies.
-
When CMake generation finished is displayed, simply go to toolbar and click Build -> Build All.
-
Once building has finished, hopefully with no errors, look in the newly created
/build
directory in the project's folder.Run
vpnsetup.exe
to install desired components. -
Congrats, you now have a complete CMake development environment for SoftEtherVPN on Windows, enjoy and happy contributing!
-
Build number
You can change the build number in
CMakeSettings.json
. Use any integer no less than 5180.Delete and regenerate CMake cache after the change.
-
OpenSSL
The above instruction builds OpenSSL library statically in the SoftEther binaries, so that when you distribute the installer to others they will not need to install OpenSSL separately. However, the downside is that the OpenSSL library cannot be updated without a rebuild and reinstallation of SoftEther.
It's also possible to build OpenSSL library dynamically so that you can update OpenSSL without rebuilding SoftEther. To achieve that, you need to remove
openssl
fromvcpkg.json
and install OpenSSL directly.Installing from a package manager such as Scoop would make the subsequent updates easily. However, you should avoid using Winget for the time being because due to a bug it cannot detect the correct version of OpenSSL, causing endless updates.
If you install from Scoop, make sure to add the OpenSSL folder to the system's
PATH
. As Scoop already adds it to the user'sPATH
, just copy the same location into the system environment variable(s). SoftEther Client Service starts from the System account and will fail to start if OpenSSL is not in the globalPATH
.Building should be straightforward. You can verify that the binaries are now linked against the locally installed OpenSSL with tools like
ldd
(available from Git Bash):$ ldd /c/Program\ Files/SoftEther\ VPN\ Client\ Developer\ Edition/vpnclient.exe ... libcrypto-3-x64.dll => /c/Scoop/apps/openssl/current/bin/libcrypto-3-x64.dll (0x7ff8beb70000) libssl-3-x64.dll => /c/Scoop/apps/openssl/current/bin/libssl-3-x64.dll (0x7ff8beaa0000) ...
-
32-bit Windows
You don't need 32-bit Windows to build 32-bit executables. However, if 32-bit Windows is what you only have, things become a little complicated.
Visual Studio 2019 is the last version that works on 32-bit Windows. It does the job but its bundled CMake and Ninja are 64-bit versions.
After the installation of VS 2019, you need to download 32-bit CMake and Ninja and replace those that come with VS in:
C:\Program Files\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake
Currently CMake has an official x86 installer but Ninja does not. You may need to download from a 3rd party or build from source.