libhidapi-dev from Bionic repositories is too old for our needs.
Download and install a binary package for hidapi manually from
yuzu-emu/ext-linux-bin.
This also adds a number of packages required to compile hidapi. Needed
for producing new hidapi packages in the future.
Prevents repeating the same code text over and over each time apt-get is
used. This is a required variable to use apt-get in a non-interactive
container, so it should be set globally, anyways.
Adds the Clang compiler from apt.llvm.org to linux-fresh. The intention
is to run two instances of linux-fresh when checking CI on yuzu, one
compiles with GCC and the other with Clang.
This includes a workaround in Conan where the default configuration file
is not set up to permit using Clang 12. settings.yml is there to allow
using Clang 12.
This is in preparation to have a legal AppImage when Ubuntu 16.04 is
deprecated in April 2021. As stated in [AppImage's
documentation](https://docs.appimage.org/packaging-guide/distribution.html#appimagehub),
to distribute yuzu on AppImageHub, an AppImage needs to compatible with
the oldest still supported release of Ubuntu, which will be 18.04 in
April.
Beyond making AppImages, this brings a number of other changes:
- The needed CMake, GCC, and Qt versions are now variables at the top of
the Dockerfile.
- The dependencies list is sorted lexicographically.
- Added package `file`, required for the Qt linuxdeploy plugin, thus
superseding #23.
- Added package `software-properties-common`, required to use
`add-apt-repository`.
- Added package `python3-setuptools`, a dependency of `python3-pip` that
somehow isn't installed with it by default.
- Removed package `python` as yuzu no longer uses Unicorn, thus Python 2
was no longer required.
- Moved installing GCC, Qt, FFmpeg, and SDL2 from the main Ubuntu
repositories to updated launchpad repositories.
- Removed packages `cmake` and `glslang-tools`, instead opting to
download and install them from their upstream repositories.
- In the case of `glslang-tools`, Ubuntu does not have any equivalent
package for Bionic.
This does not upgrade any package versions. This only brings Ubuntu
18.04 roughly to parity with the current 20.04 container. Once an
AppImage is in action, we can upgrade the GCC and Qt versions to our
heart's content (up to GCC 11 and Qt 5.15.2). Until then, it should be
said **Mainline builds are not compatible with Ubuntu versions below
20.04 despite using 18.04 to build yuzu**. We need an AppImage to make
yuzu compatible with older distro releases, and we need an AppImage to
make yuzu compatible with current releases if we upgrade Qt and/or GCC.
Another note is that the Qt version here is being downgraded from 5.12.8
to 5.12.6. The Qt launchpad PPA used here did not release usable
`qt512webengine` packages for 5.12.8 nor 5.12.7, and since upgrading to
5.12.10 would break compatibility with wild Ubuntu 20.04 installs, a
downgrade is necessary. Hopefully this is a temporary change during our
transition to 5.15.2.
Massive thank you to @AniLeo from RPCS3 for telling me about updated GCC
and Qt launchpad PPAs.
Ubuntu 20.04's version of Boost (1.71.0) is older than yuzu's minimum requirement
(1.73.0). Thus the container was downloading Boost through conan each
time it builds yuzu.
Instead, install Boost through Conan ahead of time, as opposed to
installed effectively garbage.