mirror of
https://github.com/vgmstream/vgmstream.git
synced 2024-11-24 06:50:20 +01:00
build: example linux sh with extra libs (beta)
This commit is contained in:
parent
e70cc00fac
commit
fefc40dcf7
36
doc/BUILD.md
36
doc/BUILD.md
@ -70,7 +70,21 @@ It's also possible to call MSBuild and pass those values from the CMD, see fooba
|
||||
|
||||
Once finished resulting binaries are in the *./Release* folder. Remember you need to copy extra `.dll` to run them (see [README.md](../README.md)).
|
||||
|
||||
**For GCC/CLang**: there are basic Makefiles that work like usual with *make* (like `make vgmstream_cli EXTRA_CFLAGS="-DVGM_DEBUG_OUTPUT`). On Windows this compiles with extra libs enabled, but not on Linux (try CMake or autotools for those). Artifacts are usually in their subdir (*./cli*, *./winamp*, etc).
|
||||
**For GCC/CLang**: there are basic Makefiles that work like usual with *make* (like `make vgmstream_cli EXTRA_CFLAGS="-DVGM_DEBUG_OUTPUT`). Artifacts are usually in their subdir (*./cli*, *./winamp*, etc).
|
||||
|
||||
On Windows this compiles with extra libs enabled by default. On Linux there is no fancy autodetection (try CMake or autotools for that), so you need to make sure libs are in your system and pass flags to enable them manually (install/compile libs then `make vgmstream_cli VGM_VORBIS=1 ...`). Check or run `make-build.sh` for a basic example that builds CLI and vgmstream123 with most libs enabled for a Ubuntu-style distro (if you get errors on your system just tweak or comment out offending parts).
|
||||
|
||||
Linux example:
|
||||
```
|
||||
sudo apt-get install -y git
|
||||
|
||||
git clone https://github.com/vgmstream/vgmstream
|
||||
cd vgmstream
|
||||
chmod +x version-get.sh version-make.sh make-build.sh
|
||||
|
||||
# warning: installs stuff, check all "apt install"
|
||||
./make-build.sh
|
||||
```
|
||||
|
||||
### CMake (builds)
|
||||
Tool used to generate common build files (for *make*, *VS/MSBuild*, etc), that in turn can be used to compile vgmstream's modules instead of existing scripts/files. Needs v3.6 or later:
|
||||
@ -138,7 +152,7 @@ If you use Mac (or Linux), there is a *Homebrew* script that may automate the pr
|
||||
You may try CMake instead as it may be simpler and handle libs better. Some older distros may not work though (CMake version needs to recognize FILTER command). You may also need to install resulting artifacts manually. Check the *CMAKE.md* doc for some extra info too.
|
||||
```
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y gcc g++ make build-essential
|
||||
sudo apt-get install -y gcc g++ make build-essential git
|
||||
sudo apt-get install -y libmpg123-dev libvorbis-dev libspeex-dev
|
||||
sudo apt-get install -y libavformat-dev libavcodec-dev libavutil-dev libswresample-dev
|
||||
sudo apt-get install -y libao-dev audacious-dev
|
||||
@ -161,7 +175,6 @@ set PATH=C:\Program Files (x86)\mingw-w64\i686-5.4.0-win32-sjlj-rt_v5-rev0\mingw
|
||||
cd vgmstream
|
||||
|
||||
mingw32-make.exe vgmstream_cli -f Makefile ^
|
||||
VGM_ENABLE_MAIATRAC3PLUS=0 ^
|
||||
EXTRA_CFLAGS="-DVGM_DEBUG_OUTPUT -g -Wimplicit-function-declaration" ^
|
||||
SHELL=sh.exe CC=gcc.exe AR=ar.exe STRIP=strip.exe DLLTOOL=dlltool.exe WINDRES=windres.exe ^
|
||||
STRIP=echo ^
|
||||
@ -246,7 +259,7 @@ Take note of other plugins stealing extensions (see README). To change Audacious
|
||||
You can try building with CMake. Some older distros may not work though (CMake version needs to recognize FILTER command), and may need to install resulting artifacts manually (check ./audacious dir).
|
||||
```
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y gcc g++ make build-essential
|
||||
sudo apt-get install -y gcc g++ make build-essential git
|
||||
sudo apt-get install -y libmpg123-dev libvorbis-dev libspeex-dev
|
||||
sudo apt-get install -y libavformat-dev libavcodec-dev libavutil-dev libswresample-dev
|
||||
sudo apt-get install -y libao-dev audacious-dev
|
||||
@ -266,9 +279,8 @@ Instead of CMake you can use autotools. Terminal example, assuming a Ubuntu-base
|
||||
|
||||
# default requirements
|
||||
sudo apt-get update
|
||||
sudo apt-get install gcc g++ make
|
||||
sudo apt-get install gcc g++ make git
|
||||
sudo apt-get install autoconf automake libtool
|
||||
sudo apt-get install git
|
||||
# vgmstream dependencies
|
||||
sudo apt-get install libmpg123-dev libvorbis-dev libspeex-dev
|
||||
#sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev libswresample-dev
|
||||
@ -367,6 +379,7 @@ MSVC needs a .lib helper to link .dll files, but libs below usually only create
|
||||
Adds support for Vorbis, inside Ogg as `.ogg` (plain or encrypted) or custom variations like `.wem`, `.fsb`, `.ogl`, etc.
|
||||
- Source: http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.6.zip
|
||||
- DLL: `libvorbis.dll`
|
||||
- lib: `-lvorbis -lvorbisfile`
|
||||
- licensed under the 3-clause BSD license.
|
||||
|
||||
Should be buildable with MSVC (in /win32 dir are .sln files) or autotools (use `autogen.sh`).
|
||||
@ -377,6 +390,7 @@ Adds support for MPEG (MP1/MP2/MP3), used in formats that may have custom MPEG l
|
||||
- Source: https://sourceforge.net/projects/mpg123/files/mpg123/1.25.10/
|
||||
- Builds: http://www.mpg123.de/download/win32/1.25.10/
|
||||
- DLL: `libmpg123-0.dll`
|
||||
- lib: `-lmpg123`
|
||||
- licensed under the LGPL v2.1
|
||||
|
||||
Must use autotools (sh configure, make, make install), though some scripts simplify the process: `makedll.sh`, `windows-builds.sh`.
|
||||
@ -386,6 +400,7 @@ Must use autotools (sh configure, make, make install), though some scripts simpl
|
||||
Adds support for ITU-T G.719 (standardization of Polycom Siren 22), used in a few Namco `.bnsf` games.
|
||||
- Source: https://github.com/kode54/libg719_decode
|
||||
- DLL: `libg719_decode.dll`
|
||||
- lib: ---
|
||||
- unknown license (possibly invalid and Polycom's)
|
||||
|
||||
Use MSVC (use `g719.sln`). It can be built with GCC too, but you'll need to manually create scripts/makefiles.
|
||||
@ -395,6 +410,7 @@ Use MSVC (use `g719.sln`). It can be built with GCC too, but you'll need to manu
|
||||
Adds support for multiple codecs: ATRAC3 (`.at3`), ATRAC3plus (`.at3`), XMA1/2 (`.xma`), WMA v1 (`.wma`), WMA v2 (`.wma`), WMAPro (`.xwma`), AAC (`.mp4`, `.aac`), Bink (`.bik`), AC3/SPDIF (`.ac3`), Opus (`.opus`), Musepack (`.mpc`), FLAC (`.flac`), etc.
|
||||
- Source: https://github.com/FFmpeg/FFmpeg/
|
||||
- DLLs: `avcodec-vgmstream-58.dll`, `avformat-vgmstream-58.dll`, `avutil-vgmstream-56.dll`, `swresample-vgmstream-3.dll`
|
||||
- lib: `-lavcodec -lavformat -lavutil -lswresample`
|
||||
- primarily licensed under the LGPL v2.1 or later, with portions licensed under the GPL v2
|
||||
|
||||
vgmstream's FFmpeg builds for Windows remove many unnecessary parts of FFmpeg to trim down its gigantic size, and are also built with the "vgmstream-" prefix to avoid clashing with other plugins. Current options can be seen in `ffmpeg_options.txt`. Linux usually links to the system's FFmpeg without issues.
|
||||
@ -410,6 +426,7 @@ Both may need yasm somewhere in PATH to properly compile: https://yasm.tortall.n
|
||||
Adds support for ATRAC9, used in `.at9` and other formats for the PS4 and Vita.
|
||||
- Source: https://github.com/Thealexbarney/LibAtrac9
|
||||
- DLL: `libatrac9.dll`
|
||||
- lib: `-latrac9` / `-l:libatrac9.a`
|
||||
- licensed under the MIT license
|
||||
|
||||
Use MSCV and `libatrac9.sln`, or GCC and the Makefile included.
|
||||
@ -420,6 +437,7 @@ Adds support for FSB CELT versions 0.6.1 and 0.11.0, used in a handful of older
|
||||
- Source (0.6.1): http://downloads.us.xiph.org/releases/celt/celt-0.6.1.tar.gz
|
||||
- Source (0.11.0): http://downloads.xiph.org/releases/celt/celt-0.11.0.tar.gz
|
||||
- DLL: `libcelt-0061.dll`, `libcelt-0110.dll`
|
||||
- lib: `-lcelt-0061` `-lcelt-0110` / `-l:libcelt-0110.a` `-l:libcelt-0061.a`
|
||||
- licensed under the MIT license
|
||||
|
||||
FSB uses two incompatible, older libcelt versions. Both libraries export the same symbols so normally can't coexist together. To get them working we need to make sure symbols are renamed first. This may be solved in various ways:
|
||||
@ -433,7 +451,7 @@ To compile we'll use autotools with GCC preprocessor renaming:
|
||||
- in the celt-0.6.1 dir:
|
||||
```
|
||||
# creates Makefiles with Automake
|
||||
sh.exe ./configure --build=mingw32 --prefix=/c/celt-0.11.0/bin/ --exec-prefix=/c/celt-0.11.0/bin/
|
||||
sh.exe ./configure --build=mingw32 --prefix=/c/celt0.6.1/bin/ --exec-prefix=/c/celt-0.6.1/bin/
|
||||
|
||||
# LDFLAGS are needed to create the .dll (Automake whinning)
|
||||
# CFLAGS rename a few CELT functions (we don't import the rest so they won't clash)
|
||||
@ -456,17 +474,19 @@ To compile we'll use autotools with GCC preprocessor renaming:
|
||||
|
||||
For Linux, an option is using AUR's scripts (https://aur.archlinux.org/packages/vgmstream-git/) that similarly patch celt libs in PKGBUILD.
|
||||
|
||||
You can also get them from the official git (https://gitlab.xiph.org/xiph/celt) call `./autogen.sh` first, then pass call configure/make with renames (see `./make-build.sh`).
|
||||
|
||||
### libspeex
|
||||
Adds support for Speex (inside custom containers), used in a few *EA* formats (`.sns`, `.sps`) for voices.
|
||||
- Source: http://downloads.us.xiph.org/releases/speex/speex-1.2.0.tar.gz
|
||||
- DLL: `libspeex.dll`
|
||||
- lib: `-lspeex`
|
||||
- licensed under the Xiph.Org variant of the BSD license.
|
||||
https://www.xiph.org/licenses/bsd/speex/
|
||||
|
||||
Should be buildable with MSVC (in /win32 dir are .sln files, but not up to date and may need to convert .vcproj to vcxproj) or autotools (use `autogen.sh`, or script below).
|
||||
|
||||
You can also find a release on Github (https://github.com/xiph/speex/releases/tag/Speex-1.2.0). It has newer timestamps and some different helper files vs Xiph's release, but actual lib should be the same. Notably, Github's release *needs* `autogen.sh` that calls `autoreconf` to generate a base `configure` script, while Xiph's pre-includes `configure`. Since getting autoreconf working on Windows can be quite involved, Xiph's release is recommended.
|
||||
You can also find a release on Github (https://github.com/xiph/speex/releases/tag/Speex-1.2.0). It has newer timestamps and some different helper files vs Xiph's release, but actual lib should be the same. Notably, Github's release *needs* `autogen.sh` that calls `autoreconf` to generate a base `configure` script, while Xiph's pre-includes `configure`. Since getting autoreconf working on Windows can be quite involved, Xiph's release is recommended on that platform.
|
||||
|
||||
Windows CMD example:
|
||||
```
|
||||
|
185
make-build.sh
Normal file
185
make-build.sh
Normal file
@ -0,0 +1,185 @@
|
||||
#!/bin/sh
|
||||
|
||||
# example script that builds vgmstream with most libs enabled using the basic makefiles
|
||||
# (needs some manual fiddling)
|
||||
# most libs use system libs if possible, but should be possible to download them, compile, and
|
||||
# pass INCS/LIBSs that use static libs
|
||||
|
||||
# todo more testing
|
||||
# - don't use ext_libs includes for linux (uses system libs)
|
||||
# - libcelt 0.6 works but 11.0 gives "Floating point exception (core dumped)" (VM?)
|
||||
exit
|
||||
|
||||
# config for make
|
||||
INCS=
|
||||
LIBS=
|
||||
FLAGS=
|
||||
|
||||
###############################################################################
|
||||
# base deps
|
||||
sudo apt-get install -y gcc g++ make build-essential git
|
||||
|
||||
|
||||
###############################################################################
|
||||
# vgmstream123 deps
|
||||
sudo apt-get install -y libao-dev
|
||||
|
||||
|
||||
###############################################################################
|
||||
# vorbis deps
|
||||
sudo apt-get install -y libvorbis-dev
|
||||
FLAGS+=" VGM_VORBIS=1"
|
||||
|
||||
|
||||
###############################################################################
|
||||
# mpeg deps
|
||||
sudo apt-get install -y libmpg123-dev
|
||||
FLAGS+=" VGM_MPEG=1"
|
||||
|
||||
|
||||
###############################################################################
|
||||
# speex deps
|
||||
sudo apt-get install -y libspeex-dev
|
||||
FLAGS+=" VGM_SPEEX=1"
|
||||
|
||||
|
||||
###############################################################################
|
||||
# ffmpeg deps
|
||||
sudo apt-get install -y libavformat-dev libavcodec-dev libavutil-dev libswresample-dev
|
||||
FLAGS+=" VGM_FFMPEG=1"
|
||||
|
||||
|
||||
###############################################################################
|
||||
# atrac9 deps (compile)
|
||||
mkdir dependencies
|
||||
cd dependencies
|
||||
git clone https://github.com/Thealexbarney/LibAtrac9
|
||||
cd LibAtrac9/C
|
||||
make
|
||||
cd ../../../
|
||||
|
||||
FLAGS+=" VGM_ATRAC9=2"
|
||||
#INCS+=" -I../dependencies/LibAtrac9/C/src"
|
||||
LIBS+=" -L../dependencies/LibAtrac9/C/bin"
|
||||
|
||||
|
||||
###############################################################################
|
||||
# celt deps (compile x2)
|
||||
mkdir dependencies
|
||||
cd dependencies
|
||||
|
||||
# used renames followed by unused renamed (but seems needed to avoid clashes)
|
||||
CELT0061_RENAMES=" \
|
||||
-Dcelt_decode=celt_0061_decode \
|
||||
-Dcelt_decoder_create=celt_0061_decoder_create \
|
||||
-Dcelt_decoder_destroy=celt_0061_decoder_destroy \
|
||||
-Dcelt_mode_create=celt_0061_mode_create \
|
||||
-Dcelt_mode_destroy=celt_0061_mode_destroy \
|
||||
-Dcelt_mode_info=celt_0061_mode_info \
|
||||
\
|
||||
-Dalg_quant=alg_quant_0061 \
|
||||
-Dalg_unquant=alg_unquant_0061 \
|
||||
-Dcelt_decoder_create_custom=celt_decoder_create_custom_0061 \
|
||||
-Dcelt_encoder_destroy=celt_encoder_destroy_0061 \
|
||||
-Dcelt_encoder_create=celt_encoder_create_0061 \
|
||||
-Dcelt_encode=celt_encode_0061 \
|
||||
-Dcelt_encode_float=celt_encode_float_0061 \
|
||||
-Dcelt_encoder_ctl=celt_encoder_ctl_0061 \
|
||||
-Dcelt_decode_float=celt_decode_float_0061 \
|
||||
-Dcelt_decoder_ctl=celt_decoder_ctl_0061 \
|
||||
-Dcompute_allocation=compute_allocation_0061 \
|
||||
-Dcompute_band_energies=compute_band_energies_0061 \
|
||||
-Ddenormalise_bands=denormalise_bands_0061 \
|
||||
-Dec_dec_init=ec_dec_init_0061 \
|
||||
-Dec_decode=ec_decode_0061 \
|
||||
-Dec_decode_bin=ec_decode_bin_0061 \
|
||||
-Dec_dec_update=ec_dec_update_0061 \
|
||||
-Dec_dec_uint=ec_dec_uint_0061 \
|
||||
-Dec_dec_bits=ec_dec_bits_0061 \
|
||||
-Dec_enc_init=ec_enc_init_0061 \
|
||||
-Dec_encode=ec_encode_0061 \
|
||||
-Dec_encode_bin=ec_encode_bin_0061 \
|
||||
-Dec_enc_uint=ec_enc_uint_0061 \
|
||||
-Dec_enc_bits=ec_enc_bits_0061 \
|
||||
-Dec_enc_done=ec_enc_done_0061 \
|
||||
-Dnormalise_bands=normalise_bands_0061 \
|
||||
-Drenormalise_vector=renormalise_vector_0061 \
|
||||
-Dquant_coarse_energy=quant_coarse_energy_0061 \
|
||||
-Dquant_fine_energy=quant_fine_energy_0061 \
|
||||
-Dquant_energy_finalise=quant_energy_finalise_0061 \
|
||||
-Dunquant_coarse_energy=unquant_coarse_energy_0061 \
|
||||
-Dunquant_energy_finalise=unquant_energy_finalise_0061 \
|
||||
-Dunquant_fine_energy=unquant_fine_energy_0061 \
|
||||
"
|
||||
# same as the above but I don't know sh enough to normalize
|
||||
CELT0110_RENAMES=" \
|
||||
-Dcelt_decode=celt_0110_decode \
|
||||
-Dcelt_decoder_create_custom=celt_0110_decoder_create_custom \
|
||||
-Dcelt_decoder_destroy=celt_0110_decoder_destroy \
|
||||
-Dcelt_mode_create=celt_0110_mode_create \
|
||||
-Dcelt_mode_destroy=celt_0110_mode_destroy \
|
||||
-Dcelt_mode_info=celt_0110_mode_info \
|
||||
\
|
||||
-Dalg_quant=alg_quant_0110 \
|
||||
-Dalg_unquant=alg_unquant_0110 \
|
||||
-Dcelt_encoder_destroy=celt_encoder_destroy_0110 \
|
||||
-Dcelt_encoder_create=celt_encoder_create_0110 \
|
||||
-Dcelt_encode=celt_encode_0110 \
|
||||
-Dcelt_encode_float=celt_encode_float_0110 \
|
||||
-Dcelt_encoder_ctl=celt_encoder_ctl_0110 \
|
||||
-Dcelt_decode_float=celt_decode_float_0110 \
|
||||
-Dcelt_decoder_ctl=celt_decoder_ctl_0110 \
|
||||
-Dcompute_allocation=compute_allocation_0110 \
|
||||
-Dcompute_band_energies=compute_band_energies_0110 \
|
||||
-Ddenormalise_bands=denormalise_bands_0110 \
|
||||
-Dec_dec_init=ec_dec_init_0110 \
|
||||
-Dec_decode=ec_decode_0110 \
|
||||
-Dec_decode_bin=ec_decode_bin_0110 \
|
||||
-Dec_dec_update=ec_dec_update_0110 \
|
||||
-Dec_dec_uint=ec_dec_uint_0110 \
|
||||
-Dec_dec_bits=ec_dec_bits_0110 \
|
||||
-Dec_enc_init=ec_enc_init_0110 \
|
||||
-Dec_encode=ec_encode_0110 \
|
||||
-Dec_encode_bin=ec_encode_bin_0110 \
|
||||
-Dec_enc_uint=ec_enc_uint_0110 \
|
||||
-Dec_enc_bits=ec_enc_bits_0110 \
|
||||
-Dec_enc_done=ec_enc_done_0110 \
|
||||
-Dnormalise_bands=normalise_bands_0110 \
|
||||
-Drenormalise_vector=renormalise_vector_0110 \
|
||||
-Dquant_coarse_energy=quant_coarse_energy_0110 \
|
||||
-Dquant_fine_energy=quant_fine_energy_0110 \
|
||||
-Dquant_energy_finalise=quant_energy_finalise_0110 \
|
||||
-Dunquant_coarse_energy=unquant_coarse_energy_0110 \
|
||||
-Dunquant_energy_finalise=unquant_energy_finalise_0110 \
|
||||
-Dunquant_fine_energy=unquant_fine_energy_0110 \
|
||||
"
|
||||
|
||||
|
||||
git clone --depth 1 --branch v0.6.1 https://gitlab.xiph.org/xiph/celt.git celt-0061
|
||||
cd celt-0061
|
||||
./autogen.sh
|
||||
./configure
|
||||
make LDFLAGS="-no-undefined" AM_CFLAGS="$CELT0061_RENAMES"
|
||||
mv ./libcelt/.libs/libcelt.a ./libcelt/.libs/libcelt-0061.a
|
||||
cd ..
|
||||
|
||||
git clone --depth 1 --branch v0.11 https://gitlab.xiph.org/xiph/celt.git celt-0110
|
||||
cd celt-0110
|
||||
./autogen.sh
|
||||
./configure
|
||||
make LDFLAGS="-no-undefined" AM_CFLAGS="-DCUSTOM_MODES=1 $CELT0110_RENAMES"
|
||||
mv ./libcelt/.libs/libcelt0.a ./libcelt/.libs/libcelt-0110.a
|
||||
|
||||
cd ..
|
||||
|
||||
cd ..
|
||||
|
||||
FLAGS+="VGM_CELT=2"
|
||||
#INCS+=" -I../dependencies/celt-0061/libcelt/.libs/"
|
||||
LIBS+=" -L../dependencies/celt-0061/libcelt/.libs/ -L../dependencies/celt-0110/libcelt/.libs/"
|
||||
|
||||
|
||||
###############################################################################
|
||||
# vgmstream
|
||||
make vgmstream_cli $FLAGS EXTRA_CFLAGS=$INCS EXTRA_LDFLAGS=$LIBS
|
||||
make vgmstream123 $FLAGS EXTRA_CFLAGS=$INCS EXTRA_LDFLAGS=$LIBS
|
Loading…
Reference in New Issue
Block a user