summaryrefslogtreecommitdiffstats
path: root/DOCS/compile-windows.md
diff options
context:
space:
mode:
authorJames Ross-Gowan <rossymiles@gmail.com>2015-01-08 19:29:55 +1100
committerJames Ross-Gowan <rossymiles@gmail.com>2015-01-08 19:29:55 +1100
commit54d14b4480567c21f713c855d1377a2fb6a72207 (patch)
treecdd3f5c9e9871b9fc478b767b5dca3a8f9cb7a70 /DOCS/compile-windows.md
parentf551fbaa25ac9930c6e5a3df372a4bd7acdd2811 (diff)
downloadmpv-54d14b4480567c21f713c855d1377a2fb6a72207.tar.bz2
mpv-54d14b4480567c21f713c855d1377a2fb6a72207.tar.xz
DOCS: add instructions for building with MSYS2
mpv can be built natively on a Windows machine using MSYS2. Add detailed instructions on how to build and merge them with the existing instructions for cross-compilation.
Diffstat (limited to 'DOCS/compile-windows.md')
-rw-r--r--DOCS/compile-windows.md209
1 files changed, 209 insertions, 0 deletions
diff --git a/DOCS/compile-windows.md b/DOCS/compile-windows.md
new file mode 100644
index 0000000000..ac33ed6bd1
--- /dev/null
+++ b/DOCS/compile-windows.md
@@ -0,0 +1,209 @@
+Compiling for Windows
+=====================
+
+Compiling for Windows is supported with MinGW-w64. This can be used to produce
+both 32-bit and 64-bit executables, and it works for building on Windows and
+cross-compiling from Linux and Cygwin. MinGW-w64 is available from:
+http://mingw-w64.sourceforge.net.
+
+While building a complete MinGW-w64 toolchain yourself is possible, there are a
+few build environments and scripts to help ease the process, such as MSYS2 and
+MXE. Note that MinGW environments included in Linux distributions are often
+broken, outdated and useless, and usually don't use MinGW-w64.
+
+**Warning**: the original MinGW (http://www.mingw.org) is unsupported.
+
+Cross-compilation
+=================
+
+When cross-compiling, you have to run mpv's configure with these arguments:
+
+```bash
+DEST_OS=win32 TARGET=i686-w64-mingw32 ./waf configure
+```
+
+[MXE](http://mxe.cc) makes it very easy to bootstrap a complete MingGW-w64
+environment from a Linux machine. See a working example below.
+
+Alternatively, you can try [mingw-w64-cmake](https://github.com/lachs0r/mingw-w64-cmake),
+which bootstraps a MinGW-w64 environment and builds mpv and dependencies.
+
+Example with MXE
+----------------
+
+```bash
+# Before starting, make sure you install MXE prerequisites. MXE will download
+# and build all target dependencies, but no host dependencies. For example,
+# you need a working compiler, or MXE can't build the crosscompiler.
+#
+# Refer to
+#
+# http://mxe.cc/#requirements
+#
+# Scroll down for disto/OS-specific instructions to install them.
+
+# Download MXE. Note that compiling the required packages requires about 1.4 GB
+# or more!
+
+cd /opt
+git clone https://github.com/mxe/mxe mxe
+cd mxe
+
+# Set build options.
+
+# The JOBS environment variable controls threads to use when building. DO NOT
+# use the regular `make -j4` option with MXE as it will slow down the build.
+# Alternatively, you can set this in the make command by appending "JOBS=4"
+# to the end of command:
+echo "JOBS := 4" >> settings.mk
+
+# The MXE_TARGET environment variable builds MinGW-w64 for 32 bit targets.
+# Alternatively, you can specify this in the make command by appending
+# "MXE_TARGETS=i686-w64-mingw32" to the end of command:
+echo "MXE_TARGETS := i686-w64-mingw32.static" >> settings.mk
+
+# If you want to build 64 bit version, use this:
+# echo "MXE_TARGETS := x86_64-w64-mingw32.static" >> settings.mk
+
+# Build required packages. The following provide a minimum required to build
+# mpv.
+
+make gcc ffmpeg libass jpeg pthreads
+
+# Add MXE binaries to $PATH
+export PATH=/opt/mxe/usr/bin/:$PATH
+
+# 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.static-gcc).
+
+cd ..
+git clone https://github.com/mpv-player/mpv.git
+cd mpv
+DEST_OS=win32 TARGET=i686-w64-mingw32.static ./waf configure
+# Or, if 64 bit version,
+# DEST_OS=win32 TARGET=x86_64-w64-mingw32.static ./waf configure
+./waf build
+```
+
+Native compilation with MSYS2
+=============================
+
+For Windows developers looking to get started quickly, MSYS2 can be used to
+compile mpv natively on a Windows machine. The MSYS2 repositories have binary
+packages for most of mpv's dependencies, so the process should only involve
+building mpv itself.
+
+To build 64-bit mpv on Windows:
+
+Installing MSYS2
+----------------
+
+1. Download an installer from https://msys2.github.io/
+
+ It doesn't matter whether the i686 or the x86_64 version is used. Both can
+ build 32-bit and 64-bit binaries when running on a 64-bit version of Windows.
+
+2. Add ``C:\msys64\mingw64\bin`` to your ``%PATH%``. mpv will depend on several
+ DLLs in this folder.
+
+3. Start a MinGW-w64 shell (``mingw64_shell.bat``). For a 32-bit build, use
+ ``mingw32_shell.bat``.
+
+Updating MSYS2
+--------------
+
+To prevent errors during post-install, ``msys2-runtime`` and ``pacman`` must be
+updated first.
+
+```bash
+# Check for updates to msys2-runtime and pacman. If there were updates, restart
+# MSYS2 before continuing.
+pacman -Sy --needed msys2-runtime pacman
+
+# Update everything else
+pacman -Su
+```
+
+Installing mpv dependencies
+---------------------------
+
+```bash
+# Install MSYS2 build dependencies and a MinGW-w64 compiler
+pacman -S git pkg-config python3 mingw-w64-x86_64-gcc
+
+# Install the most important MinGW-w64 dependencies. libass, libbluray and
+# lcms2 are also pulled in as dependencies of ffmpeg.
+pacman -S mingw-w64-x86_64-ffmpeg mingw-w64-x86_64-libjpeg-turbo mingw-w64-x86_64-lua
+
+# Install additional (optional) dependencies
+pacman -S mingw-w64-x86_64-libdvdnav mingw-w64-x86_64-mpg123 mingw-w64-x86_64-libguess
+```
+
+For a 32-bit build, install ``mingw-w64-i686-*`` packages instead.
+
+Building mpv
+------------
+
+Clone the latest mpv from git and install waf:
+
+```bash
+git clone https://github.com/mpv-player/mpv.git && cd mpv
+./bootstrap.py
+```
+
+Finally, compile and install mpv. Binaries will be installed to
+``/mingw64/bin``.
+
+```bash
+# For a 32-bit build, use --prefix=/mingw32 instead
+./waf configure CC=gcc --prefix=/mingw64
+./waf install
+```
+
+Or, compile and install both libmpv and mpv:
+
+```bash
+./waf configure CC=gcc --enable-libmpv-shared --prefix=/mingw64
+./waf install
+
+# waf installs libmpv to the wrong directory, so fix it up
+mv /mingw64/bin/pkgconfig /mingw64/lib/pkgconfig
+mv /mingw64/bin/libmpv.dll.a /mingw64/lib/libmpv.dll.a
+```
+
+Additional dependencies
+=======================
+
+pthreads
+--------
+
+mpv will use a pthreads wrapper by default. Either pthreads-win32 or
+winpthreads should work. The latter is packaged with most MinGW-w64
+environments, including MSYS2, so it shouldn't be a problem. If you don't have
+a pthreads wrapper or you want to build mpv without one, configure with:
+
+```bash
+./waf configure --enable-win32-internal-pthreads
+```
+
+libwaio
+-------
+
+If you want to use ``--input-file``, you need libwaio. It's available from
+git://midipix.org/waio
+
+To compile libwaio in MSYS2, run:
+
+```bash
+git clone git://midipix.org/waio && cd waio
+
+# 32-bit build, run from mingw32_shell.bat
+./build-mingw-nt32 lib-static CC=gcc AR=ar
+cp -r include/waio /mingw32/include
+cp lib32/libwaio.a /mingw32/lib
+
+# 64-bit build, run from mingw64_shell.bat
+./build-mingw-nt64 lib-static CC=gcc AR=ar
+cp -r include/waio /mingw64/include
+cp lib64/libwaio.a /mingw64/lib
+```