diff --git a/doc/build-standalone-unix.md b/doc/build-standalone-unix.md index b46c2232d..0345abe99 100644 --- a/doc/build-standalone-unix.md +++ b/doc/build-standalone-unix.md @@ -5,10 +5,10 @@ By default when you build `musikcube` it's almost exclusively tied to your Linux It turns out that building a single C++ app once that works across many Linux distributions and versions can be very challenging, especially when there are external dependencies involved. The difficulties have been documented and discussed countless times and include, but are not limited to: 1. Incompatible `GLIBC`/`GLIBCXX` versions -3. Incompatible versions of required dependencies -4. Incompatible locations of required dependencies (e.g. `/lib` vs `/usr/lib` vs `/usr/local/lib`) -5. Incompatible filenames for required depdencies (eg `libfoo.so.3` vs `libfoo.so`) -6. General unavailability of required dependencies (i.e. "dependency `foo` doesn't exist in `Ubuntu`'s `apt`") +2. Incompatible versions of required dependencies +3. Incompatible locations of required dependencies (e.g. `/lib` vs `/usr/lib` vs `/usr/local/lib`) +4. Incompatible filenames for required depdencies (eg `libfoo.so.3` vs `libfoo.so`) +5. General unavailability of required dependencies (i.e. "dependency `foo` doesn't exist in `Ubuntu`'s `apt`") In an ideal world we wouldn't have to worry about these problems, and `musikcube` would be available via all major Linux distribution package management systems. In practice, however, it's not. It can take tremendous time and effort to get packages accepted upstream by maintainers. For example, see the [DebianMentorsFaq](https://wiki.debian.org/DebianMentorsFaq). @@ -31,13 +31,15 @@ It's probably easiest to just install a `docker` image and use that, but an inst ## Install dependencies ### From `apt-get`: + - `sudo apt update` - `sudo apt dist-upgrade` -- `sudo apt install build-essential g++ gcc git libasound2-dev libev-dev libncurses-dev libopus-dev libopus-dev libopus0 libpulse-dev libsndio-dev libssl-dev libsystemd-dev libvorbis-dev libvorbis-dev libvorbis0a libvorbisenc2 portaudio19-dev rpm wget zlib1g-dev` +- `sudo apt install build-essential g++ gcc git libasound2-dev libev-dev libncurses-dev libopus-dev libopus-dev libopus0 libpulse-dev libsndio-dev libssl-dev libsystemd-dev libvorbis-dev libvorbis-dev libvorbis0a libvorbisenc2 portaudio19-dev rpm wget zlib1g-dev libdbus-1-dev libudev-dev libglib2.0-dev patchelf` ### Compile from source: Install the following from source, as the distro-provided packages are too old: + - `cmake` v3.27.4+ - `pipewire` v0.3.x (optional -- only if you want to use `pipewire`) @@ -66,4 +68,4 @@ Now that we have all required dependencies available it's time to compile the ap - `x.y.z` is the version of `musikcube` we'd like to appear in the filename. You can use anything you want, e.g. `0.0.0` - The build process will automatically discover and use the `/build/vendor-${arch}` directory created in the previous step. -After the script has completed you should have a set of "relocatable" binaries in `/build/musikcube/dist/x.y.z/` that will work on most Linux distributions released in 2018 or later. \ No newline at end of file +After the script has completed you should have a set of "relocatable" binaries in `/build/musikcube/dist/x.y.z/` that will work on most Linux distributions released in 2018 or later.