Giter VIP home page Giter VIP logo

mpv-winbuild-cmake's Introduction

CMake-based MinGW-w64 Cross Toolchain

This thing’s primary use is to build Windows binaries of mpv.

Alternatively, you can download the builds from here.

Prerequisites

  • You should also install Ninja and use CMake’s Ninja build file generator. It’s not only much faster than GNU Make, but also far less error-prone, which is important for this project because CMake’s ExternalProject module tends to generate makefiles which confuse GNU Make’s jobserver thingy.

  • As a build environment, any modern Linux distribution should work.

  • Compiling on Cygwin / MSYS2 is supported, but it tends to be slower than compiling on Linux.

Information about packages

  • Git/Hg

    • ANGLE
    • FFmpeg
    • xz
    • x264
    • x265 (multilib)
    • uchardet
    • rubberband
    • opus
    • openal-soft
    • mpv
    • luajit
    • libvpx
    • libwebp
    • libpng
    • libsoxr
    • libzimg (with graphengine)
    • libdvdread
    • libdvdnav
    • libdvdcss
    • libudfread
    • libbluray
    • libunibreak
    • libass
    • libmysofa
    • lcms2
    • lame
    • harfbuzz
    • game-music-emu
    • freetype2
    • flac
    • opus-tools
    • mujs
    • libarchive
    • libjpeg
    • shaderc (with spirv-headers, spirv-tools, glslang)
    • vulkan-header
    • vulkan
    • spirv-cross
    • fribidi
    • nettle
    • curl
    • libxml2
    • amf-headers
    • avisynth-headers
    • nvcodec-headers
    • libmfx
    • megasdk (with termcap, readline, cryptopp, sqlite, libuv, libsodium)
    • aom
    • dav1d
    • libplacebo (with glad)
    • fontconfig
    • libbs2b
    • libssh
    • libsrt
    • libjxl (with brotli, highway)
    • libmodplug
    • uavs3d
    • davs2
    • libsixel
  • Zip

    • expat (2.5.0)
    • bzip (1.0.8)
    • zlib (1.2.13)
    • xvidcore (1.3.7)
    • vorbis (1.3.7)
    • speex (1.2.1)
    • ogg (1.3.5)
    • lzo (2.10)
    • libopenmpt (0.6.6)
    • libiconv (1.17)
    • gmp (6.2.1)
    • vapoursynth (R60)
    • libsdl2 (2.24.1)
    • mbedtls (3.2.1)
    • libressl (3.1.5)

Setup Build Environment

Manjaro / Arch Linux

These packages need to be installed first before compiling mpv:

pacman -S git gyp mercurial subversion ninja cmake meson ragel yasm nasm asciidoc enca gperf unzip p7zip gcc-multilib clang python-pip curl lib32-glib2

pip3 install rst2pdf mako

Ubuntu Linux / WSL (Windows 10)

apt-get install build-essential checkinstall bison flex gettext git mercurial subversion ninja-build gyp cmake yasm nasm automake pkgconf libtool libtool-bin gcc-multilib g++-multilib clang libgmp-dev libmpfr-dev libmpc-dev libgcrypt-dev gperf ragel texinfo autopoint re2c asciidoc python3-pip docbook2x unzip p7zip-full curl

pip3 install rst2pdf meson mako

Note:

  • Use apt-fast if apt-get is too slow.
  • It is advised to use bash over dash. Set sudo ln -sf /bin/bash /bin/sh. Revert back by sudo ln -sf /bin/dash /bin/sh.
  • On WSL platform, compiling 32bit requires qemu. Refer to this.
  • To update package installed by pip, run pip3 install <package> --upgrade.

Cygwin

Download Cygwin installer and run:

setup-x86_64.exe -R "C:\cygwin64" -q --packages="bash,binutils,bzip2,cygwin,gcc-core,gcc-g++,cygwin32-gcc-core,cygwin32-gcc-g++,gzip,m4,pkgconf,make,unzip,zip,diffutils,wget,git,patch,cmake,gperf,yasm,nasm,enca,asciidoc,bison,flex,gettext-devel,mercurial,python-devel,python-docutils,docbook2X,texinfo,libmpfr-devel,libgmp-devel,libmpc-devel,libtool,autoconf2.5,automake,automake1.9,libxml2-devel,libxslt-devel"

Additionally, some packages, re2c, ninja, ragel, gyp, rst2pdf need to be installed manually.

MSYS2

Install MSYS2 and run it via MSYS2 MSYS shortcut. Don't use MSYS2 MinGW 32-bit or MSYS2 MinGW 64-bit shortcuts, that's important!

These packages need to be installed first before compiling mpv:

pacman -S base-devel cmake gcc yasm nasm git mercurial subversion gyp tar gmp-devel mpc-devel mpfr-devel python zlib-devel unzip zip p7zip

Don't install anything from the mingw32 and mingw64 repositories, it's better to completely disable them in /etc/pacman.conf just to be safe.

Additionally, some packages, re2c, ninja, ragel, libjpeg, rst2pdf need to be installed manually.

Building Software (First Time)

To set up the build environment, create a directory to store build files in:

mkdir build64
cd build64

Once you’ve changed into that directory, run CMake, e.g.

cmake -DTARGET_ARCH=x86_64-w64-mingw32 -G Ninja ..

add -DGCC_ARCH=x86-64-v3 to command-line if you want to compile gcc with new x86-64-v3 instructions. Other value like native, znver3 should work too in theory.

or for 32bit:

cmake -DTARGET_ARCH=i686-w64-mingw32 -G Ninja ..

First, you need to build toolchain. By default, it will be installed in install folder. This take ~20 minutes on my 4-core machine.

ninja gcc

After it done, you're ready to build mpv and all its dependencies:

ninja mpv

This will take a while (about ~10 minutes on my machine).

On WSL2, you might see it stuck with 100% disk usage and never finished. To fix it, build package shaderc, spirv-cross and harfbuzz separately first before mpv.

The final build64 folder's size will be around ~3GB.

Building Software (Second Time)

To build mpv for a second time:

ninja update

After that, build mpv as usual:

ninja mpv

This will also build all packages that mpv depends on.

Available Commands

Commands Description
ninja package compile a package
ninja clean remove all stamp files in all packages.
ninja download Download all packages' sources at once without compiling.
ninja update Update all git repos. When a package pulls new changes, all of its stamp files will be deleted and will be forced rebuild. If there is no change, it will not remove the stamp files and no rebuild occur. Use this instead of ninja clean if you don't want to rebuild everything in the next run.
ninja package-fullclean Remove all stamp files of a package.
ninja package-liteclean Remove build, clean stamp files only. This will skip re-configure in the next running ninja package (after the first compile). Updating repo or patching need to do manually. Ideally, all DEPENDS targets in package.cmake should be temporarily commented or deleted. Might be useful in some cases.
ninja package-removebuild Remove 'build' directory of a package.
ninja package-removeprefix Remove 'prefix' directory.
ninja package-force-update Update a package. Only git repo will be updated.

package is package's name found in packages folder.

Acknowledgements

This project was originally created and maintained lachs0r. Since then, it heavily modified to suit my own need.

mpv-winbuild-cmake's People

Contributors

adlerzei avatar charlesmengca avatar chhe avatar deadsix27 avatar garoto avatar hill-98 avatar hiltjo avatar hooke007 avatar kasper93 avatar mathstuf avatar myfreeer avatar myrup avatar nkh0472 avatar nottsunami avatar nshtg avatar pavelxdd avatar rossy avatar shinchiro avatar theamm avatar wiiaboo avatar zhongfly avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.