early-access version 2853
This commit is contained in:
		
							
								
								
									
										155
									
								
								externals/vcpkg/docs/users/mingw.md
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										155
									
								
								externals/vcpkg/docs/users/mingw.md
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,155 @@
 | 
			
		||||
# Vcpkg and Mingw-w64
 | 
			
		||||
 | 
			
		||||
**The latest version of this documentation is available on [GitHub](https://github.com/Microsoft/vcpkg/tree/master/docs/users/mingw.md).**
 | 
			
		||||
 | 
			
		||||
*MinGW is not tested as part of vcpkg repository's CI process, so regressions can occur as part of library updates. PRs improving support are welcome!*
 | 
			
		||||
 | 
			
		||||
## Table of Contents
 | 
			
		||||
 | 
			
		||||
 - [Mingw-w64 community triplets](#mingw-w64-community-triplets)
 | 
			
		||||
 - [Using Mingw-w64 natively on Windows](#mingw-native)
 | 
			
		||||
   - [How to avoid mixing different installations](#how-to-avoid-mixing-different-installations)
 | 
			
		||||
 - [Using Mingw-w64 to build Windows programs on other systems](#mingw-cross)
 | 
			
		||||
 | 
			
		||||
## Mingw-w64 community triplets
 | 
			
		||||
 | 
			
		||||
Vcpkg includes
 | 
			
		||||
[x64, x86, arm64 and arm community triplets](https://github.com/microsoft/vcpkg/tree/master/triplets/community)
 | 
			
		||||
for [Mingw-w64](http://mingw-w64.org/). They don't depend on Visual Studio and
 | 
			
		||||
can be used natively on Windows as well as for cross-compiling on
 | 
			
		||||
other operating systems. There are two variants of each triplet,
 | 
			
		||||
selecting between static and dynamic linking. The actual tools
 | 
			
		||||
(g++ etc.) are expected to be named with particular prefixes.
 | 
			
		||||
 | 
			
		||||
| architecture | vcpkg community triplets                | tool name prefix     |
 | 
			
		||||
|--------------|-----------------------------------------|----------------------|
 | 
			
		||||
| x64          | x64-mingw-dynamic, x64-mingw-static     | x86_64-w64-mingw32-  |
 | 
			
		||||
| x86          | x86-mingw-dynamic, x86-mingw-static     | i686-w64-mingw32-    |
 | 
			
		||||
| arm64        | arm64-mingw-dynamic, arm64-mingw-static | aarch64-w64-mingw32- |
 | 
			
		||||
| arm          | arm-mingw-dynamic, arm-mingw-static     | armv7-w64-mingw32-   |
 | 
			
		||||
 | 
			
		||||
These triplets are not tested by continuous integration, so many ports
 | 
			
		||||
do not build, and even existing ports may break on port updates.
 | 
			
		||||
Because of this, community involvement is paramount!
 | 
			
		||||
 | 
			
		||||
- [Discussions](https://github.com/microsoft/vcpkg/discussions?discussions_q=mingw)
 | 
			
		||||
- [Open issues](https://github.com/microsoft/vcpkg/issues?q=is%3Aissue+is%3Aopen+mingw)
 | 
			
		||||
- [Open pull requests](https://github.com/microsoft/vcpkg/pulls?q=is%3Apr+is%3Aopen+mingw)
 | 
			
		||||
 | 
			
		||||
<a id="mingw-native"></a>
 | 
			
		||||
## Using Mingw-w64 natively on Windows
 | 
			
		||||
 | 
			
		||||
With [MSYS2](https://www.msys2.org/), it is possible to easily create
 | 
			
		||||
a full environment for building ports with Mingw-w64 on a Windows PC.
 | 
			
		||||
 | 
			
		||||
Note that for building software for native windows environments, you
 | 
			
		||||
must use a mingw subsystem of MSYS2, and install some packages 
 | 
			
		||||
(with a specific prefix) for this subsystem.
 | 
			
		||||
 | 
			
		||||
| architecture | vcpkg triplets                      | subsystem | package prefix    |
 | 
			
		||||
|--------------|-------------------------------------|-----------|-------------------|
 | 
			
		||||
| x64          | x64-mingw-dynamic, x64-mingw-static | mingw64   | mingw-w64-x86_64- |
 | 
			
		||||
| x86          | x86-mingw-dynamic, x86-mingw-static | mingw32   | mingw-w64-i686-   |
 | 
			
		||||
 | 
			
		||||
After the basic installation of MSYS2, you will need to install a few
 | 
			
		||||
additional packages for software development, e.g. for x64:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
pacman -S --needed git base-devel mingw-w64-x86_64-toolchain
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The active subsystem is selected by running the MSYS2 MinGW app, or
 | 
			
		||||
changed in a running terminal by
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
source shell mingw64   # for x64, or "mingw32" for x86
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The bootstrapping of vcpkg shall be done by running bootstrap-vcpkg.bat.
 | 
			
		||||
This will download the official vcpkg.exe.
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
git clone https://github.com/microsoft/vcpkg.git
 | 
			
		||||
cd vcpkg
 | 
			
		||||
./bootstrap-vcpkg.bat
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
For building packages, you need to tell vcpkg that you want to use the
 | 
			
		||||
mingw triplet. This can be done in different ways. When Visual Studio
 | 
			
		||||
is not installed, you must also set the host triplet to mingw. This is
 | 
			
		||||
needed to resolve host dependencies. For convenience, you can use
 | 
			
		||||
environment variables to set both triplets:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
export VCPKG_DEFAULT_TRIPLET=x64-mingw-dynamic
 | 
			
		||||
export VCPKG_DEFAULT_HOST_TRIPLET=x64-mingw-dynamic
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Now you can test your setup:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
./vcpkg install zlib
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### How to avoid mixing different installations
 | 
			
		||||
 | 
			
		||||
[The MSYS2 project explicitly warns](https://www.msys2.org/wiki/MSYS2-introduction/#path)
 | 
			
		||||
that "mixing in programs from other MSYS2 installations, Cygwin installations,
 | 
			
		||||
compiler toolchains or even various other programs is not supported and will
 | 
			
		||||
probably break things in unexpected ways." For example, the proper passing of
 | 
			
		||||
command line arguments with quoting and escaping may fail.
 | 
			
		||||
 | 
			
		||||
But Vcpkg ports implicitly create MSYS2 installations, e.g. for `pkg-config`
 | 
			
		||||
and for various other build tools needed to deal with packages based on
 | 
			
		||||
autoconf. In particular, when ports prepend the directory of tools to the
 | 
			
		||||
`PATH` environment variable, this may change which tool with a particular
 | 
			
		||||
name is actually invoked, and how arguments are passed between tools.
 | 
			
		||||
 | 
			
		||||
To mitigate such issues when working with a full MSYS2 installation,
 | 
			
		||||
try to keep the directories of the msys subsystem (`/usr/bin`, `bin`)
 | 
			
		||||
out of the `PATH` environment variable as found by vcpkg. In bash, you
 | 
			
		||||
may modify the `PATH` just for a single call of vcpkg:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
PATH="${PATH/:\/usr\/bin:\/bin:/:}" ./vcpkg install libpq
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Alternatively, you may run vcpkg from a regular Command Prompt, after
 | 
			
		||||
adding *only* the desired mingw directory (e.g. `C:\msys64\mingw64\bin`)
 | 
			
		||||
to the `PATH`.
 | 
			
		||||
 | 
			
		||||
When using vcpkg for CI with standard images on Azure Pipelines, Github Actions
 | 
			
		||||
or similar, note that the default `PATH` might contain more directories
 | 
			
		||||
which create a mix of MSYS2 programs from different installations. You may
 | 
			
		||||
want to set the desired `PATH` manually, or remove directories which contain
 | 
			
		||||
`sh.exe`, `bash.exe`, `msys-2.0.dll` or `cygwin1.dll`.
 | 
			
		||||
 | 
			
		||||
<a id="mingw-cross"></a>
 | 
			
		||||
## Using Mingw-w64 to build Windows programs on other systems
 | 
			
		||||
 | 
			
		||||
You can use the vcpkg mingw community triplets with toolchains on
 | 
			
		||||
non-Windows computers to cross-compile software to be run on Windows.
 | 
			
		||||
Many Linux distributions offer such toolchains in optional packages
 | 
			
		||||
with a mingw-w64 [suffix](https://repology.org/projects/?search=-mingw-w64)
 | 
			
		||||
or [prefix](https://repology.org/projects/?search=mingw-w64-).
 | 
			
		||||
As an example, for Debian-based distributions, you would start with
 | 
			
		||||
this installation command for the x64 toolchain:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
sudo apt-get install gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Note that the packaged versions of Mingw-w64 toolchains on Linux distributions
 | 
			
		||||
might be older releases which lack some useful features or bug fixes.
 | 
			
		||||
An alternative independent toolchain is offered by [MXE](https://mxe.cc/).
 | 
			
		||||
 | 
			
		||||
For vcpkg bootstrapping, clone the github repository and run the
 | 
			
		||||
`bootstrap-vcpkg.sh` script:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
git clone https://github.com/microsoft/vcpkg.git
 | 
			
		||||
cd vcpkg
 | 
			
		||||
./bootstrap-vcpkg.sh
 | 
			
		||||
./vcpkg install zlib:x64-mingw-dynamic
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user