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.

  * Bash is required for running some tests, but not for building.

  * Go[5] is required for running some tests, but not for building. Note that
    these 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/
