diff --git a/.gitignore b/.gitignore index 6bacef0764e6ccae98272f959eaec0c2a6a8c37b..e9badd54e3ea8721257d6a1d61083a28125ed75f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ /_build/ /relocatable-install/ +/libcapsule_*.dsc +/libcapsule_*.tar.[gx]z diff --git a/Makefile b/Makefile index 4b327cd24e96ce54f2ff18bbf8178efd601b5d8e..9a4c951a1d24b10cfc08c9002c4141bba4c19417 100644 --- a/Makefile +++ b/Makefile @@ -1,23 +1,55 @@ all: install -install: install-amd64 install-i386 +chroot = /srv/jessie + +in_chroot = \ + bwrap \ + --ro-bind $(chroot) / \ + --dev-bind /dev /dev \ + --tmpfs /tmp \ + --tmpfs /home \ + --bind $(CURDIR) $(CURDIR) \ + --chdir $(CURDIR) \ + --setenv LC_ALL C.UTF-8 \ + $(NULL) + +install: install-amd64 install-i386 libcapsule/configure install pressure-vessel-wrap relocatable-install/bin/ mkdir -p relocatable-install/sources install -m644 THIRD-PARTY.md relocatable-install/sources/README.txt install -m644 libcapsule/debian/copyright relocatable-install/sources/capsule-capture-libs.txt install -m644 /usr/share/doc/zlib1g/copyright relocatable-install/sources/libz.txt install -m644 /usr/share/doc/libelf1/copyright relocatable-install/sources/libelf.txt - install -m644 libcapsule-*.tar.* relocatable-install/sources/ - cd relocatable-install/sources; apt-get --download-only source elfutils zlib + dcmd install -m644 libcapsule*.dsc relocatable-install/sources/ + $(in_chroot) $(MAKE) in-chroot/install + +in-chroot/install: + cd relocatable-install/sources; \ + apt-get --download-only source elfutils zlib libcapsule/configure: rm -fr libcapsule - tar -zxvf libcapsule-*.tar.* + first=; \ + for t in libcapsule*.dsc; do \ + if [ -z "$$first" ]; then \ + first="$$t"; \ + else \ + echo "Exactly one libcapsule*.dsc is required" >&2; \ + exit 1; \ + fi; \ + done + $(in_chroot) $(MAKE) in-chroot/libcapsule/configure + +in-chroot/libcapsule/configure: + dpkg-source -x libcapsule*.dsc mv libcapsule-*/ libcapsule set -e; cd libcapsule; NOCONFIGURE=1 ./autogen.sh _build/%/config.status: libcapsule/configure Makefile mkdir -p _build/$*/libcapsule + $(in_chroot) $(MAKE) in-chroot/configure-$* + +in-chroot/configure-%: set -eu; \ eval "$$(dpkg-architecture -a"$*" --print-set)"; \ case "$${DEB_BUILD_ARCH}/$${DEB_HOST_ARCH}" in \ @@ -36,11 +68,14 @@ _build/%/config.status: libcapsule/configure Makefile $(NULL) build-%: _build/%/config.status Makefile - make -C _build/$*/libcapsule + $(in_chroot) $(MAKE) -C _build/$*/libcapsule install-%: build-% Makefile + mkdir -p relocatable-install/bin + $(in_chroot) $(MAKE) in-chroot/install-$* + +in-chroot/install-%: set -eu; \ - mkdir -p relocatable-install/bin; \ eval "$$(dpkg-architecture -a"$*" --print-set)"; \ mkdir -p "relocatable-install/lib/$${DEB_HOST_MULTIARCH}"; \ install "_build/$*/libcapsule/capsule-capture-libs" "_build/$${DEB_HOST_MULTIARCH}-capsule-capture-libs"; \ diff --git a/README.md b/README.md index be135785fff96a4730174bce60813a5e1d675926..ba583d4972b39251139d3d7e549dae404c379241 100644 --- a/README.md +++ b/README.md @@ -21,25 +21,32 @@ that won't be synchronised, other than /tmp or similar.) We can get a more predictable library stack than the `LD_LIBRARY_PATH`-based Steam Runtime by making an alternative runtime available over `/usr`, `/lib*`, `/bin`, `/sbin`, analogous to Flatpak -runtimes, possibly using [libcapsule][] to share the host's graphics -driver stack. (This mode is not yet implemented.) +runtimes, using some or all of the host system's graphics stack. + +A future goal is to use [libcapsule][] to avoid the library dependencies +of the host system's graphics stack influencing the libraries loaded by +games, particularly libstdc++. This is not yet implemented. [libcapsule]: https://gitlab.collabora.com/vivek/libcapsule/ Building a relocatable install ------------------------------ -On a system with autoconf-archive 20160916-1~bpo8+1 or later, check out -libcapsule from git and use `aclocal -I m4 --install` to copy required -macros to the `m4` directory. Put it in the `libcapsule/` subdirectory -of `pressure-vessel`. +Build a Debian source package (`.dsc`, `.debian.tar.*`, `.orig.tar.*` +for libcapsule 0.20180430.0 or later, on a system with autoconf-archive +20160916-1~bpo8+1 or later. Put it in the top-level directory of +`pressure-vessel`, for example: + + dcmd cp ../build-area/libcapsule_0.20180430.0-0co1.dsc . The build system also needs `bubblewrap` and `debootstrap`. To make the built version compatible with older systems, you will need a -Debian 8 'jessie' chroot with some extra packages (SteamOS 2 'brewmaster' +Debian 8 'jessie' chroot with some extra packages. SteamOS 2 'brewmaster' is not suitable, because its amd64 and i386 linux-libc-dev packages are -not co-installable). +not co-installable. + +To prepare the chroot: sudo debootstrap jessie /srv/jessie http://deb.debian.org/debian echo 'deb-src http://deb.debian.org/debian jessie main' | \ @@ -52,14 +59,10 @@ not co-installable). gtk-doc-tools libelf-dev libelf-dev:i386 libipc-run-perl \ libjpeg62-turbo libjpeg62-turbo:i386 perl xsltproc zlib1g zlib1g:i386 sudo chroot /srv/jessie apt install -t jessie-backports autoconf-archive - bwrap \ - --ro-bind /srv/jessie / \ - --dev-bind /dev /dev \ - --tmpfs /tmp \ - --bind /home /home \ - --chdir $(pwd) \ - --setenv LC_ALL C.UTF-8 \ - make + +To build the relocatable install: + + make chroot=/srv/jessie Binaries and source code end up in `relocatable-install/` which can be copied to wherever you want.