summaryrefslogtreecommitdiffstats
path: root/DOCS/crosscompile-mingw.txt
blob: 3729a912dd1deb7825fb180f8aed4d11f652570e (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
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:
    ./configure --enable-cross-compile --target=i686-w64-mingw32

Using MXE to setup a MinGW-w64 environment is recommended: http://mxe.cc
Currently, using an experimental branch of MXE is required:
    https://github.com/tonytheodore/mxe.git

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

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

Example with MXE
================

# Download MXE. Note that compiling the required packages requires about 1 GB
# or more! We are using an experimental repository, which supports MinGW-w64.
# The official MXE supports classic MinGW only, which doesn't work with mpv.

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

# Edit the MXE target, so that MingGW-w64 for 32 bit targets is built.

echo "MXE_TARGETS := i686-w64-mingw32" > settings.mk

# Build required packages. The following provide a minimum required to build
# mpv. (Not all of the following packages are strictly required.)

make gcc
make ffmpeg
make libass
make jpeg
make pthreads

# Older MXE and MingGW-w64 snapshots don't provide up-to-date OpenGL headers.

wget http://www.opengl.org/registry/api/glext.h
mv glext.h usr/i686-w64-mingw32/include/GL/

# 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).

git clone https://github.com/mpv-player/mpv.git
cd mpv
export PATH=/opt/mingw/usr/bin/:$PATH
./configure --enable-cross-compile --target=i686-w64-mingw32
make

# This should work. For some reason, the resulting .exe will depend on the DLL
# /opt/mingw/usr/i686-w64-mingw32/bin/libwinpthread-1.dll because pthreads-w32
# folks don't like static linking. How to enable static linking is left as
# exercise to the reader. Passsing --disable-pthreads to mpv's configure will
# get rid of the dependency, but may disable some features (such as the stream
# cache).