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.

  * 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.

  * 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 for running tests, but not for building. Note that the
    runner.go tests do not work on Windows.

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.

  * The tests written in Go do not work.

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

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

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

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

    Either ensure yasm.exe is in %PATH% or configure CMAKE_ASM_NASM_COMPILER
    appropriately.

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