summaryrefslogtreecommitdiffstats
path: root/DOCS/crosscompile-mingw.md
blob: aac746f11f161d1f2aa41ae611a16054b3261589 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Cross Compiling to Windows
==========================

Cross compiling mpv to Windows is supported with MinGW-w64. This can be used to
produce both 32 bit and 64 bit executables. MinGW-w64 is available from
http://mingw-w64.sourceforge.net.

You have to run mpv's configure with these arguments:

```bash
DEST_OS=win32 TARGET=i686-w64-mingw32 ./waf configure
```

While building a complete MinGW-w64 toolchain yourself is possible, people have
created scripts to help ease the process. These are the two recommended methods:

- Using [mingw-w64-cmake](lachs0r/mingw-w64-cmake) to setup a MinGW-w64
  environment. We recommend you to try this first before MXE. mingw-w64-cmake
  will also build mpv and its dependencies.
- Alternatively, you can use MXE: http://mxe.cc. With MXE, you have to manually
  set the target to MinGW-w64 (even if you compile to 32 bit). A working example
  below.

**Warning**: the original MinGW (http://www.mingw.org) is unsupported.

Note that MinGW environments included in Linux distributions are often broken,
outdated and useless, and usually don't use MinGW-w64.

Example with MXE
----------------

```bash
# Download MXE. Note that compiling the required packages requires about 1 GB
# or more!

cd /opt
git clone https://github.com/mxe/mxe mingw
cd mingw

# Build required packages. The following provide a minimum required to build
# mpv.

# The JOBS environment variable controls threads to use when building. DO NOT
# use the regular `make -j4` option with MXE. Alternatively, you can make this
# a default so you don't need to type `JOBS=4` every time you build:
# echo "JOBS := 4" >> settings.mk

# The MXE_TARGET environment variable builds MinGW-w64 for 32 bit targets.
# You can make this a default:
# echo "MXE_TARGETS := i686-w64-mingw32" >> settings.mk

make gcc ffmpeg libass jpeg pthreads MXE_TARGETS=i686-w64-mingw32 JOBS=4

# Build mpv. The target will be used to automatically select the name of the
# build tools involved (e.g. it will use i686-w64-mingw32-gcc).

cd ..
git clone https://github.com/mpv-player/mpv.git
cd mpv
export PATH=/opt/mingw/usr/bin/:$PATH
DEST_OS=win32 TARGET=i686-w64-mingw32 ./waf configure
./waf build
```