1 2Dependencies {#dependencies} 3============ 4 5 6Dependencies 7------------ 8 9### libopenmpt 10 11 * Supported compilers for building libopenmpt: 12 * **Microsoft Visual Studio 2017** or higher, running on a amd64 build 13 system (other target systems are supported) 14 * **GCC 8.1** or higher 15 * **Clang 7** or higher 16 * **MinGW-W64 8.1** or higher (it is recommended to preferably use 17 posix threading model as opposed to win32 threading model, or at least 18 have mingw-std-threads available otherwise) 19 * **emscripten 1.39.1** or higher 20 * **DJGPP GCC 8.1** or higher 21 * any other **C++17 compliant** compiler 22 23 libopenmpt makes the following assumptions about the C++ implementation 24 used for building: 25 * `std::numeric_limits<unsigned char>::digits == 8` (enforced by 26 static_assert) 27 * existence of `std::uintptr_t` (enforced by static_assert) 28 * in C++20 mode, `std::endian::little != std::endian::big` (enforced 29 by static_assert) 30 * `wchar_t` encoding is either UTF-16 or UTF-32 (implicitly assumed) 31 * representation of basic source character set is ASCII (implicitly 32 assumed) 33 * representation of basic source character set is identical in char 34 and `wchar_t` (implicitly assumed) 35 36 libopenmpt does not rely on any specific implementation defined or 37 undefined behaviour (if it does, that's a bug in libopenmpt). In 38 particular: 39 * `char` can be `signed` or `unsigned` 40 * shifting signed values is implementation defined 41 * `signed` integer overflow is undefined 42 * `float` and `double` can be non-IEEE754 43 44 libopenmpt can optionally support certain incomplete C++ 45 implementations: 46 * platforms without `wchar_t` support (like DJGPP) 47 * platforms without working `std::random_device` (like Emscripten when 48 running in `AudioWorkletProcessor` context) 49 * platforms without working `std::high_resolution_clock` (like 50 Emscripten when running in `AudioWorkletProcessor` context) 51 52 * Required compilers to use libopenmpt: 53 * Any **C89** / **C99** / **C11** compatible compiler should work with 54 the C API as long as a **C99** compatible **stdint.h** is available. 55 * Any **C++17** compatible compiler should work with the C++ API. 56 * **J2B** support requires an inflate (deflate decompression) implementation: 57 * **zlib** (or **miniz** can be used internally) 58 * **MO3** support requires: 59 * **libmpg123 >= 1.14.0** (or **minimp3 by Lion (github.com/lieff)** can 60 be used internally) 61 * **libogg**, **libvorbis**, and **libvorbisfile** (or **stb_vorbis** can 62 be used internally) 63 * Building on Unix-like systems requires: 64 * **GNU make** 65 * **pkg-config** 66 * The Autotools-based build system requires: 67 * **pkg-config 0.24** or higher 68 * **zlib** 69 * **doxygen** 70 71### openmpt123 72 73 * Live sound output requires one of: 74 * **PulseAudio** 75 * **SDL 2** 76 * **PortAudio v19** 77 * **Win32** 78 * **liballegro 4.2** on DJGPP/DOS 79 80 81Optional dependencies 82--------------------- 83 84### libopenmpt 85 86 * **doxygen 1.8** or higher is required to build the documentation. 87 88### openmpt123 89 90 * Rendering to PCM files can use: 91 * **FLAC 1.2** or higher 92 * **libsndfile** 93 * **Win32** for WAVE 94 * raw PCM has no external dependencies 95 * **help2man** is required to build the documentation. 96 97 98Source packages 99--------------- 100 101Building the source packages additionally requires: 102 * 7z (7-zip) 103 * autoconf 104 * autoconf-archive 105 * automake 106 * awk (mawk) 107 * git 108 * gzip 109 * help2man 110 * libtool 111 * subversion 112 * tar 113 * xpath (libxml-xpath-perl) 114 * zip 115