From 54d14b4480567c21f713c855d1377a2fb6a72207 Mon Sep 17 00:00:00 2001 From: James Ross-Gowan Date: Thu, 8 Jan 2015 19:29:55 +1100 Subject: 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. --- DOCS/compile-windows.md | 209 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 DOCS/compile-windows.md (limited to 'DOCS/compile-windows.md') 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 +``` -- cgit v1.2.3