Widen CI coverage: 32-bit, ASan, etc
Our CI currently just does a very basic check that everything compiles and distcheck passes. There are a lot more checks we could potentially be running, including compiling on 32-bit (and/or big-endian?) systems, building with other compilers, using static analysers, and using sanitisers as well.
https://gitlab.freedesktop.org/daniels/wayland/commits/wip/2018-08/meson-ci-asan is an incomplete attempt at doing this, which needs rebasing and potentially separating from the Meson build as well.
It takes @pq's work to enable a 32-bit build with some small tweaks. It also adds support for building with clang, using clang's static analyser, ASan (address sanitiser: valgrind-ish), and UBSan (catches C undefined behaviour, e.g. signed int underflow).
This is not yet ready to merge. Before it gets merged, we should:
- split the buildroot prep into another stage, which installs the dependencies then pushes a new container to the Docker registry, so each build stage can just reuse that instead of everything installing in parallel
- more aggressively parameterise things with variables to cut down on boilerplate
- figure out why on earth ASan is OK for me locally but fails in the Debian chroot
- fix at least the low-hanging fruit of Clang analyser warnings
- actually capture the Clang analyser output as an artifact (accidentally removed when moving to templated GitLab CI, oops)
- add support for running tests under Valgrind (pretty trivial with Meson)
I'll keep working on this in the time I have, but I'm more than happy for someone to just pick this up and run with it.