Table of Contents
- Table of Contents
- Options
- Dependencies
- Compilation
Table of Contents
Options
here are the CMake
option
values available to adjust compilation (along with default values)
The list is not updated regularily, so check the CMakeLists.txt
files for option
and cmake_dependent_option
values
WITH_DEBUG_URBDRC
Dump data send/received in URBDRC channelOFF
BUILD_SHARED_LIBS
Build shared librariesON
EXPORT_ALL_SYMBOLS
Export all symbols form libraryOFF
BUILD_TESTING
Build library unit testsON
WITH_LIBRARY_VERSIONING
Use library version tripletON
WITH_SHADOW
Compile with shadow serverON
WITH_PROXY
Compile with proxy serverON
WITH_PLATFORM_SERVER
Compile with platform serverON
WITH_PROXY_EMULATE_SMARTCARD
Compile proxy smartcard emulationOFF
WITH_PROXY_APP
Compile proxy applicationON
WITH_PROXY_MODULES
Compile proxy modulesON
WITH_SMARTCARD_PCSC
Enable smartcard PCSC backendON
WITH_OPENSC_PKCS11_LINKED
Directly link opensc-pkcs11OFF
WITH_DEBUG_SCHANNEL
Compile support for SCHANNEL debugOFF
WITH_KRB5
Compile support for kerberos authentication. ${KRB5_DEFAULT}`WITH_KRB5_NO_NTLM_FALLBACK
Do not fall back to NTLM if no kerberos ticket available OFFWITH_KRB5
OFF`USE_UNWIND
Use unwind.h to generate backtracesON
WITH_LODEPNG
build WinPR with PNG supportOFF
WITH_LIBRARY_VERSIONING
Use library version tripletON
BUILD_SHARED_LIBS
Build shared librariesON
EXPORT_ALL_SYMBOLS
Export all symbols form libraryOFF
WITH_VERBOSE_WINPR_ASSERT
Compile with verbose WINPR_ASSERT.ON
WITH_WINPR_TOOLS
Build WinPR helper binariesON
WITH_WINPR_DEPRECATED
Build WinPR deprecated symbolsOFF
WITH_DEBUG_THREADS
Print thread debug messages, enables handle dump ${DEFAULT_DEBUG_OPTION}`WITH_DEBUG_EVENTS
Print event debug messages, enables handle dump ${DEFAULT_DEBUG_OPTION}`WITH_DEBUG_SYMBOLS
Pack debug symbols to installerOFF
WITH_NATIVE_SSPI
Use native SSPI modules ${NATIVE_SSPI}`WITH_SMARTCARD_INSPECT
Enable SmartCard API InspectorOFF
WITH_DEBUG_MUTEX
Print mutex debug messages ${DEFAULT_DEBUG_OPTION}`WITH_INTERNAL_RC4
Use compiled in rc4 functions instead of OpenSSL/MBedTLSOFF
WITH_INTERNAL_MD4
Use compiled in md4 hash functions instead of OpenSSL/MBedTLSOFF
WITH_INTERNAL_MD5
Use compiled in md5 hash functions instead of OpenSSL/MBedTLSOFF
WITH_UNICODE_BUILTIN
Use built-in Unicode conversion (don't use system-provided librariesSSPI_DLL
Define and export SSPI API symbols for usage as a Windows SSPI DLL replacementOFF
WITH_DEBUG_NTLM
Print NTLM debug messages ${DEFAULT_DEBUG_OPTION}`WITH_DEBUG_NLA
Print authentication related debug messages. ${DEFAULT_DEBUG_OPTION}`WITH_POLL
Check for and include poll.hON
WITH_PKCS11
encryption, certificate validation, hashing functions ${PKCS11_DEFAULT}`BUILD_SHARED_LIBS
Build shared librariesON
EXPORT_ALL_SYMBOLS
Export all symbols form libraryOFF
BUILD_TESTING
Build library unit testsON
WITH_LIBRARY_VERSIONING
Use library version tripletON
UWAC_HAVE_PIXMAN_REGION
Use PIXMAN or FreeRDP for region calculationsNOT FREERDP_UNIFIED_BUILD
BUILD_TESTING
Build automated tests.ON
WITH_WEBVIEW
Build with WebView support for AAD login popup browserOFF
WITH_WEBVIEW_QT
Build with QtWebEngine support for AAD login broweser popupOFF
CMAKE_COLOR_MAKEFILE
colorful CMake makefileON
CMAKE_VERBOSE_MAKEFILE
verbose CMake makefileON
CMAKE_POSITION_INDEPENDENT_CODE
build with position independent code (-fPIC or -fPIEWITH_DEBUG_SDL_EVENTS
[dangerous, not for release builds!] Debug SDL eventsOFF
WITH_DEBUG_SDL_KBD_EVENTS
[dangerous, not for release builds!] Debug SDL keyboard eventsOFF
WITH_WIN_CONSOLE
Build ${PROJECT_NAME} with console supportON
WITH_WINDOWS_CERT_STORE
Build ${MODULE_NAME} with additional certificate validation against windows certificate storeON
WITH_WIN_CONSOLE
Build ${MODULE_NAME} with console supportOFF
WITH_PROGRESS_BAR
Build ${MODULE_NAME} with connect progress bar (Windows 7+ or 2008 R2+CMAKE_COLOR_MAKEFILE
colorful CMake makefileON
CMAKE_VERBOSE_MAKEFILE
verbose CMake makefileON
CMAKE_POSITION_INDEPENDENT_CODE
build with position independent code (-fPIC or -fPIECMAKE_COLOR_MAKEFILE
colorful CMake makefileON
CMAKE_VERBOSE_MAKEFILE
verbose CMake makefileON
CMAKE_POSITION_INDEPENDENT_CODE
build with position independent code (-fPIC or -fPIEWITH_XINERAMA
[X11] enable xineramaON
WITH_XEXT
[X11] enable XextON
WITH_XCURSOR
[X11] enalbe XcursorON
WITH_XV
[X11] enable XvON
WITH_XI
[X11] enalbe XiON
WITH_XRENDER
[X11] enable XRenderON
WITH_XRANDR
[X11] enable XRandRON
WITH_XFIXES
[X11] enable XfixesON
WITH_CLIENT_INTERFACE
Build clients as a library with an interfaceOFF
WITH_CLIENT_MAC
Build native mac clientON
WITH_FUSE
Build clipboard with FUSE file copy support ${OPT_FUSE_DEFAULT}`CMAKE_COLOR_MAKEFILE
colorful CMake makefileON
CMAKE_VERBOSE_MAKEFILE
verbose CMake makefileON
CMAKE_POSITION_INDEPENDENT_CODE
build with position independent code (-fPIC or -fPIEWITH_X11
build X11 client/server ${OPT_DEFAULT_VAL}`CMAKE_INTERPROCEDURAL_OPTIMIZATION
Enable LTO linking TRUE`WITH_SMARTCARD_EMULATE
Emulate smartcards instead of redirecting readersOFF
WITH_FREERDP_DEPRECATED
Build FreeRDP deprecated symbolsOFF
WITH_FREERDP_DEPRECATED_COMMANDLINE
Build FreeRDP deprecated command line optionsOFF
BUILD_SHARED_LIBS
Build shared libraries ${LIB_DEFAULT}`EXPORT_ALL_SYMBOLS
Export all symbols form libraryOFF
WITH_AAD
Compile with support for Azure AD authenticationON
WITH_OPENH264_LOADING
Use LoadLibrary to load openh264 at runtimeOFF
WITH_VERBOSE_WINPR_ASSERT
Compile with verbose WINPR_ASSERT.ON
WITH_RDTK
build rdtk toolkitON
Dependencies
Server and Client applications
- OpenSSL or MbedTLS for encryption/decryption
Client
-
uriparser
for parsing clipboard urls (optional, linux only) -
libusb
for raw USB redirection -
Sound (microphone and playback) requires a encoder/decoder for various formats. That can be:
FFMPEG
does all encoding/decoding- Use
gsm
,faad2
,faac
forGSM
andAAC
support - Use
soxr
for sound resampling
-
Video decoders (For GFX H264 and
/video
redirection support):H264
can be supported thoughOpenH264
(working only with1.8.0
until https://github.com/cisco/openh264/issues/3476 is resolved)FFMPEG
-
Image scalers (for
smart-sizing
and some HighDPI features of RDP)swscale
cairo
-
Old (Windows 7) style media redirection (deactivated by default) also requires:
- GStreamer (0.1 or 1.0)
-
Platform/feature dependent options:
- Android MediaCodec (h264)
- Windows MediaFramework (h264)
ALSA
(sound)PULSE
(sound)OSS
(sound)CUPS
(printing)FUSE
(file clipboard)ICU
(unicode)OPENSLES
(sound)PCSC
(smartcard)cJSON
(AVD/AAD auth)libsdl2-ttf
,libsdl2-image
andlibsdl2
(SDL client)
Legacy issues (rc4
, md4
, md5
)
RDP
uses a couple of legacy algorithms deep within the protocol which might lead to problems at runtime.
Ensure, that
rc4
,md4
andmd5
are supported by yourSSL
library
- Also ensure you have the correct runtime configuration that allows these hashes
- Compile in
rc4
,md4
ormd5
withWITH_INTERNAL_RC4
,WITH_INTERNAL_MD4
orWITH_INTERNAL_MD5
Compilation
First, you'll need to get the dependencies and sources. Follow the next instructions step by step (unless the dependency is already installed on your system)
Common instructions
See options list of compilation options for FreeRDP
.
Build OpenSSL
- to build the library static add
no-shared
to theConfigure
options - basic steps are similar on all OS, but the detailed
./Configure
options might vary, check https://wiki.openssl.org/index.php/Compilation_and_Installation for further details
git clone -b openssl-3.1.1 https://github.com/openssl/openssl.git
cd openssl
./Configure mingw64 --cross-compile-prefix=x86_64-w64-mingw32- --prefix=<your install path> --libdir=<lib|lib64>
make -j build_sw
make -j install_sw
LibreSSL
As an alternative to OpenSSL
LibreSSL
can be used.
Add -DWITH_LIBRESSL=ON
to your FreeRDP
build to force detection of LibreSSL
Build static or shared lib, set -DBUILD_SHARED_LIBS=ON|OFF
accordingly
git clone -b v3.8.2 https://github.com/libressl/portable.git libressl
cmake -GNinja \
-DCMAKE_TOOLCHAIN_FILE=<full path to toolchain.cmake> \
-B libressl-build \
-S libressl \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON \
-DCMAKE_INSTALL_PREFIX=<your install path> \
-DLIBRESSL_APPS=OFF \
-DLIBRESSL_TESTS=OFF
cmake --build libressl-build
cmake --install libressl-build
Build zlib
Build static and shared lib
git clone --depth 1 -b v1.3 https://github.com/madler/zlib.git
cmake -GNinja \
-DCMAKE_TOOLCHAIN_FILE=<full path to toolchain.cmake> \
-B zlib-build \
-S zlib \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON \
-DCMAKE_INSTALL_PREFIX=<your install path> \
-DLIBRESSL_APPS=OFF \
-DLIBRESSL_TESTS=OFF
cmake --build zlib-build
cmake --install zlib-build
Build uriparser
Build static or shared lib, set -DBUILD_SHARED_LIBS=ON|OFF
accordingly
git clone --depth 1 -b uriparser-0.9.7 https://github.com/uriparser/uriparser.git
cmake -GNinja \
-DCMAKE_TOOLCHAIN_FILE=<full path to toolchain.cmake> \
-B uriparser-build \
-S uriparser \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON \
-DCMAKE_INSTALL_PREFIX=<your install path> \
-DURIPARSER_BUILD_DOCS=OFF \
-DURIPARSER_BUILD_TESTS=OFF
cmake --build uriparser-build
cmake --install uriparser-build
Build cJSON
Build static and shared libs in one go
git clone --depth 1 -b v1.7.16 https://github.com/DaveGamble/cJSON.git
cmake -GNinja \
-DCMAKE_TOOLCHAIN_FILE=<full path to toolchain.cmake> \
-B cJSON-build \
-S cJSON \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON \
-DCMAKE_INSTALL_PREFIX=<your install path> \
-DENABLE_CJSON_TEST=OFF \
-DBUILD_SHARED_AND_STATIC_LIBS=ON
cmake --build cJSON-build
cmake --install cJSON-build
Build SDL2
Build static and shared libs in one go
git clone --depth 1 -b release-2.28.1 https://github.com/libsdl-org/SDL.git
cmake -GNinja \
-DCMAKE_TOOLCHAIN_FILE=<full path to toolchain.cmake> \
-B SDL-build \
-S SDL \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON \
-DCMAKE_INSTALL_PREFIX=<your install path> \
-DSDL_TEST=OFF \
-DSDL_TESTS=OFF \
-DSDL_STATIC_PIC=ON
cmake --build SDL-build
cmake --install SDL-build
Build SDL2_ttf
Build static or shared lib, set -DBUILD_SHARED_LIBS=ON|OFF
accordingly
git clone --depth 1 --shallow-submodules --recurse-submodules -b release-2.20.2 https://github.com/libsdl-org/SDL_ttf.git
cmake -GNinja \
-DCMAKE_TOOLCHAIN_FILE=<full path to toolchain.cmake> \
-B SDL_ttf-build \
-S SDL_ttf \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON \
-DCMAKE_INSTALL_PREFIX=<your install path> \
-DSDL2TTF_HARFBUZZ=ON \
-DSDL2TTF_FREETYPE=ON \
-DSDL2TTF_VENDORED=ON \
-DFT_DISABLE_ZLIB=OFF \
-DSDL2TTF_SAMPLES=OFF
cmake --build SDL_ttf-build
cmake --install SDL_ttf-build
Build SDL2_image
Build static or shared lib, set -DBUILD_SHARED_LIBS=ON|OFF
accordingly
git clone --depth 1 --shallow-submodules --recurse-submodules -b release-2.8.1 https://github.com/libsdl-org/SDL_image.git
cmake -GNinja \
-DCMAKE_TOOLCHAIN_FILE=<full path to toolchain.cmake> \
-B SDL_image-build \
-S SDL_image \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON \
-DCMAKE_INSTALL_PREFIX=<your install path> \
-DSDL2IMAGE_SAMPLES=OFF \
-DSDL2IMAGE_DEPS_SHARED=OFF
cmake --build SDL_image-build
cmake --install SDL_image-build
libusb (optional)
Build static or shared lib, set -DLIBUSB_BUILD_SHARED_LIBS=ON|OFF
accordingly
NOTE: we're using a 3rd party repo here to build with CMake
as that is easier to handle for cross compilation
git clone --depth 1 --shallow-submodules --recurse-submodules -b v1.0.26 https://github.com/libusb/libusb-cmake.git
cmake -GNinja \
-DCMAKE_TOOLCHAIN_FILE=<full path to toolchain.cmake> \
-B libusb-cmake-build \
-S libusb-cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON \
-DCMAKE_INSTALL_PREFIX=<your install path> \
-DLIBUSB_BUILD_EXAMPLES=OFF \
-DLIBUSB_BUILD_TESTING=OFF \
-DLIBUSB_ENABLE_DEBUG_LOGGING=OFF
cmake --build libusb-cmake-build
cmake --install libusb-cmake-build
FFMPEG (optional)
see https://trac.ffmpeg.org/wiki/CompilationGuide/CrossCompilingForWindows for instructions
git clone --depth 1 -b n6.0 https://github.com/FFmpeg/FFmpeg.git
mkdir ffmpeg-build
cd ffmpeg-build
../FFmpeg/configure --arch=x86_64 --target-os=mingw64 --cross-prefix=x86_64-w64-mingw32- --prefix=<your install dir>
make -j
make -j install
openh264 (optional)
Build static and shared libs in one go
https://mesonbuild.com/Cross-compilation.html
meson toolchain file
[binaries]
c = 'x86_64-w64-mingw32-gcc'
cpp = 'x86_64-w64-mingw32-g++'
ar = 'x86_64-w64-mingw32-ar'
strip = 'x86_64-w64-mingw32-strip'
exe_wrapper = 'wine64'
[host_machine]
system = 'windows'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'
[properties]
sysroot = '/usr/x86_64-w64-mingw32'
git clone --depth 1 -b v2.3.1 https://github.com/cisco/openh264.git
meson setup \
-Dprefix=<your install path> \
-Db_pie=true \
-Db_lto=true \
-Dbuildtype=release \
-Dpkgconfig.relocatable=true \
-Dtests=disabled \
-Ddefault_library=both \
openh264-build \
openh264
ninja -C openh264-build
ninja -C openh264-build install
Build FreeRDP
- Disable USB with
-DCHANNEL_URBDRC=OFF
(libusb required forON
) - Enable OpenH264 with
-DWITH_OPENH264=ON
- Enable FFMPEG with
-DWITH_FFMPEG=ON -DWITH_SWSCALE=ON -DWITH_DSP_FFMPEG=ON
- Build static binaris/libraries with
-DBUILD_SHARED_LIBS=OFF
unless further instructions are available for dependency - Build fully static (including runtime) with
-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded
(windows)set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
(add to toolchain file, others)
NOTE: Check your c++ compiler/libs are up to date, the ones shipped with debian 12 might lack some features. In that case disable our C++ projecst with -DWITH_CLIENT_SDL=OFF -DWITH_PROXY_MODULES=OFF
git clone --depth 1 https://github.com/freerdp/freerdp.git
cmake -GNinja \
-DCMAKE_TOOLCHAIN_FILE=<full path to toolchain.cmake> \
-B freerdp-build \
-S freerdp \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON \
-DCMAKE_INSTALL_PREFIX=<your install path> \
-DWITH_SERVER=ON \
-DWITH_SAMPLE=ON \
-DWITH_PLATFORM_SERVER=OFF \
-DUSE_UNWIND=OFF \
-DWITH_SWSCALE=OFF \
-DWITH_FFMPEG=OFF \
-DWITH_WEBVIEW=OFF
cmake --build freerdp-build
cmake --install freerdp-build
Linux Specifics
Build a Flatpak
Dependencies
- Install
flatpak
and configure "flathub.org":https://flatpak.org/setup/
Compilation
- Run
flatpak-builder --repo=repo <build dir> packaging/flatpak/com.freerdp.FreeRDP.json
from the checkout root - For a easy to install package run
flatpak build-bundle repo com.freerdp.FreeRDP.flatpak com.freerdp.FreeRDP --runtime-repo=https://flathub.org/repo/flathub.flatpakrepo
Installation
flatpak install com.freerdp.FreeRDP.flatpak
for bundle
Traditional packages (deb
and rpm
)
Nightly build for debian based systems
sudo apt build-dep freerdp-x11
or sudo apt build-dep freerdp2-x11
ln -s packaging/deb/freerdp-nightly debian
dpkg-buildpackage
Install the suggested base dependencies:
debian based
- ensure you have enabled
contrib non-free
ondebian
in/etc/apt/sources.list
- ensure you have enabled
universe multiverse
onubuntu
in/etc/apt/sources.list
- the following installs all (even optional) libraries to build everything
FreeRDP
is capable of supporting:
sudo apt-get install \
ninja-build \
build-essential \
git-core \
debhelper \
cdbs \
dpkg-dev \
cmake \
cmake-curses-gui \
clang-format \
ccache \
opencl-c-headers \
ocl-icd-opencl-dev \
libmp3lame-dev \
libopus-dev \
libsoxr-dev \
libpam0g-dev \
pkg-config \
xmlto \
libssl-dev \
docbook-xsl \
xsltproc \
libxkbfile-dev \
libx11-dev \
libwayland-dev \
libxrandr-dev \
libxi-dev \
libxrender-dev \
libxext-dev \
libxinerama-dev \
libxfixes-dev \
libxcursor-dev \
libxv-dev \
libxdamage-dev \
libxtst-dev \
libcups2-dev \
libpcsclite-dev \
libasound2-dev \
libpulse-dev \
libgsm1-dev \
libusb-1.0-0-dev \
uuid-dev \
libxml2-dev \
libfaad-dev \
libfaac-dev \
libsdl2-dev \
libsdl2-ttf-dev \
libcjson-dev \
libpkcs11-helper-dev \
liburiparser-dev \
libkrb5-dev \
libsystemd-dev \
libfuse3-dev \
libswscale-dev \
libcairo2-dev \
libavutil-dev \
libavcodec-dev \
libswresample-dev \
libwebkit2gtk-4.0-dev \
libpkcs11-helper1-dev
Fedora 39 and close relatives
- ensure you have 3rdparty repositories enabled
- the following installs all required dependencies (even optional ones) to build
FreeRDP
:
sudo dnf -y install \
ninja-build \
cups-devel \
systemd-devel \
libuuid-devel \
pulseaudio-libs-devel \
gcc-c++ libXrandr-devel \
gsm-devel \
gcc \
cmake \
ccache \
git-clang-format \
pam-devel \
fuse3-devel \
opus-devel \
lame-devel \
ocl-icd-devel \
docbook-style-xsl \
openssl-devel \
libX11-devel \
libXext-devel \
libXinerama-devel \
libXcursor-devel \
libXi-devel \
libXdamage-devel \
libXv-devel \
libxkbfile-devel \
alsa-lib-devel \
openh264-devel \
libavcodec-free-devel \
libavformat-free-devel \
libavutil-free-devel \
libswresample-free-devel \
libswscale-free-devel \
libusb1-devel \
uriparser-devel \
SDL2-devel \
SDL2_ttf-devel \
pkcs11-helper-devel \
webkit2gtk4.0-devel \
krb5-devel \
cjson-devel \
cairo-devel \
soxr-devel \
wayland-devel \
wayland-protocols-devel
compilation & installation
proceed with the build as described in Build FreeRDP
Android specifics
- Builds have been tested on linux hosts, so your mileage on MacOS and Windows may vary (please add additional instructions here if you are using such a build host)
- Android SDK and NDK need to be installed
To build first simply run:
./scripts/android-build-freerdp.sh \
--ndk <path_to_ndk> \
--sdk <path_to_sdk> \
--conf android-build-release.conf
the script can be found in the repo:
configuration file examples at android-build.conf
for the native dependency build and then open the project in AndroidStudio / run ./gradlew
just like with any other android project.
macOS Specifics
Using a package manager (xfreerdp)
If you're using MacPorts then just install FreeRDP port:
sudo port install FreeRDP
FreeRDP is now available as a homebrew recipe.
brew install freerdp
Use it like xfreerdp ...
Compiling from sources (native and SDL client)
- create a toolchain file for your system:
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64"
for a universal build (or just set the architecture if you only want one)-DCMAKE_OSX_DEPLOYMENT_TARGET=14
to set-mmacosx-version-min
to macOS 14 (or any other version you desire and is supported by your toolchain)
- with that toolchain then proceed with the build as described in common
Ready to use build script
The following script downloads builds and installs FreeRDP on mac.
- It installs everything to
install/
subdirectory of where the script is called from - It does not link external stuff from
brew
orports
- It is build without
FFMPEG
Compiling for Visual Studio or Windows SDK
Prerequisites
- Visual Studio or Windows SDK
- "meson":https://mesonbuild.com/ (also contains 'ninja')
- "cmake":https://cmake.org/
- "nasm":https://www.nasm.us
- "perl":https://www.perl.org
- Start a visual studio command prompt (or windows sdk prompt) (
vcvars_all.bat
)- Ensure the correct environment is used (32 or 64 bit)
- Ensure
meson
,cmake
,ninja
,nasm
,perl
andgit
are in yourPATH
- from that prompt then proceed with the build as described in common
Compiling for MINGW
- Install dependencies and compilers for mingw
- Create a toolchain file for
CMake
to pick up libraries/compilers https://cmake.org/cmake/help/book/mastering-cmake/chapter/Cross%20Compiling%20With%20CMake.html (fedora hasmingw64-cmake
doing that for you) cmake -GNinja -B<builddir> -S<sourcedir> -DCMAKE_TOOLCHAIN_FILE=<toolchain.cmake> -DCMAKE_INSTALL_PREFIX=<install prefix>
cmake --build <builddir> --target install
Fedora build
with Fedora it is quite easy to do, just
- Install
sudo dnf install mingw64-zlib.noarch mingw64-winpthreads.noarch mingw64-pixman.noarch mingw64-openssl.noarch mingw64-libstdc++.x86_64 mingw64-libgcc.x86_64 mingw64-jsoncpp.noarch mingw64-SDL2.noarch mingw64-SDL2_ttf.noarch mingw64-crt.noarch mingw64-fontconfig.noarch mingw64-gsm.noarch mingw64-harfbuzz.noarch mingw64-gcc-c++.x86_64 mingw64-gcc.x86_64 mingw64-libgcc.x86_64
- then proceed with the build as described in common (replace
cmake
configuration calls withmingw64-cmake
)
Debian build
Toolchain file for debian (mingw64)
SET(CMAKE_SYSTEM_NAME Windows CACHE STRING "toolchain default")
SET(CMAKE_SYSTEM_PROCESSOR amd64 CACHE STRING "toolchain default")
SET(CMAKE_C_COMPILER /usr/bin/x86_64-w64-mingw32-gcc CACHE STRING "toolchain default")
SET(CMAKE_CXX_COMPILER /usr/bin/x86_64-w64-mingw32-g++ CACHE STRING "toolchain default")
SET(CMAKE_RC_COMPILER_INIT /usr/bin/x86_64-w64-mingw32-windres CACHE STRING "toolchain default")
SET(CMAKE_RC_COMPILER /usr/bin/x86_64-w64-mingw32-windres CACHE STRING "toolchain default")
SET(CMAKE_AR /usr/bin/x86_64-w64-mingw32-ar CACHE STRING "toolchain default")
SET(CMAKE_C_COMPILER_AR /usr/bin/x86_64-w64-mingw32-ar CACHE STRING "toolchain default")
SET(CMAKE_CXX_COMPILER_AR /usr/bin/x86_64-w64-mingw32-ar CACHE STRING "toolchain default")
SET(CMAKE_RANLIB /usr/bin/x86_64-w64-mingw32-ranlib CACHE STRING "toolchain default")
SET(CMAKE_C_COMPILER_RANLIB /usr/bin/x86_64-w64-mingw32-ranlib CACHE STRING "toolchain default")
SET(CMAKE_CXX_COMPILER_RANLIB /usr/bin/x86_64-w64-mingw32-ranlib CACHE STRING "toolchain default")
SET(CMAKE_LINKER /usr/bin/x86_64-w64-mingw32-ld CACHE STRING "toolchain default")
SET(CMAKE_NM /usr/bin/x86_64-w64-mingw32-nm CACHE STRING "toolchain default")
SET(CMAKE_READELF /usr/bin/x86_64-w64-mingw32-readelf CACHE STRING "toolchain default")
SET(CMAKE_OBJCOPY /usr/bin/x86_64-w64-mingw32-objcopy CACHE STRING "toolchain default")
SET(CMAKE_OBJDUMP /usr/bin/x86_64-w64-mingw32-objdump CACHE STRING "toolchain default")
SET(CMAKE_SYSROOT /usr/x86_64-w64-mingw32 CACHE STRING "toolchain default")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER CACHE STRING "toolchain default")
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY CACHE STRING "toolchain default")
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY CACHE STRING "toolchain default")
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY CACHE STRING "toolchain default")
For CMake
based projects you need to add the following to your command line (or add to the toolchain with the set(VARIABLE_NAME <install prefix>)
syntax) to control installation and library search locations:
-DCMAKE_INSTALL_PREFIX=<install path> \
-DCMAKE_PREFIX_PATHS=<install path> \
-DCMAKE_FIND_ROOT_PATH=<install path>
then proceed with the build as described in common