Docs: explain building bazel with bazel

Fixes https://github.com/bazelbuild/bazel/issues/9155

Change-Id: I909c5ca359ad89243667ca3f1dc09c9913ff8ce3

Closes #9169.

Change-Id: I909c5ca359ad89243667ca3f1dc09c9913ff8ce3
PiperOrigin-RevId: 263763184
diff --git a/site/docs/install-compile-source.md b/site/docs/install-compile-source.md
index d2f550e..6982fb9 100644
--- a/site/docs/install-compile-source.md
+++ b/site/docs/install-compile-source.md
@@ -14,22 +14,134 @@
 
 <h2 id="build-bazel-using-bazel">Build Bazel using Bazel</h2>
 
-If you already have a Bazel binary, you can build Bazel from a GitHub checkout.
+TL;DR:
 
-You will need:
+1.  [Get the latest Bazel release](https://github.com/bazelbuild/bazel/releases)
 
-*   A GitHub checkout of Bazel's sources at the desired commit.
+2.  [Download Bazel's sources from GitHub](https://github.com/bazelbuild/bazel/archive/master.zip)
+    and extract somewhere.
+    Alternatively you can git clone the source tree from https://github.com/bazelbuild/bazel
 
-*   The Bazel version that was the latest when the commit was merged. (Other
-    Bazel versions may work too, but are not guaranteed to.) You can either
-    download this version from
-    [GitHub](https://github.com/bazelbuild/bazel/releases), or build it from
-    source, or bootstrap it as described below.
+3.  Install the same prerequisites as for bootstrapping (see
+    [for Unix-like systems](#bootstrap-unix-prereq) or
+    [for Windows](#bootstrap-windows-prereq))
 
-*   The same prerequisites as for bootstrapping (JDK, C++ compiler, etc.)
+4.  Build Bazel using Bazel: `bazel build //src:bazel`
+    (or `bazel build //src:bazel-dev.exe` on Windows)
 
-Once you have a Bazel binary to build with and the source tree of Bazel, `cd`
-into the directory and run `bazel build //src:bazel`.
+5.  The resulting binary is at `bazel-bin/src/bazel`
+    (or `bazel-bin\src\bazel-dev.exe` on Windows). You can copy it wherever you
+    like and use immediately without further installation.
+
+Detailed instructions follow below.
+
+<h3 id="build-bazel-install-bazel">1. Get the latest Bazel release</h3>
+
+**Goal**: Install or download a release version of Bazel. Make sure you can run
+it by typing `bazel` in a terminal.
+
+**Reason**: To build Bazel from a GitHub source tree, you need a pre-existing
+Bazel binary. You can install one from a package manager or download one from
+GitHub. See <a href="install.html">Installing Bazel</a>. (Or you can [build from
+scratch (bootstrap)](#bootstrap-bazel).)
+
+**Troubleshooting**:
+
+*   If you cannot run Bazel by typing `bazel` in a terminal:
+
+    *   Maybe your Bazel binary's directory is not on the PATH.
+
+        This is not a big problem. Instead of typing `bazel`, you will need to
+        type the full path.
+
+    *   Maybe the Bazel binary itself is not called `bazel` (on Unixes) or
+        `bazel.exe` (on Windows).
+
+        This is not a big problem. You can either rename the binary, or type the
+        binary's name instead of `bazel`.
+
+    *   Maybe the binary is not executable (on Unixes).
+
+        You must make the binary executable by running `chmod +x /path/to/bazel`.
+
+<h3 id="build-bazel-git">2. Download Bazel's sources from GitHub</h3>
+
+If you are familiar with Git, then just git clone https://github.com/bazelbuild/bazel
+
+Otherwise:
+
+1.  Download the
+    [latest sources as a zip file](https://github.com/bazelbuild/bazel/archive/master.zip).
+
+2.  Extract the contents somewhere.
+
+    For example create a `bazel-src` directory under your home directory and
+    extract there.
+
+<h3 id="build-bazel-prerequisites">3. Install prerequisites</h3>
+
+Install the same prerequisites as for bootstrapping (see below) -- JDK, C++
+compiler, MSYS2 (if you are building on Windows), etc.
+
+<h3 id="build-bazel-on-unixes">4. Build Bazel on Ubuntu Linux, macOS, and other
+Unix-like systems</h3>
+
+([Scroll down](#build-bazel-on-windows) for instructions for Windows.)
+
+**Goal**: Run Bazel to build a custom Bazel binary (`bazel-bin/src/bazel`).
+
+**Instructions**:
+
+1.  Start a Bash terminal
+
+2.  `cd` into the directory where you extracted (or cloned) Bazel's sources.
+
+    For example if you extracted the sources under your home directory, run:
+
+        cd ~/bazel-src
+
+3.  Build Bazel from source:
+
+        bazel build //src:bazel
+
+4.  The output will be at `bazel-bin/src/bazel`
+
+<h3 id="build-bazel-on-windows">4. Build Bazel on Windows</h3>
+
+([Scroll up](#build-bazel-on-unixes) for instructions for Linux, macOS, and other
+Unix-like systems.)
+
+**Goal**: Run Bazel to build a custom Bazel binary
+(`bazel-bin\src\bazel-dev.exe`).
+
+**Instructions**:
+
+1.  Start Command Prompt (Start Menu &gt; Run &gt; "cmd.exe")
+
+2.  `cd` into the directory where you extracted (or cloned) Bazel's sources.
+
+    For example if you extracted the sources under your home directory, run:
+
+        cd %USERPROFILE%\bazel-src
+
+3.  Build Bazel from source:
+
+        bazel build //src:bazel-dev.exe
+
+    Alternatively you can build `//src:bazel.exe` -- that yields a smaller
+    binary but it's slower to build.
+
+4.  The output will be at `bazel-bin\src\bazel-dev.exe`
+
+<h3 id="build-bazel-install">5. Install the built binary</h3>
+
+Actually, there's nothing to install.
+
+The output of the previous step is a self-contained Bazel binary. You can copy
+it to any directory and use immediately. (It's useful if that directory is on
+your PATH so that you can run "bazel" everywhere.)
+
+---
 
 <h2 id="bootstrap-bazel">Build Bazel from scratch (bootstrapping)</h2>
 
@@ -41,25 +153,23 @@
 
 1.  Download `bazel-<version>-dist.zip` from
     [GitHub](https://github.com/bazelbuild/bazel/releases), for example
-    `bazel-0.18.0-dist.zip`.
+    `bazel-0.28.1-dist.zip`.
 
-    There is a **single, architecture-independent** distribution archive.  There
-    are no architecture-specific or OS-specific distribution archives.
+    **Attention**:
 
-    You **have to use the distribution archive** to bootstrap Bazel. You cannot
-    use a source tree cloned from GitHub. (The distribution archive contains
-    generated source files that are required for bootstrapping and are not part
-    of the normal Git source tree.)
+    -   There is a **single, architecture-independent** distribution archive.
+        There are no architecture-specific or OS-specific distribution archives.
+    -   These sources are **not the same as the GitHub source tree**. You
+        have to use the distribution archive to bootstrap Bazel. You cannot
+        use a source tree cloned from GitHub. (The distribution archive contains
+        generated source files that are required for bootstrapping and are not part
+        of the normal Git source tree.)
 
-2.  Unpack the zip file somewhere on disk.
+2.  Unpack the distribution archive somewhere on disk.
 
     We recommend to also verify the signature made by our
     [release key](https://bazel.build/bazel-release.pub.gpg) 48457EE0.
 
-**To build a development version** of Bazel from a GitHub checkout, you need a
-working Bazel binary. [Scroll up](#build-bazel-using-bazel) to see how to build
-Bazel using Bazel.
-
 <h3 id="bootstrap-unix">2. Bootstrap Bazel on Ubuntu Linux, macOS, and other Unix-like systems</h3>
 
 ([Scroll down](#bootstrap-windows) for instructions for Windows.)
@@ -100,7 +210,7 @@
 
 To build the `bazel` binary in a reproducible way, also set
 [`SOURCE_DATE_EPOCH`](https://reproducible-builds.org/specs/source-date-epoch/)
-in the `compile.sh` step.
+in the "Run the compilation script" step.
 
 <h3 id="bootstrap-windows">2. Bootstrap Bazel on Windows</h3>
 
@@ -162,12 +272,16 @@
 
 3.  `cd` to the directory where you unpacked the distribution archive.
 
-4.  Run the compilation script: `./compile.sh`
+4.  Run the compilation script: `env EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk//:jdk" ./compile.sh`
 
 The compiled output is placed into `output/bazel.exe`. This is a self-contained
 Bazel binary, without an embedded JDK. You can copy it anywhere or use it
 in-place. For convenience we recommend copying this binary to a directory that's
 on your `PATH`.
 
+To build the `bazel.exe` binary in a reproducible way, also set
+[`SOURCE_DATE_EPOCH`](https://reproducible-builds.org/specs/source-date-epoch/)
+in the "Run the compilation script" step.
+
 You don't need to run Bazel from the MSYS2 shell. You can run Bazel from the
 Command Prompt (`cmd.exe`) or PowerShell.