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