Build Prerequisites:

  * CMake[1] 2.8.8 or later is required.

  * Perl 5.6.1 or later is required. On Windows, Strawberry Perl and MSYS Perl
    have both been reported to work. If not found by CMake, it may be configured
    explicitly by setting PERL_EXECUTABLE.

  * On Windows you currently must use Ninja[2] to build; on other platforms,
    it is not required, but recommended, because it makes builds faster.

  * If you need to build Ninja from source, then a recent version of
    Python[3] is required (Python 2.7.5 works).

  * On Windows only, Yasm[4] is required. If not found by CMake, it may be
    configured explicitly by setting CMAKE_ASM_NASM_COMPILER.

  * A C compiler is required. On Windows, MSVC 12 (Visual Studio 2013) or later
    with Platform SDK 8.1 or later are supported. Recent versions of GCC and
    Clang should work on non-Windows platforms, and maybe on Windows too.

  * Go[5] is required. If not found by CMake, the go executable may be
    configured explicitly by setting GO_EXECUTABLE.

Using Ninja (note the 'N' is capitalized in the cmake invocation):

  mkdir build
  cd build
  cmake -GNinja ..
  ninja

Using makefiles (does not work on Windows):

  mkdir build
  cd build
  cmake ..
  make

You usually don't need to run cmake again after changing CMakeLists.txt files
because the build scripts will detect changes to them and rebuild themselves
automatically.

Note that the default build flags in the top-level CMakeLists.txt are for
debugging - optimisation isn't enabled.

If you want to cross-compile then there are example toolchain files for 32-bit
Intel and ARM in util/. Wipe out the build directory, recreate it and run cmake
like this:

  cmake -DCMAKE_TOOLCHAIN_FILE=../util/arm-toolchain.cmake -GNinja ..

If you want to build as a shared library, pass -DBUILD_SHARED_LIBS=1. On
Windows, where functions need to be tagged with "dllimport" when coming from a
shared library, define BORINGSSL_SHARED_LIBRARY in any code which #includes the
BoringSSL headers.

Known Limitations on Windows:

  * Versions of cmake since 3.0.2 have a bug in its Ninja generator that causes
    yasm to output warnings "yasm: warning: can open only one input file, only
    the last file will be processed". These warnings can be safely ignored.
    The cmake bug is http://www.cmake.org/Bug/view.php?id=15253.

  * cmake can generate Visual Studio projects, but the generated project files
    don't have steps for assembling the assembly language source files, so they
    currently cannot be used to build BoringSSL.

[1] http://www.cmake.org/download/

[2] https://martine.github.io/ninja/

[3] https://www.python.org/downloads/

[4] http://yasm.tortall.net/

[5] https://golang.org/dl/
