]> git.xonotic.org Git - xonotic/xonotic.wiki.git/blob - Shared-libraries-(buildfiles).md
Added libtheora cross-compiling
[xonotic/xonotic.wiki.git] / Shared-libraries-(buildfiles).md
1 darkplaces/Xonotic on Linux uses system libraries. For Windows and macOS external dlls and dylibs are needed. Those reside in xonotic/misc/buildfiles
2
3 Because at the time of writing there is no automatism to build or update the games dependencies for those 2 platforms and the current dlls/dylibs are VERY outdated and thus also contain vulnerabilities, this page should document on where to obtain or how to build them, retaining API compatibility to darkplaces and also older OS platform versions like Windows XP.
4
5 For Windows, all libraries can/should be obtained from https://packages.msys2.org/ [1] with the exception of an official DLL release from the upstream being available (this is the case for jpeg-turbo and freetype) or if it has to be compiled on under Windows for some reason (eg. libcurl for Schannel (Windows crypto for HTTPS) support).
6
7 A handy tool to check dll deps on Windows is https://github.com/lucasg/Dependencies
8
9 TODO: macOS
10
11 # libcurl
12 libcurl is used for downloading *.pk3 files from servers
13
14 ### Windows
15
16 ```
17 git clone -b curl-7_80_0 https://github.com/curl/curl || true
18 curl -o x86_64-w64-mingw32.cmake https://raw.githubusercontent.com/zyga/cmake-toolchains/master/Toolchain-Ubuntu-mingw64.cmake
19 d0=$(pwd)
20 rm -rf build
21 mkdir build
22 cd build
23 cmake -DCMAKE_TOOLCHAIN_FILE="$d0/x86_64-w64-mingw32.cmake" -DCMAKE_INSTALL_PREFIX="$d0/out" -DCURL_USE_SCHANNEL=YES -G"Unix Makefiles" "$d0/curl"
24 make
25 make install
26 cd "$d0"
27 cp out/bin/libcurl.dll ~/Games/xonotic/misc/buildfiles/win64/libcurl-4.dll
28 ```
29
30 ### macOS
31 Darkplaces loads `libcurl.4.dylib` or `libcurl.3.dylib` or `libcurl.2.dylib`
32
33 # libjpeg-turbo
34 libjpeg-turbo is needed to display jpeg images/textures
35
36 ### Windows
37
38 ```
39 git clone https://github.com/libjpeg-turbo/libjpeg-turbo.git || true
40 curl -o x86_64-w64-mingw32.cmake https://raw.githubusercontent.com/zyga/cmake-toolchains/master/Toolchain-Ubuntu-mingw64.cmake
41 d0=$(pwd)
42 rm -rf build
43 mkdir build
44 cd build
45 cmake -DCMAKE_TOOLCHAIN_FILE="$d0/x86_64-w64-mingw32.cmake" -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DCMAKE_INSTALL_PREFIX="$d0/out" -G"Unix Makefiles" "$d0/libjpeg-turbo"
46 make
47 make install
48 cd "$d0"
49 cp out/bin/libjpeg-62.dll ~/Games/xonotic/misc/buildfiles/win64/libjpeg.dll
50 ```
51
52 ### macOS
53 Darkplaces loads `libjpeg.62.dylib`
54
55 # zlib
56 zlib is required to read *.pk3 files. Also it is a dependency of libpng and probably some other libraries.
57
58 ### Windows
59 Darkplaces loads: ifdef ZLIB_USES_WINAPI `zlibwapi.dll` or `zlib.dll` else `zlib1.dll`. We use `zlib1.dll`!
60
61 Obtainment instructions:
62 * download as MSYS2 Package [1] in x86 and x64 versions: https://packages.msys2.org/base/mingw-w64-zlib
63 * use dll from `bin` folder
64
65 Cross-compiling:
66
67 ```
68 ZLIBVER="1.2.11"
69 curl -L -o zlib-$ZLIBVER.tar.xz https://zlib.net/zlib-$ZLIBVER.tar.xz || true
70 tar -xf zlib-$ZLIBVER.tar.xz
71 rm zlib-$ZLIBVER.tar.xz
72 curl -o x86_64-w64-mingw32.cmake https://raw.githubusercontent.com/zyga/cmake-toolchains/master/Toolchain-Ubuntu-mingw64.cmake
73
74 d0=$(pwd)
75 rm -rf build
76 mkdir build
77 cd build
78 sed -i '/zlib PROPERTIES SUFFIX/i     set_target_properties(zlib PROPERTIES PREFIX "")' "$d0/zlib-$ZLIBVER/CMakeLists.txt" # Remove the "lib" prefix. TODO Do this through the cmake cache?
79 cmake -DCMAKE_TOOLCHAIN_FILE="$d0/x86_64-w64-mingw32.cmake" -DBUILD_SHARED_LIBS=true -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DCMAKE_INSTALL_PREFIX="$d0/out" -G"Unix Makefiles" "$d0/zlib-$ZLIBVER"
80 make
81 make install
82 cd "$d0"
83 cp out/bin/zlib1.dll ~/Games/xonotic/misc/buildfiles/win64/zlib1.dll
84 ```
85
86 ### macOS
87 Darkplaces loads `libz.dylib`
88
89 # libpng
90 libpng is needed to display png images/textures
91
92 ### Windows
93 Darkplaces loads `libpng16.dll` or `libpng16-16.dll` or `libpng15-15.dll` or `libpng15.dll` or `libpng14-14.dll` or `libpng14.dll` or `libpng12.dll`
94
95 Obtainment instructions:
96 * be sure to use a 1.16.X release
97 * download MSYS2 Package [1] in x86 and x64 versions: https://packages.msys2.org/base/mingw-w64-libpng
98 * use dll from `bin` folder
99
100 Cross-compiling (requires zlib):
101
102 ```
103 d0=$(pwd)
104 PNGVER="libpng16"
105 ZLIB_ROOT=$d0/../zlib/out # Location to the zlib compiled library
106
107 git clone -b $PNGVER git://git.code.sf.net/p/libpng/code libpng || true
108 curl -o x86_64-w64-mingw32.cmake https://raw.githubusercontent.com/zyga/cmake-toolchains/master/Toolchain-Ubuntu-mingw64.cmake
109
110 rm -rf build
111 mkdir build
112 cd build
113 cmake -DCMAKE_TOOLCHAIN_FILE="$d0/x86_64-w64-mingw32.cmake" -DPNG_STATIC=false -DPNG_TESTS=false -DPNG_EXECUTABLES=false -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DZLIB_INCLUDE_DIR=$ZLIB_ROOT/include -DZLIB_LIBRARY=$ZLIB_ROOT/lib/libzlib.dll.a -DCMAKE_INSTALL_PREFIX="$d0/out" -G"Unix Makefiles" "$d0/libpng"
114 make
115 make install
116 cd "$d0"
117 cp out/bin/libpng16.dll ~/Games/xonotic/misc/buildfiles/win64/libpng16.dll
118 ```
119
120 ### macOS
121 Darkplaces loads `libpng16.16.dylib` or `libpng15.15.dylib` or `libpng14.14.dylib` or `libpng12.0.dylib`
122
123 # libfreetype
124 Required for the Xolonium font
125
126 ### Windows
127 Darkplaces loads: `libfreetype-6.dll` or `freetype6.dll`
128
129 ```
130 FTVER="2.11.1"
131 curl -L -o freetype-$FTVER.tar.xz https://download.savannah.gnu.org/releases/freetype/freetype-$FTVER.tar.xz || true
132 tar -xf freetype-$FTVER.tar.xz
133 rm freetype-$FTVER.tar.xz
134
135 curl -o x86_64-w64-mingw32.cmake https://raw.githubusercontent.com/zyga/cmake-toolchains/master/Toolchain-Ubuntu-mingw64.cmake
136 d0=$(pwd)
137 rm -rf build
138 mkdir build
139 cd build
140 cmake -DCMAKE_TOOLCHAIN_FILE="$d0/x86_64-w64-mingw32.cmake" -DBUILD_SHARED_LIBS=true -DCMAKE_BUILD_TYPE=Release -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DCMAKE_INSTALL_PREFIX="$d0/out" -G"Unix Makefiles" "$d0/freetype-$FTVER"
141 make
142 make install
143 cd "$d0"
144 cp out/bin/libfreetype.dll ~/Games/xonotic/misc/buildfiles/win64/libfreetype-6.dll
145 ```
146
147 ### macOS
148 Darkplaces loads: `libfreetype.6.dylib` or `libfreetype.dylib`
149
150 # libogg
151 libogg is used for the container in cl_capturevideo
152
153 ### Windows
154 Darkplaces loads `libogg-0.dll` or `libogg.dll` or `ogg.dll`
155
156 Obtainment instructions:
157 * download MSYS2 Package [1] in x86 and x64 versions: https://packages.msys2.org/base/mingw-w64-libogg
158 * use dll from `bin` folder
159
160 Cross-compiling:
161
162 ```
163 OGGVER="v1.3.5"
164 git clone -b $OGGVER https://gitlab.xiph.org/xiph/ogg.git
165 curl -o x86_64-w64-mingw32.cmake https://raw.githubusercontent.com/zyga/cmake-toolchains/master/Toolchain-Ubuntu-mingw64.cmake
166 d0=$(pwd)
167 rm -rf build
168 mkdir build
169 cd build
170 cmake -DCMAKE_TOOLCHAIN_FILE="$d0/x86_64-w64-mingw32.cmake" -DBUILD_SHARED_LIBS=true -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DCMAKE_INSTALL_PREFIX="$d0/out" -G"Unix Makefiles" "$d0/ogg"
171 make
172 make install
173 cd "$d0"
174 cp out/bin/libogg.dll ~/Games/xonotic/misc/buildfiles/win64/ogg.dll
175 ```
176
177 ### macOS
178 Darkplaces loads `libogg.dylib`
179
180 # libvorbis + libvorbisfile + libvorbisenc
181 libvorbis + libvorbisfile are used to play .ogg audio files while libvorbis + libvorbisenc is used for the audio in video capturing (cl_capturevideo)
182
183 ### Windows
184 Darkplaces loads `libvorbis-0.dll` or `libvorbis.dll` or `vorbis.dll` and `libvorbisfile-3.dll` or `libvorbisfile.dll` or `vorbisfile.dll` and `libvorbisenc-2.dll` or `vorbisenc-2.dll` or `vorbisenc.dll`
185
186 Obtainment instructions:
187 * download MSYS2 Package [1] in x86 and x64 versions: https://packages.msys2.org/base/mingw-w64-libvorbis
188 * use dll from `bin` folder
189
190 Cross-compiling (requires libogg):
191
192 ```
193 d0=$(pwd)
194 VORBISVER="v1.3.7"
195 OGG_ROOT=$d0/../ogg/out
196
197 git clone -b $VORBISVER https://gitlab.xiph.org/xiph/vorbis.git
198
199 # Fix win32 def files
200 sed -i 's/^LIBRARY$/LIBRARY vorbis/' "$d0/vorbis/win32/vorbis.def"
201 sed -i 's/^LIBRARY$/LIBRARY vorbisenc/' "$d0/vorbis/win32/vorbisenc.def"
202 sed -i 's/^LIBRARY$/LIBRARY vorbisfile/' "$d0/vorbis/win32/vorbisfile.def"
203
204 curl -o x86_64-w64-mingw32.cmake https://raw.githubusercontent.com/zyga/cmake-toolchains/master/Toolchain-Ubuntu-mingw64.cmake
205 rm -rf build
206 mkdir build
207 cd build
208 cmake -DCMAKE_TOOLCHAIN_FILE="$d0/x86_64-w64-mingw32.cmake" -DBUILD_SHARED_LIBS=true -DOGG_INCLUDE_DIR=$OGG_ROOT/include -DOGG_LIBRARY=$OGG_ROOT/lib/libogg.dll.a -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DCMAKE_INSTALL_PREFIX="$d0/out" -G"Unix Makefiles" "$d0/vorbis"
209 make
210 make install
211 cd "$d0"
212 cp out/bin/libvorbis.dll ~/Games/xonotic/misc/buildfiles/win64/vorbis.dll
213 cp out/bin/libvorbisfile.dll ~/Games/xonotic/misc/buildfiles/win64/vorbisfile.dll
214 cp out/bin/libvorbisenc.dll ~/Games/xonotic/misc/buildfiles/win64/vorbisenc.dll
215 ```
216
217 ### macOS
218 Darkplaces loads `libvorbis.dylib` and `libvorbisfile.dylib`
219
220 # libtheora
221 libtheora is used for the video in cl_capturevideo
222 libtheoraenc/libtheoradec are not needed, they are the newer API; darkplaces uses the legacy pre 1.0 API (libtheora).
223
224 ### Windows
225 Darkplaces loads `libtheora-0.dll` or `theora-0.dll` or `theora.dll`
226
227 Obtainment instructions:
228 * download MSYS2 Package [1] in x86 and x64 versions: https://packages.msys2.org/base/mingw-w64-libtheora
229 * use dll from `bin` folder
230
231 Cross-compiling (requires libogg and libvorbis):
232
233 ```
234 d0=$(pwd)
235 THEORAVER="v1.1.1"
236 OGG_ROOT="$d0/../ogg/out"
237 VORBIS_ROOT="$d0/../vorbis/out"
238
239 git clone -b $THEORAVER https://gitlab.xiph.org/xiph/theora.git
240
241 # Fix mingw32 defs
242 sed -i '1iLIBRARY libtheoradec' "$d0/theora/win32/xmingw32/libtheoradec-all.def"
243 sed -i '1iLIBRARY libtheoraenc' "$d0/theora/win32/xmingw32/libtheoraenc-all.def"
244 sed -i '/TH_VP31_QUANT_INFO/d' "$d0/theora/win32/xmingw32/libtheoraenc-all.def"
245 sed -i '/TH_VP31_HUFF_CODES/d' "$d0/theora/win32/xmingw32/libtheoraenc-all.def"
246
247 # Start build
248 mkdir out
249 mkdir build
250 cd build
251 $d0/theora/autogen.sh --host=x86_64-w64-mingw32 --prefix="$d0/out" --with-ogg="$OGG_ROOT" --with-vorbis="$VORBIS_ROOT" --enable-shared --disable-examples --disable-sdltest --disable-vorbistest --disable-oggtest
252 make
253 make install
254 cd "$d0"
255 cp out/bin/libtheora-0.dll ~/Games/xonotic/misc/buildfiles/win64/libtheora-0.dll
256 ```
257
258 ### macOS
259 Darkplaces loads `libtheora.dylib`
260
261 # libd0_blind_id-0 & libd0_rijndael-0
262 Internal project, see https://gitlab.com/xonotic/d0_blind_id
263
264 ### Linux
265
266 `LDFLAGS='-L$HOME/Games/xonotic/misc/builddeps/linux64/gmp/lib' CPPFLAGS='-I$HOME/Games/xonotic/misc/builddeps/linux64/gmp/include' ./configure --prefix=$HOME/Games/xonotic/misc/builddeps/linux64/d0_blind_id  --enable-static --disable-shared --with-pic`
267
268 # libgmp
269 A dependency of libd0_blind_id-0
270
271 ### Linux
272
273 `./configure --prefix=$HOME/Games/xonotic/misc/builddeps/linux64/gmp --enable-static --disable-shared --with-pic --enable-fat`
274
275 ### Windows
276 libd0_blind_id-0 loads `libgmp-10.dll`
277
278 Obtainment instructions:
279 * download as MSYS2 Package [1] in x86 and x64 versions: https://packages.msys2.org/base/mingw-w64-gmp
280 * use dll from `bin` folder
281
282 # libode
283 Is not loaded under Windows and crashes the game if it is and a map is loaded up.
284 Also it is not statically linked and thus requires libstdc++-6.dll and libgcc_s_sjlj-1.dll.
285
286 ### Linux:
287
288 `./configure --enable-static --disable-shared --with-libccd=internal --enable-double-precision --prefix=$HOME/Games/xonotic/misc/builddeps/linux64/ode --with-pic`
289
290 # libavw
291 *Note:* Old and not used in Xonotic but also not disabled :) Adding this for the sake of completeness.
292
293 ### Windows
294 Darkplaces loads: `libavw.dll`
295
296 Source code: https://github.com/paulvortex/DpLibAVW
297
298 ### macOS
299 Darkplaces loads: `libavw.dylib`