This directory consumes tools from other repositories for use on the
bots. To update to newer revisions, follow these instructions:

DEPS: Set all revisions to those used in Chromium, found at
   https://chromium.googlesource.com/chromium/src/+/master/DEPS (Search for the
   corresponding repository name.)

go/bootstrap.py: Set TOOLSET_VERSION to the latest release of Go, found at
    https://golang.org/dl/.

update_clang.py: Set CLANG_REVISION and CLANG_SUB_REVISION to the values used in
    Chromium, found at
    https://chromium.googlesource.com/chromium/src/+/master/tools/clang/scripts/update.py

vs_toolchain.py: Update _GetDesiredVsToolchainHashes from Chromium, found at
    https://chromium.googlesource.com/chromium/src/+/master/build/vs_toolchain.py
    This may require taking other updates to that file. (Don't remove MSVC
    versions if BoringSSL still needs to support them.)

The .sha1 files correspond to files downloaded from Google Cloud Storage. To
update, place the updated files in their intended location and run:

    upload_to_google_storage.py -b chromium-tools FILE

cmake-linux64.tar.gz: Download the latest CMake source tarball, found at
    https://cmake.org/download/. Build it with:

        ./bootstrap --prefix=$PWD/cmake-linux64 && make && make install
        tar -czf cmake-linux64.tar.gz cmake-linux64/

    The current revision was built against cmake-3.10.0.tar.gz.

cmake-mac.tar.gz: Follow the same instructions as above on a Mac, but replace
    cmake-linux64 with cmake-mac.

    The current revision was built against cmake-3.10.0.tar.gz.

cmake-win32.zip: Update to the latest prebuilt release of CMake, found at
    https://cmake.org/download/. Use the file labeled "Windows ZIP". The
    download will be named cmake-VERSION-win32-x86.zip.

    The current revision is cmake-3.5.0-win32-x86.zip.

    TODO(davidben): The update to CMake 3.10 on Windows was rolled back due to a
    CMake bug. Update to 3.10.1 when that is released.
    https://github.com/Kitware/CMake/commit/f969f1a9ce1d0045b9d056fd08c4683c34c420fa

perl-win32.zip: Update to the latest 32-bit prebuilt "Portable" edition of
    Strawberry Perl, found at http://strawberryperl.com/releases.html. The
    download will be named strawberry-perl-VERSION-32bit-portable.zip.

    The current revision is strawberry-perl-5.26.1.1-32bit-portable.zip.

yasm-win32.exe: Update to the appropriate release of Yasm. Use the same version
    as Chromium, found at
    https://chromium.googlesource.com/chromium/src/+/master/third_party/yasm/README.chromium
    Use the release at http://yasm.tortall.net/Download.html labeled
    "Win32 .exe". The download will be named yasm-VERSION-win32.exe.

    The current revision is yasm-1.3.0-win32.exe.

Finally, update sde-linux64.tar.bz2 by downloading the latet release from intel
at
https://software.intel.com/en-us/articles/intel-software-development-emulator,
but upload it with the following command. (Note the bucket is different.)

    upload_to_google_storage.py -b chrome-boringssl-sde sde-linux64.tar.bz2

The current revision is sde-external-8.9.0-2017-08-06-lin.tar.bz2.
