.. _MSYS2:
***********
MSYS2 Setup
***********
.. image:: https://www.msys2.org/logo.png
:alt: MSYS2 Logo
:width: 75px
:align: left
This is not a wrapper in itself, but guidance on using the MSYS2 toolchain to compile libraries and wrappers on Windows.
Background
==========
Prior versions of CoolProp supported **MINGW** as a Windows port of gcc. However, the original **MINGW** has been frozen since 2013 and is no longer compatible. Mingw-x64 (*with 32 and 64-bit compilers*) was forked form MinGW in 2007 to add 64-bit support and coverage of newer Windows APIs absent from the original project. `MSYS2 `__ followed in the 2010s, building on Mingw-x64 while adding the ``pacman`` package manager and a modernized distribution model. There is also a `VS Code extension `_ facilitating use of **VS Code** as the IDE to run the g++ compiler and GDB debugger. `MSYS2 `__ is the best place to download this set of GNU compiler tools as well as help on
* Installing and setting up the MSYS2/UCRT64 environment
* Terminals for command line operations in the UCRT64 environment
* Compilers and toolchains, including the most recent gcc version
* A UCRT64 specific version of CMake and other compiler tools
* Ninja CMake generator for auto-selection of toolchain based on current terminal environment
Installation
============
Install **MSYS2** from `MSYS2.org `_.
* Requires 64-bit Windows 10 (1809+) or newer. Support for Windows 8.1 was dropped in February, 2026.
* Install to ``C:\msys64``` only. This will make life much easier!
* When given a choice, choose the **UCRT64** environment!
* The **UCRT** C standard library is newer and also used by MS Visual Studio by default. It has better compatibility with MSVC, both at build and runtime, and is for modern C++ development.
* The **MSYS** environment uses the cygwin C Library and is really only for package management.
* There is a **MINGW64** environment, but it is being phased out of **MSYS2**.
* The **CLANG64** or **CLANGARM64** environments can be used (especially if compiling on ARM architecture), but have not been tested with CoolProp (*yet*).
In addition to installation, read through the `MSYS2 Documentation `_. There is a lot of information there that will help with environment and tools setup.
Adding Compiler and Tools
=========================
Instead of MinGW or Ming-w64, install the **UCRT64** compiler toolchain::
pacman -S --needed base_devel mingw-w64-ucrt-x86_64-toolchain
This will install:
* g++
* gcc
* ld
* standard C++ libraries
* modern Windows CRT (UCRT) libraries
.. note::
**MinGW** is no longer supported and **Ming-w64** is being phased out of MSYS2 in favor of **UCRT64**.
Tools Needed for the CoolProp Build Process
======================================================
Other than the compilers, there are a few additional tools that will be needed. These can be installed separately with the pacman package manager, or all at once by listing them all on the packman package list.
**Install UCRT64 CMake**
MSYS2 has its own version of cmake that is **UCRT64** aware. Install it with::
pacman -S --needed mingw-w64-ucrt-x86_64-cmake
**Install UCRT64 Git**
This is practically identical to the standalone "Git for Windows", but it is neatly bundled and pre-configured by the MSYS2 team to seamlessly integrate with your UCRT64 pathing and shell settings. Install with::
pacman -S --needed mingw-w64-ucrt-x86_64-git
.. note::
MSYS2 has its own **git** package primarily because standard Windows programs and Unix/Linux programs handle file paths, lines endings, and system processes fundamentally differently.
**Install UCRT64 Ninja**
MSYS2 **Ninja** is a compact, ultra-fast, low-level build system optimized strictly for execution speed. On `MSYS2 `__. Install it with::
pacman -S --needed mingw-w64-ucrt-x86_64-ninja
.. note::
Ninja is actually the default backend for the MSYS2 version of CMake. If you do not pass a -G flag to CMake, it automatically looks for a Ninja installation.
Verify the Installation
=======================
Open an ``MSYS2/MSYS2 UCRT64`` terminal from the Windows start menu and type::
which gcc g++ cmake git
all found paths should be in ``/ucrt64/bin/``. This means they are all in the ``UCRT64`` environment path.
Keeping MSYS2 Up-to-Date
========================
MSYS2 uses a global update process, rather than a package update, in order to ensure resolution of package dependencies. Periodically, the MSYS2 environment should be updated with the command::
pacman -Syu
UCRT64 Shell Environment
========================
**Always, always, always** build CoolProp in a ``UCRT64`` terminal (see `MSYS2 Terminals `_ on setting this up). Inside a UCRT64 Shell, the normal Windows environment variable and paths are completely replaced with a UCRT64 environment. This means that running git, cmake, or g++ will use the MSYS2 UCRT64 versions of these codes instead of the Windows native or Cygwin versions if they are installed on the machine.
Pro-Tip:
========
1. If using VS Code as your IDE/Text Editor, add the `MSYS2 recommended json `_ so that the ``MSYS2 UCRT64`` profile is available when launching a terminal window.
2. Add the path to VS Code to your .bashrc file so that it is available within a UCRT64 Shell and can be launched by typing ``code`` at the shell prompt.