diff --git a/README.md b/README.md
index 37419160..5be95325 100644
--- a/README.md
+++ b/README.md
@@ -48,103 +48,107 @@ changes to the wine/ directory.
---
Building
---
-To build Proton for Linux, set up a Debian machine with the Steam runtime and
-chroots as documented in the Steam Runtime repository:
+The following instructions describe how we create the build environment for the
+production builds of Proton. For reproducibility and security reasons, we build
+inside of a Debian 9 virtual machine. However, you should be able to follow
+these instructions on other distributions as well.
-
+The Steam Runtime provides a clean and consistent set of libraries. Software
+distributed through Steam should depend only on libraries available through the
+runtime, and so we build in that environment for production Proton builds.
+However, if you are simply making a build for yourself, you can skip the Docker
+and Steam Runtime setup steps below, as they take a very long time to set up.
+At configure-time, pass the `--no-steam-runtime` flag instead of the Docker
+flags shown here.
-In addition, you will need to install gcc-5 and a long list of dependencies
-required for Wine. The following set of commands is an example session, and may
-not be complete.
+The build system uses Docker containers. It requires your user to be able to
+usefully run Docker containers, which generally means [your user needs to be in
+the "docker" group](https://docs.docker.com/install/linux/linux-postinstall/),
+which can have [security
+implications](https://docs.docker.com/engine/security/security/).
+
+Starting from a stock Debian 9 installation, you will need to install the
+`gpgv2`, `gnupg2`, `g++`, and `g++-6-multilib` packages from the
+Debian repos. You will also need to install `meson` version 0.43 or later,
+which can be [acquired from backports](https://backports.debian.org/Instructions/). Next,
+[install Docker-CE from the official Docker repositories](https://docs.docker.com/install/linux/docker-ce/debian/).
+Finally, since we will need to be able to run Wine during the build process,
+[install the `winehq-devel` package from the official WineHQ repositories](https://wiki.winehq.org/Debian).
+This will pull in all of the dependencies required to run wine. You can then
+(and we do) uninstall the `winehq-devel` package in order to ensure that a
+system Wine installation does not interfere with your build process.
+
+Next we set up the Steam runtime build environments. Here we use the
+`wip-docker` branch to get access to the Docker images.
cd ~
git clone https://github.com/ValveSoftware/steam-runtime.git
cd steam-runtime
- #install the end-user steam runtime:
- ./build-runtime.py
- #install the 32-bit scout_beta runtime:
- ./setup_chroot.sh --beta --i386
- #enter the 32-bit runtime:
- schroot --chroot steamrt_scout_beta_i386
+ git checkout -b wip-docker origin/wip-docker
-This will enter the chroot environment, where you would issue the following commands:
+The steps below will build the Docker images. Each step will take a significant
+amount of time. Note the path to a file in the `proton` directory. See the
+previous section for instructions on cloning Proton.
- sudo apt-get install gcc-5 g++-5 g++-5-multilib flex bison libosmesa6-dev libpcap-dev libhal-dev libsane-dev libv4l-dev libgphoto2-2-dev libcapi20-dev libgsm1-dev libmpg123-dev libvulkan-dev libxslt1-dev nasm yasm
- sudo update-alternatives --install `which gcc` gcc `which gcc-5` 50
- sudo update-alternatives --set gcc `which gcc-5`
- sudo update-alternatives --install `which g++` g++ `which g++-5` 50
- sudo update-alternatives --set g++ `which g++-5`
- sudo update-alternatives --install `which cpp` cpp-bin `which cpp-5` 50
- sudo update-alternatives --set cpp-bin `which cpp-5`
- exit
+ cd ~
+ #set up the 64-bit Docker image for building Proton
+ ./steam-runtime/setup_docker.sh --beta amd64 --extra-bootstrap=./proton/steamrt-bootstrap.sh steam-proton-dev
+ #set up the 32-bit Docker image for building Proton
+ ./steam-runtime/setup_docker.sh --beta i386 --extra-bootstrap=./proton/steamrt-bootstrap.sh steam-proton-dev32
-Next, you need to repeat the process, but for amd64:
+With the build system set up, we can configure Proton and kick off the build.
+If you are not building in the runtime, pass `--no-steam-runtime` to
+`configure.sh` instead.
- ./setup_chroot.sh --beta --amd64
- schroot --chroot steamrt_scout_beta_amd64
+ mkdir proton/mybuild/
+ cd proton/mybuild
+ ../configure.sh --steam-runtime64=docker:steam-proton-dev --steam-runtime32=docker:steam-proton-dev32
+ make -j6 all dist
-And then repeat all of the commands to install gcc and Wine dependencies again.
-
-In addition, your host system will need to be able to run Wine in both 64-bit and
-32-bit modes in order to create the default prefix. It is recommended to
-install Wine from your package manager, including its optional dependencies.
-
-The openal-soft build system requires cmake 3.0.2 or later, which is newer than
-the Steam runtime SDK provides. You will need to build and install a newer
-cmake into each of the runtimes. For convenience, the build_proton.sh script
-will attempt to use cmake from ~/opt32/bin/ and ~/opt64/bin/, if available.
-
-The following example session obtained and built cmake:
-
- cd /tmp
- wget https://cmake.org/files/v3.11/cmake-3.11.4.tar.gz
- schroot --chroot steamrt_scout_beta_i386
- tar -xzf cmake-3.11.4.tar.gz
- cd cmake-3.11.4
- ./configure --parallel=4 --prefix=~/opt32
- make -j 4 && make install
- exit
- rm -rf cmake-3.11.4
- schroot --chroot steamrt_scout_beta_amd64
- tar -xzf cmake-3.11.4.tar.gz
- cd cmake-3.11.4
- ./configure --parallel=4 --prefix=~/opt64
- make -j 4 && make install
- exit
-
-
-Finally, change your directory back to proton, and run:
-
- cd ../proton
- ./build_proton.sh
-
-That should configure and build Wine, and then package the result up into
-dist/. It is important to examine the output near the end of
-build/wine.win{64,32}/config.log to ensure that you have all of the relevant
-libraries in each chroot. Search for 'executing Makefile commands' in
-config.log to find messages about missing libraries. It is normal to be missing
-a few libraries, including OpenCL, OSS, and libav.
-
-**NOTE:** The build_proton.sh script builds most components inside the Steam runtime
-chroot. However, dxvk will not build in that environment, so the build_proton.sh
-script will build it on your local system. This will require you to be able to
-build dxvk on your local system; refer to [the dxvk README.md](https://github.com/ValveSoftware/dxvk/blob/master/README.md) for more details.
+**Tip**: If you are building without the Steam runtime as shown here, you
+should first run `make obj-wine64/Makefile obj-wine32/Makefile` and check the
+files `obj-wine64/config.log` and `obj-wine32/config.log` for missing packages.
+Search for `won't be supported`. A couple of missing packages are normal:
+`opencv`, `gstreamer`, `vkd3d`, `oss`, and `libavcodec`. More than that may
+indicate a problem. One easy way to install the dependencies required to build
+Wine is to use `apt-get`'s `build-dep` feature.
+The `mybuild/dist` folder now contains a build of Proton which you can install
+manually or with `make install` to install into your user's Steam installation.
+See the next section for more details.
---
Deploying
---
-Once built, the dist/ directory will contain the files which can be distributed
-through Steam. For testing purposes, you should be able to clear out the files
-in your steamapps/common/Proton directory and replace them with the contents of
-dist/. The proton script will unpack the files on first run. Note that if you
-use the Steam client to verify local files, it will restore the production version
-of Proton.
+Steam ships with several versions of Proton, which games will use by default or
+that you can select in Steam Settings's SteamPlay page. Steam also supports
+running games with local builds of Proton, which you can install on your
+machine.
-Each component of this software is used under the terms of their licenses.
-See the LICENSE files here, as well as the LICENSE, COPYING, etc files in each
-submodule and directory for details.
+To install a local build of Proton into Steam, make a new directory in
+`~/.steam/steam/compatibilitytools.d/` with a tool name of your choosing and
+place the contents of `dist` into that folder. The `make install` target will
+perform this task for you, installing the Proton build into the Steam folder
+for the current user. You will have to restart the Steam client for it to pick
+up on a new tool.
+A correct local tool installation should look like this:
+
+ compatibilitytools.d/my_proton/
+ ├── compatibilitytool.vdf
+ ├── filelock.py
+ ├── LICENSE
+ ├── proton
+ ├── proton_dist.tar.gz
+ ├── toolmanifest.vdf
+ ├── user_settings.sample.py
+ └── version
+
+Each component of this software is used under the terms of their licenses. See
+the LICENSE files here, as well as the LICENSE,
+COPYING, etc files in each submodule and directory for details. If you
+distribute a built version of Proton to other users, you must adhere to the
+terms of these licenses.
----
Runtime Config Options
diff --git a/configure.sh b/configure.sh
index 2684c880..0eec916a 100755
--- a/configure.sh
+++ b/configure.sh
@@ -109,7 +109,7 @@ function configure() {
echo >> "$MAKEFILE" "include \$(SRCDIR)/build/makefile_base.mak"
stat "Created $MAKEFILE, now run make to build."
- stat " See BUILDING.md for make targets and instructions"
+ stat " See README.md for make targets and instructions"
}
#
@@ -214,11 +214,11 @@ usage() {
"$1" ""
"$1" " Steam Runtime"
"$1" " Proton builds that are to be installed & run under the steam client must be built with"
- "$1" " the Steam Runtime SDK to ensure compatibility. See BUILDING.md for more information."
+ "$1" " the Steam Runtime SDK to ensure compatibility. See README.md for more information."
"$1" ""
"$1" " --steam-runtime64=docker: Automatically invoke the Steam Runtime SDK in "
"$1" " for build steps that must be run in an SDK"
- "$1" " environment. See BUILDING.md for instructions to"
+ "$1" " environment. See README.md for instructions to"
"$1" " create this image."
"$1" ""
"$1" " --steam-runtime32=docker: The 32-bit docker image to use for steps that require"